<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>213706</bug_id>
          
          <creation_ts>2020-06-28 16:44:18 -0700</creation_ts>
          <short_desc>Remove remaining makeSimpleColorFrom* variants</short_desc>
          <delta_ts>2020-06-29 13:57:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>pdr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1666943</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-28 16:44:18 -0700</bug_when>
    <thetext>Remove remaining makeSimpleColorFrom* variants</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666950</commentid>
    <comment_count>1</comment_count>
      <attachid>403017</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-28 17:10:53 -0700</bug_when>
    <thetext>Created attachment 403017
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666958</commentid>
    <comment_count>2</comment_count>
      <attachid>403020</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-28 18:04:24 -0700</bug_when>
    <thetext>Created attachment 403020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667145</commentid>
    <comment_count>3</comment_count>
      <attachid>403020</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-06-29 09:35:28 -0700</bug_when>
    <thetext>Comment on attachment 403020
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=403020&amp;action=review

&gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:918
&gt; +    if (state().strokeStyle.isValid() &amp;&amp; state().strokeStyle.isEquivalent(color))

Seems awkward that we need to explicitly check isValid. Why does isEquivalent ever return true when isValid is false? Wish invalid color was a little more like Optional&apos;s nullopt.

&gt; Source/WebCore/html/canvas/CanvasStyle.h:74
&gt;          CMYKAColor(const CMYKAColor&amp;) = default;

Why is this needed?

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:38
&gt; +template&lt;typename&gt; struct CMYKA;

Alphabetical order, please

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:67
&gt; -    return std::clamp(static_cast&lt;int&gt;(std::lroundf(f)), 0, 255);
&gt; +    return std::clamp(static_cast&lt;int&gt;(std::round(f)), 0, 255);

I think maybe std::lround would be better than std::round. Since the library can round and convert to int in a single operation, why not do it?

Or if we are trying to make this work for values larger or smaller than an int, then we should not cast to int, and need a clamp that takes a floating point value as an argument.

&gt; Source/WebCore/platform/graphics/ColorUtilities.h:72
&gt; -    return std::clamp(static_cast&lt;int&gt;(std::lroundf(f * 255.0f)), 0, 255);
&gt; +    return std::clamp(static_cast&lt;int&gt;(std::round(f * 255.0f)), 0, 255);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667175</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-29 10:29:53 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #3)
&gt; Comment on attachment 403020 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=403020&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:918
&gt; &gt; +    if (state().strokeStyle.isValid() &amp;&amp; state().strokeStyle.isEquivalent(color))
&gt; 
&gt; Seems awkward that we need to explicitly check isValid. Why does
&gt; isEquivalent ever return true when isValid is false? Wish invalid color was
&gt; a little more like Optional&apos;s nullopt.

Looks like this isValid() is totally not needed. isEquivalent() will return false already is the CanvasStyle is in the invalid state. Removed a bunch of these.


&gt; 
&gt; &gt; Source/WebCore/html/canvas/CanvasStyle.h:74
&gt; &gt;          CMYKAColor(const CMYKAColor&amp;) = default;
&gt; 
&gt; Why is this needed?

I am not sure. Will try removing it.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:38
&gt; &gt; +template&lt;typename&gt; struct CMYKA;
&gt; 
&gt; Alphabetical order, please

Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:67
&gt; &gt; -    return std::clamp(static_cast&lt;int&gt;(std::lroundf(f)), 0, 255);
&gt; &gt; +    return std::clamp(static_cast&lt;int&gt;(std::round(f)), 0, 255);
&gt; 
&gt; I think maybe std::lround would be better than std::round. Since the library
&gt; can round and convert to int in a single operation, why not do it?
&gt; 
&gt; Or if we are trying to make this work for values larger or smaller than an
&gt; int, then we should not cast to int, and need a clamp that takes a floating
&gt; point value as an argument.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ColorUtilities.h:72
&gt; &gt; -    return std::clamp(static_cast&lt;int&gt;(std::lroundf(f * 255.0f)), 0, 255);
&gt; &gt; +    return std::clamp(static_cast&lt;int&gt;(std::round(f * 255.0f)), 0, 255);
&gt; 
&gt; Ditto.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667197</commentid>
    <comment_count>5</comment_count>
      <attachid>403088</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-06-29 11:07:04 -0700</bug_when>
    <thetext>Created attachment 403088
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667251</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-29 13:31:50 -0700</bug_when>
    <thetext>Committed r263688: &lt;https://trac.webkit.org/changeset/263688&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 403088.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1667266</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-29 13:57:07 -0700</bug_when>
    <thetext>&lt;rdar://problem/64906405&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403017</attachid>
            <date>2020-06-28 17:10:53 -0700</date>
            <delta_ts>2020-06-28 18:04:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213706-20200628171052.patch</filename>
            <type>text/plain</type>
            <size>45588</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBAQAorMjAyMC0wNi0yOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyBtYWtl
U2ltcGxlQ29sb3JGcm9tKiB2YXJpYW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBt
YWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisgICAgICAgIC0gVXBkYXRlZCBjYWxsZXJzIHRoYXQg
bmVlZCB0byBwYXNzIGZsb2F0cyB0byB1c2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0p
OworICAgICAgICAtIFVwZGF0ZWQgY2FsbGVycyB0aGF0IGRvbid0IG5lZWQgdG8gcGFzcyBmbG9h
dHMsIG1vc3RseSBjb21waWxlIHRpbWUgY29uc3RhbnQKKyAgICAgICAgICBTaW1wbGVDb2xvcnMg
dG8gdXNlIG1ha2VTaW1wbGVDb2xvciguLi4pLCBwYXNzaW5nIGluIDAtMjU1IGJhc2VkIGNvbXBv
bmVudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgLSBVcGRhdGVkIGNhbGxlcnMgb2YgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBIHRvIHVzZSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShDTVlL
QSB7IC4uLiB9KSkuCisgICAgICAgICAgVGhpcyByZXF1aXJlZCBhZGRpbmcgQ01ZS0EgdHlwZSB0
byBDb2xvclR5cGVzLmggYW5kIG1vdmluZyBjb252ZXJzaW9uIFNSR0JBIHRvCisgICAgICAgICAg
Q29sb3JVdGlsaXRpZXMgd2l0aCB0aGUgb3RoZXIgY29sb3IgY29udmVyc2lvbiBjb2RlLgorICAg
ICAgICAtIEFkZGVkIGRlZHVjdGlvbiBndWlkZXMgZm9yIGNvbG9yIHR5cGVzIHRvIGFsbG93IGNv
bXBvbmVudCB0eXBlIGRlZHVjdGlvbi4gVGhpcyBhbGxvd3MgCisgICAgICAgICAgdXMgdG8gd3Jp
dGU6CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBIHsgcmVkRmxvYXQsIGdyZWVuRmxv
YXQsIGJsdWVGbG9hdCwgYWxwaGFGbG9hdCB9KQorCisgICAgICAgICAgcmVhdGhlciB0aGFuIHRo
ZSBtb3JlIGN1bWJlcnNvbWU6CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBPGZsb2F0
PiB7IHJlZEZsb2F0LCBncmVlbkZsb2F0LCBibHVlRmxvYXQsIGFscGhhRmxvYXQgfSkKKworICAg
ICAgICAtIEFkZGVkIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBjb2xvciB0eXBlLiBP
bmx5IHVzZWQgYnkgQ01ZS0EgYXQgdGhlIG1vbWVudCwKKyAgICAgICAgICBidXQgZ2VuZXJhbGx5
IHVzZWZ1bCwgc28gYWRkZWQgZm9yIGFsbCBvZiB0aGVtLiBGb3IgYWxsIHR5cGVzIGNvbnZlcnRh
YmxlIHRvIENvbG9yQ29tcG9uZW50cywKKyAgICAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gdXNl
cyB0aGUgY29udmVyc2lvbiB0byBDb2xvckNvbXBvbmVudHMgdG8gYXZvaWQgcmVkdW5kYW5jeS4K
KworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ry
b2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IHR5cGVkIGNvbG9y
IGJhc2VkIENhbnZhc1N0eWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3IgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy9tYWtlU2ltcGxlQ29s
b3JGcm9tQ01ZS0EuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAgICAgICBSZXBs
YWNlIGNvbnN0cnVjdG9ycyB0YWtpbmcgcmF3IGZsb2F0cyB3aXRoIG9uZXMgdGFraW5nIHR5cGVk
IGNvbG9ycyAoU1JHQkE8ZmxvYXQ+L0NNWUtBPGZsb2F0PikKKyAgICAgICAgdG8gbWFrZSBpdCBt
b3JlIGNsZWFyIHdoYXQgdGhlIHBhcmFtZXRlcnMgbWVhbi4gCisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IgY29uc3QpOgorICAgICAgICBDb21wYXJlIHRo
ZSBjbXlrYSBjb21wb25lbnRzIHVzaW5nIG5ldyBvcGVyYXRvcj09IGltcGxlbWVudGF0aW9uIGZv
ciBDTVlLQTxmbG9hdD4uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFs
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRS
R0JBIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnRDTVlLQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgaXNFcXVpdmFs
ZW50UkdCQS9pc0VxdWl2YWxlbnRDTVlLQSB3aXRoIG92ZXJsb2FkZWQgaXNFcXVpdmFsZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5RmlsbENvbG9yIGNvbnN0KToKKyAg
ICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZXMgb2YgQ01ZS0EgbWVtYmVycy4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAgICBVc2UgU1JHQkE8ZmxvYXQ+IGFuZCBD
TVlLQTxmbG9hdD4gdG8gc2ltcGxpZnkgaW50ZXJmYWNlcworICAgICAgICAKKyAgICAgICAgKiBw
YWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKiBwYWdlL2xpbnV4L1Jlc291cmNl
VXNhZ2VPdmVybGF5TGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZU92
ZXJsYXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxlQ29sb3Ig
cmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cywgYWxsb3dpbmcgZm9yCisgICAg
ICAgIGNvbnN0YW50IGV4cHJlc3Npb24gY3JlYXRpb24gb2YgU2ltcGxlQ29sb3JzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQg
Y29uc3QpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJhdGhl
ciB0aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICBGaXggY29tbWVudC4KKworICAgICAgICAo
V2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICBVc2UgbWFrZVNpbXBs
ZUNvbG9yKC4uLikgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIC0g
QWRkIGRlZHVjdGlvbiBndWlkZXMgYW5kIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBj
b2xvciB0eXBlLgorICAgICAgICAtIEFkZCBDTVlLQSB0eXBlLiBObyBjb252ZXJzaW9uIHRvIENv
bG9yQ29tcG9uZW50cyB5ZXQsIGFzIENvbG9yQ29tcG9uZW50cworICAgICAgICAgIG9ubHkgd29y
a3Mgd2l0aCA0IGNvbXBvbmVudCBjb2xvcnMsIG5vdCBvbmVzIHdpdGggNSBsaWtlIENNWUtBLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAgIE1vdmUgY29udmVyc2lvbiBmcm9tIENNWUtB
IHRvIFNSR0JBIGZyb20gbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBIHRvIGhlcmUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9Db21wb25lbnRCeXRlKToKKyAgICAgICAgVXNlIHN0ZDo6cm91bmQgcmF0aGVyIHRo
YW4gc3RkOjpscm91bmRmLCBzaW5jZSBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgcmVzdWx0IAorICAg
ICAgICBhbmQgaXQgcmVhZHMgbmljZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ01Z
S0EpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIC0gUmVtb3ZlZCBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisg
ICAgICAgIC0gQWRkZWQgY29uc3RleHByIG92ZXJsb2FkIG9mIG1ha2VTaW1wbGVDb2xvciB0YWtp
bmcgYSBjb25zdCBTUkdCQTx1aW50OF90PiYuCisgICAgICAgIC0gRml4ZWQgZm9yd2FyZCBkZWNs
YXJhdGlvbiBvZiBtYWtlU2ltcGxlQ29sb3IgdGhhdCB3YXMgdGFraW5nIENvbG9yQ29tcG9uZW50
cyAKKyAgICAgICAgICB0byBhY3R1YWxseSB0YWtlIGFuIFNSR0JBPGZsb2F0Piwgd2hpY2ggaXMg
d2hhdCB0aGUgaW5saW5lIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5CisgICAgICAgICAgdGFrZXMu
CisgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRU
cmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJv
bUFSR0JDRkFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgVXNlIG1h
a2VTaW1wbGVDb2xvcihTUkdCQSB7IC4uLiB9KSByYXRoZXIgdGhhbiBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRnJv
bVVJQ29sb3IpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJh
dGhlciB0aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuIENhc3RpbmcgdG8gCisgICAgICAg
IGZsb2F0IGlzIG5lZWRlZCwgYXMgdGhlIGlucHV0IHR5cGVzIGFyZSBDR0Zsb2F0IHdoaWNoIGlz
IGRvdWJsZSBpbiA2NC1iaXQgZW52aXJvbm1lbnRzCisgICAgICAgIGFuZCB3b24ndCBhdXRvbWF0
aWNhbGx5IG5hcnJvdyB3aXRoIHRoZSBuZXcgdHlwZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvTGVnYWN5VGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VGlsZUNhY2hl
Ojpjb2xvckZvckdyaWRUaWxlQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJzKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVDb2xvciByYXRoZXIgdGhhbiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzLCBhbGxvd2luZyBmb3IKKyAgICAgICAgY29uc3RhbnQg
ZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICBVc2Ug
Q29sb3I6OmJsYWNrL0NvbG9yOjp3aGl0ZS5jb2xvcldpdGhBbHBoYSguLi4pIHJhdGhlciB0aGFu
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMsIAorICAgICAgICBhbGxvd2luZyBmb3IgY29uc3Rh
bnQgZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKIDIwMjAtMDYtMjcgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgaU9TIFNhZmFyaSBpbmNv
cnJlY3RseSByZXBvcnRzICJBcHBsZUNvcmVNZWRpYSIgYXMgVUEgc3RyaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxNCwyMyArOTE0LDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2V0U3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xv
cihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLnN0cm9r
ZVN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudFJHQkEo
Z3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKQorICAgIGF1dG8gY29sb3Ig
PSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH07CisgICAg
aWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5bGUu
aXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldFN0cm9rZVN0eWxl
KENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTdHJva2VTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldFN0cm9rZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0g
ICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5
bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBiLCBhKSkKKyAgICBhdXRvIGNvbG9yID0gU1JHQkEg
eyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYm
IHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsKKyAgICBzZXRT
dHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxp
ZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50Q01ZS0EoYywgbSwgeSwgaywg
YSkpCisgICAgYXV0byBjb2xvciA9IENNWUtBIHsgYywgbSwgeSwgaywgYSB9OworICAgIGlmIChz
dGF0ZSgpLnN0cm9rZVN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1
aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRTdHJva2VTdHlsZShDYW52
YXNTdHlsZShjLCBtLCB5LCBrLCBhKSk7CisgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUo
Y29sb3IpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxs
Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKQpAQCAtOTUw
LDIzICs5NTMsMjYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5pc1Zh
bGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCisgICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RhdGUoKS5m
aWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudChjb2xv
cikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoZ3JheUxl
dmVsLCBhbHBoYSkpOworICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBy
LCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIGlmIChzdGF0ZSgpLmZpbGxTdHls
ZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBi
LCBhKSkKKyAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0
YXRlKCkuZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxl
bnQoY29sb3IpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxl
KHIsIGcsIGIsIGEpKTsKKyAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxsQ29sb3IoZmxvYXQg
YywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUo
KS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudENN
WUtBKGMsIG0sIHksIGssIGEpKQorICAgIGF1dG8gY29sb3IgPSBDTVlLQSB7IGMsIG0sIHksIGss
IGEgfTsKKyAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmls
bFN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRGaWxs
U3R5bGUoQ2FudmFzU3R5bGUoYywgbSwgeSwgaywgYSkpOworICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmJlZ2luUGF0aCgpCkBAIC0xMzA3LDE3ICsxMzEzLDE3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQg
Z3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgZ3JheUxldmVsLCBncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBi
bHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMociwgZywgYiwgYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBr
LCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJs
dXIsIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgc2V0U2hh
ZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yKHRvU1JH
QkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y2xlYXJTaGFkb3coKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOCAr
OTIsMTMgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKENvbG9yIGNvbG9yKQogewogfQogCi1D
YW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKLSAg
ICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZl
bCwgZ3JheUxldmVsLCBhbHBoYSkpCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29uc3QgU1JH
QkE8ZmxvYXQ+JiBjb2xvckNvbXBvbmVudHMpCisgICAgOiBtX3N0eWxlKG1ha2VTaW1wbGVDb2xv
cihjb2xvckNvbXBvbmVudHMpKQogewogfQogCi1DYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLSAgICA6IG1fc3R5bGUobWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSkKLXsKLX0KLQotQ2FudmFzU3R5bGU6OkNhbnZh
c1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAg
OiBtX3N0eWxlKENNWUtBQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwg
aywgYSksIGMsIG0sIHksIGssIGEgfSkKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBD
TVlLQTxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykKKyAgICA6IG1fc3R5bGUoQ01ZS0FDb2xvciB7
IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGNvbG9yQ29tcG9uZW50cykpLCBjb2xvckNvbXBvbmVu
dHMgfSkKIHsKIH0KIApAQCAtMTUxLDI3ICsxNDYsMjAgQEAgYm9vbCBDYW52YXNTdHlsZTo6aXNF
cXVpdmFsZW50Q29sb3IoY29ucwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihvdGhlci5tX3N0eWxl
KSkKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBXVEY6OmdldDxD
b2xvcj4ob3RoZXIubV9zdHlsZSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
TVlLQUNvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+
KG90aGVyLm1fc3R5bGUpKSB7Ci0gICAgICAgIGF1dG8mIGEgPSBXVEY6OmdldDxDTVlLQUNvbG9y
PihtX3N0eWxlKTsKLSAgICAgICAgYXV0byYgYiA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG90aGVy
Lm1fc3R5bGUpOwotICAgICAgICByZXR1cm4gYS5jID09IGIuYyAmJiBhLm0gPT0gYi5tICYmIGEu
eSA9PSBiLnkgJiYgYS5rID09IGIuayAmJiBhLmEgPT0gYi5hOwotICAgIH0KKyAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29tcG9uZW50cyA9PSBXVEY6OmdldDxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKS5jb21wb25lbnRzOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBKGZsb2F0IHIsIGZsb2F0IGcsIGZs
b2F0IGIsIGZsb2F0IGEpIGNvbnN0Citib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnQoY29u
c3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHls
ZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8Q29sb3I+
KG1fc3R5bGUpID09IG1ha2VTaW1wbGVDb2xvcihjb21wb25lbnRzKTsKIH0KIAotYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxv
YXQgaywgZmxvYXQgYSkgY29uc3QKK2Jvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudChjb25z
dCBDTVlLQTxmbG9hdD4mIGNvbXBvbmVudHMpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwot
ICAgIHJldHVybiBjID09IGNoYW5uZWxzLmMgJiYgbSA9PSBjaGFubmVscy5tICYmIHkgPT0gY2hh
bm5lbHMueSAmJiBrID09IGNoYW5uZWxzLmsgJiYgYSA9PSBjaGFubmVscy5hOworICAgIHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0
PENNWUtBQ29sb3I+KG1fc3R5bGUpLmNvbXBvbmVudHMgPT0gY29tcG9uZW50czsKIH0KIAogdm9p
ZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CkBAIC0xODQsOSArMTcyLDkgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VD
b2xvcihHcmFwaAogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogICAgICAgICAgICAgLy8gV2UnbGwg
bmVlZCBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24gdG8gc3VwcG9ydCBDTVlLQSBjb3JyZWN0
bHkKICNpZiBVU0UoQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3Io
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuYywgY29sb3IubSwgY29sb3IueSwgY29s
b3IuaywgY29sb3IuYSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3Io
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuY29tcG9uZW50cy5jeWFuLCBjb2xvci5j
b21wb25lbnRzLm1hZ2VudGEsIGNvbG9yLmNvbXBvbmVudHMueWVsbG93LCBjb2xvci5jb21wb25l
bnRzLmJsYWNrLCBjb2xvci5jb21wb25lbnRzLmFscGhhKTsKICNlbHNlCi0gICAgICAgICAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yLmNvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoY29sb3IuY29sb3JDb252ZXJ0ZWRUb1NSR0JBKTsKICNlbmRpZgogICAg
ICAgICB9LAogICAgICAgICBbJmNvbnRleHRdIChjb25zdCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+
JiBncmFkaWVudCkgewpAQCAtMjE0LDkgKzIwMiw5IEBAIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5
RmlsbENvbG9yKEdyYXBoaWMKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2gg
cGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KICAgICAgICAgICAgIC8v
IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIENvbG9yIGFic3RyYWN0aW9uIHRvIHN1cHBvcnQgQ01ZS0Eg
Y29ycmVjdGx5CiAjaWYgVVNFKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS0ZpbGxD
b2xvcihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBjb2xvci5jLCBjb2xvci5tLCBjb2xvci55
LCBjb2xvci5rLCBjb2xvci5hKTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtGaWxsQ29s
b3IoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuY29tcG9uZW50cy5jeWFuLCBjb2xv
ci5jb21wb25lbnRzLm1hZ2VudGEsIGNvbG9yLmNvbXBvbmVudHMueWVsbG93LCBjb2xvci5jb21w
b25lbnRzLmJsYWNrLCBjb2xvci5jb21wb25lbnRzLmFscGhhKTsKICNlbHNlCi0gICAgICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvci5jb2xvcik7CisgICAgICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihjb2xvci5jb2xvckNvbnZlcnRlZFRvU1JHQkEpOwogI2VuZGlmCiAgICAg
ICAgIH0sCiAgICAgICAgIFsmY29udGV4dF0gKGNvbnN0IFJlZlB0cjxDYW52YXNHcmFkaWVudD4m
IGdyYWRpZW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxl
LmgJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDggQEAgY2xhc3MgQ2FudmFzU3R5
bGUgewogcHVibGljOgogICAgIENhbnZhc1N0eWxlKCk7CiAgICAgQ2FudmFzU3R5bGUoQ29sb3Ip
OwotICAgIENhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpOwotICAgIENh
bnZhc1N0eWxlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGFscGhhKTsKLSAgICBD
YW52YXNTdHlsZShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhbHBo
YSk7CisgICAgQ2FudmFzU3R5bGUoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisgICAgQ2FudmFzU3R5
bGUoY29uc3QgQ01ZS0E8ZmxvYXQ+Jik7CiAgICAgQ2FudmFzU3R5bGUoQ2FudmFzR3JhZGllbnQm
KTsKICAgICBDYW52YXNTdHlsZShDYW52YXNQYXR0ZXJuJik7CiAKQEAgLTUzLDcgKzUyLDYgQEAg
cHVibGljOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9CiAgICAgYm9vbCBpc0N1cnJlbnRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q3VycmVudENvbG9yPihtX3N0
eWxlKTsgfQogICAgIE9wdGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAg
CiAKICAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKICAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+
IGNhbnZhc0dyYWRpZW50KCkgY29uc3Q7CkBAIC02MywxOSArNjEsMTUgQEAgcHVibGljOgogICAg
IHZvaWQgYXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIGJv
b2wgaXNFcXVpdmFsZW50Q29sb3IoY29uc3QgQ2FudmFzU3R5bGUmKSBjb25zdDsKLSAgICBib29s
IGlzRXF1aXZhbGVudFJHQkEoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxv
YXQgYWxwaGEpIGNvbnN0OwotICAgIGJvb2wgaXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgY3lhbiwg
ZmxvYXQgbWFnZW50YSwgZmxvYXQgeWVsbG93LCBmbG9hdCBibGFjaywgZmxvYXQgYWxwaGEpIGNv
bnN0OworICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IFNSR0JBPGZsb2F0PiYpIGNvbnN0Owor
ICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IENNWUtBPGZsb2F0PiYpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIHN0cnVjdCBJbnZhbGlkIHsgfTsKIAogICAgIHN0cnVjdCBDTVlLQUNvbG9yIHsK
LSAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgIGZsb2F0IGMgeyAwIH07Ci0gICAgICAgIGZs
b2F0IG0geyAwIH07Ci0gICAgICAgIGZsb2F0IHkgeyAwIH07Ci0gICAgICAgIGZsb2F0IGsgeyAw
IH07Ci0gICAgICAgIGZsb2F0IGEgeyAwIH07CisgICAgICAgIENvbG9yIGNvbG9yQ29udmVydGVk
VG9TUkdCQTsKKyAgICAgICAgQ01ZS0E8ZmxvYXQ+IGNvbXBvbmVudHM7CiAKICAgICAgICAgQ01Z
S0FDb2xvcihjb25zdCBDTVlLQUNvbG9yJikgPSBkZWZhdWx0OwogICAgIH07CkBAIC0xMTYsNyAr
MTEwLDcgQEAgaW5saW5lIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNTdHlsZQogCiBpbmxp
bmUgU3RyaW5nIENhbnZhc1N0eWxlOjpjb2xvcigpIGNvbnN0CiB7Ci0gICAgYXV0byYgY29sb3Ig
PSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSA/IFdURjo6Z2V0PENvbG9y
PihtX3N0eWxlKSA6IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpLmNvbG9yOworICAgIGF1
dG8mIGNvbG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgPyBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb2xv
ckNvbnZlcnRlZFRvU1JHQkE7CiAgICAgcmV0dXJuIGNvbG9yLnNlcmlhbGl6ZWQoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJKHJldmlzaW9u
IDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAgICAgICA6IFJl
Z2lvbk92ZXJsYXkocGFnZSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjVmLCAwLjBmLCAw
LjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1wbGVDb2xv
cigxMjgsIDAsIDAsIDEwMikpCiAgICAgewogICAgIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92
ZXJsYXkoUGFnZSYgcGFnZSkKLSAgICAgICAgOiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCisgICAgICAgIDogUmVn
aW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjgsIDAsIDEwMikpCiAgICAg
ewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdl
T3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4
L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC45ZiwgMC45ZiwgMC45ZiwgMS5mKSk7Cisg
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDIw
NCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjMwLCAy
MzAsIDIzMCwgMjU1KSk7CiAKICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IHsgMTAsIDIw
IH07CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSAgIkNQVTogIiArIGNwdVVzYWdlU3RyaW5nKGdE
YXRhLmNwdSk7CkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6
cGxhdGZvcm1Jbml0aQogICAgIG1fcGFpbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShv
dmVybGF5KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqbV9vdmVybGF5UGFpbnRlcik7CiAgICAgbV9wYWludExheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50M0QoKSk7CiAgICAgbV9wYWludExheWVyLT5zZXRTaXplKHsgbm9ybWFsV2lkdGgs
IG5vcm1hbEhlaWdodCB9KTsKLSAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBt
X3BhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MjA0KSk7CiAgICAgbV9wYWludExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAgICAgb3Zl
cmxheSgpLmxheWVyKCkuYWRkQ2hpbGQoKm1fcGFpbnRMYXllcik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2MzYxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogCiAg
ICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0g
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRp
cGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIs
IGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CkBAIC0xMjgsNyArMTI4
LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjpt
YXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAo
diAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
bXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVy
ICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNv
bnN0CkBAIC0xNDcsNyArMTQ3LDggQEAgZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAK
IGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNw
YWNlIGFsZ29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBv
bmVudCgpKS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lv
biB0byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zCisgICAgLy8gZm9y
IGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBvbmVudCgpKS4KICAgICByZXR1
cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeSgpKTsKIH0KIApAQCAtMjkwLDcgKzI5
MSw3IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG8KICAgICBhdXRv
IGZyb21TUkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAgIGF1dG8gdG9T
UkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogCi0gICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvckZyb21GbG9hdHMoCisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
bkNvbXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29t
cG9uZW50KCksIHByb2dyZXNzKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JHQkEgewogICAgIFQgYWxwaGE7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQShULCBULCBULCBUKSAtPiBTUkdCQTxU
PjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBh
c0NvbG9yQ29tcG9uZW50cyhjb25zdCBTUkdCQTxUPiYgYykKIHsKICAgICByZXR1cm4geyBjLnJl
ZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CkBAIC00Niw2ICs0OCwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gCiAgICAgcmV0dXJuIHsgY1swXSwgY1sx
XSwgY1syXSwgY1szXSB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKK3sKKyAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vbkFscGhhQ29tcG9uZW50KFNSR0JBPFQ+JiBjb2xvciwgRnVuY3RvciYmIGYpCiB7CiAgICAg
Y29sb3IucmVkID0gZihjb2xvci5yZWQpOwpAQCAtNTMsNiArNjUsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiB2CiAgICAgY29sb3IuYmx1ZSA9IGYoY29sb3IuYmx1
ZSk7CiB9CiAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIHsKICAg
ICBUIHJlZDsKICAgICBUIGdyZWVuOwpAQCAtNjAsNiArNzMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgCiAgICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IExpbmVhclNSR0JBKFQsIFQsIFQsIFQpIC0+IExpbmVhclNSR0JBPFQ+OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JD
b21wb25lbnRzKGNvbnN0IExpbmVhclNSR0JBPFQ+JiBjKQogewogICAgIHJldHVybiB7IGMucmVk
LCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKQEAgLTcwLDYgKzg1LDE3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkcKICAgICByZXR1cm4geyBjWzBdLCBjWzFd
LCBjWzJdLCBjWzNdIH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0IExpbmVhclNSR0JBPFQ+
JiBiKQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3QgTGluZWFyU1JHQkE8VD4mIGIpCit7
CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGlzcGxheVAzIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwpAQCAtNzcsNiArMTAzLDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQMyB7CiAgICAgVCBhbHBoYTsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBEaXNw
bGF5UDM8VD47CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQogewogICAgIHJl
dHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKQEAgLTg3LDYgKzExNSwx
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgRGlzcGxheVAzCiAgICAgcmV0dXJu
IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlz
cGxheVAzPFQ+JiBiKQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYg
YikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgewogICAgIFQgcmVkOwogICAgIFQgZ3JlZW47CkBAIC05
NCw2ICsxMzMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxhCiAg
ICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQMyhU
LCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGlu
ZWFyRGlzcGxheVAzPFQ+JiBjKQogewogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJs
dWUsIGMuYWxwaGEgfTsKQEAgLTEwNCw2ICsxNDUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIExpbmVhckRpcwogICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYikK
K3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMo
Yik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIp
Cit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSFNMQSB7CiAgICAgVCBodWU7CiAgICAgVCBzYXR1cmF0aW9uOwpAQCAtMTExLDYgKzE2
Myw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIHsKICAgICBUIGFscGhhOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBULCBULCBUKSAtPiBIU0xBPFQ+Owor
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29s
b3JDb21wb25lbnRzKGNvbnN0IEhTTEE8VD4mIGMpCiB7CiAgICAgcmV0dXJuIHsgYy5odWUsIGMu
c2F0dXJhdGlvbiwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKQEAgLTEyMSw2ICsxNzUsMzkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIEhTTEE8VD4gYQogICAgIHJldHVybiB7IGNb
MF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBiKQor
eworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhi
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKKworLy8gRklYTUU6IFdoZW4gQ29sb3JDb21wb25lbnRzIHN1cHBvcnRzIG1vcmUg
dGhhbiBsZW5ndGggPT0gNCwgYWRkIGNvbnZlcnNpb24gdG8vZnJvbSBDb2xvckNvbXBvbmVudHM8
VD4gZm9yIENNWUtBCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ01ZS0EgeworICAgIFQg
Y3lhbjsKKyAgICBUIG1hZ2VudGE7CisgICAgVCB5ZWxsb3c7CisgICAgVCBibGFjazsKKyAgICBU
IGFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gQ01ZS0EoVCwgVCwgVCwgVCwgVCkg
LT4gQ01ZS0E8VD47CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ01ZS0E8VD4mIGEsIGNvbnN0IENNWUtBPFQ+JiBiKQoreworICAgIHJldHVy
biBhLmN5YW4gPT0gYi5jeWFuICYmIGEubWFnZW50YSA9PSBiLm1hZ2VudGEgJiYgYS55ZWxsb3cg
PT0gYi55ZWxsb3cgJiYgYS5ibGFjayA9PSBiLmJsYWNrICYmIGEuYWxwaGEgPT0gYi5hbHBoYTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDTVlLQTxUPiYgYSwgY29uc3QgQ01ZS0E8VD4mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBi
KTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSB7CiAgICAgVCB4Owog
ICAgIFQgeTsKQEAgLTEyOCw2ICsyMTUsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
WFlaQSB7CiAgICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwg
VCwgVCwgVCkgLT4gWFlaQTxUPjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBYWVpBPFQ+JiBjKQogewog
ICAgIHJldHVybiB7IGMueCwgYy55LCBjLnosIGMuYWxwaGEgfTsKQEAgLTEzOCw0ICsyMjcsMTQg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFhZWkE8VD4gYQogICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBi
KQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEg
PT0gYik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9u
IDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSwxNiBAQCBTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorU1JHQkE8ZmxvYXQ+IHRv
U1JHQkEoY29uc3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIFtjLCBtLCB5LCBr
LCBhXSA9IGNvbG9yOworICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBj
b2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOwor
ICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOworICAgIHJldHVybiB7IHIsIGcsIGIs
IGEgfTsKK30KKwogU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZp
c2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgSFNMQTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyRGlzcGxh
eVAzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJTUkdCQTsKIHRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtBOwog
CiAvLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNsYW1wZWQuCiBmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKQEAgLTUyLDIxICs1MywyMyBAQCBEaXNwbGF5UDM8Zmxv
YXQ+IHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBCiBXRUJDT1JFX0VYUE9SVCBIU0xBPGZsb2F0PiB0
b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCitTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25z
dCBDTVlLQTxmbG9hdD4mKTsKKworCiBmbG9hdCBsaWdodG5lc3MoY29uc3QgU1JHQkE8ZmxvYXQ+
Jik7CiBmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KIGZsb2F0IGNvbnRy
YXN0UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNS
R0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBpbmxpbmUg
dWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZikpLCAwLCAy
NTUpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4oc3RkOjpyb3VuZChm
KSksIDAsIDI1NSk7CiB9CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUo
ZmxvYXQgZikKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6
bHJvdW5kZihmICogMjU1LjBmKSksIDAsIDI1NSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3Rh
dGljX2Nhc3Q8aW50PihzdGQ6OnJvdW5kKGYgKiAyNTUuMGYpKSwgMCwgMjU1KTsKIH0KIAogY29u
c3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QgYnl0ZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJ
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTUgKzYyLDYgQEAgU2ltcGxlQ29s
b3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjbwogICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IodW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEp
LCB1bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKLVNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKQotewotICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOwotICAgIGZsb2F0IHIgPSBjb2xv
cnMgKiAoMS4wZiAtIGMpOwotICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOwotICAg
IGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwotfQotCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlh
bGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKIHsKICAgICBpZiAoaXNPcGFxdWUoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNp
b24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTAgKzkxLDggQEAgYm9vbCBvcGVyYXRvciE9KFNp
bXBsZUNvbG9yLCBTaW1wbGVDb2xvcgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpOwogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci0KLVNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50
cyk7Ci1TaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0
IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNN
WUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworY29uc3Rl
eHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90PiYpOwor
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBTaW1w
bGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yKTsKIFNpbXBsZUNvbG9yIHBy
ZW11bHRpcGx5Q2VpbGluZyhTaW1wbGVDb2xvcik7CkBAIC0xMjAsMTQgKzExOCwxNSBAQCBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiAgICAgcmV0dXJuIHsgc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN0ZDo6Y2xhbXAoZywgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNs
YW1wKGIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChhLCAwLCAw
eEZGKSkgfTsKIH0KIAotaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBT
UkdCQTxmbG9hdD4mIHNSR0JBKQorY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihjb25zdCBTUkdCQTx1aW50OF90PiYgc1JHQkEpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBzUkdCQTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KTsKKyAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKLWlubGluZSBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0
IGEpCitpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0
PiYgc1JHQkEpCiB7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKICAgICByZXR1cm4g
eyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBj
b252ZXJ0VG9Db21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Ri5jcHAJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VT
aW1wbGVDCiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50OwogICAgIH0KIAot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbXBvbmVudEFycmF5WzFdLCBj
b21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNv
bXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7
CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmlu
ZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGludGVy
cG9sYXRlQ28KICAgICBmbG9hdCBiID0gYjEgKyAoYjIgLSBiMSkgKiAwLjVmOwogICAgIGZsb2F0
IGEgPSBhMSArIChhMiAtIGExKSAqIDAuNWY7CiAKLSAgICByZXR1cm4gR3JhZGllbnQ6OkNvbG9y
U3RvcChvZmZzZXQsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkpOworICAg
IHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwgbWFrZVNpbXBsZUNvbG9yKFNSR0JB
IHsgciwgZywgYiwgYSB9KSk7CiB9CiAKIHN0YXRpYyBjYWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNv
bmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwgZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJ
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0cKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywg
YiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7
CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYz
NjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBTaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tTlMKICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3Jl
ZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVudCwg
YWxwaGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBzdGF0aWNfY2FzdDxm
bG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxw
aGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9S
X0YmIGNvbG9yKQogewotICAgIFNpbXBsZUNvbG9yIGNvbG9yS2V5ID0gbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cyhjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICBhdXRv
IGNvbG9yS2V5ID0gbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29s
b3IuYiwgY29sb3IuYSB9KTsKIAogICAgIGlmICghY29sb3JLZXkpIHsKICAgICAgICAgaWYgKCFt
X3plcm9CcnVzaCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0J
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBDb2xvciBjb2xvckZyb21VSUNv
bG9yKFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9uZW50IGdy
ZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBoYV07CiAK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21wb25lbnQsIGdyZWVu
Q29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVu
dCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVD
YWNoZS5tbQkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0xlZ2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw4IEBAIHVu
c2lnbmVkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm8KIENvbG9yIExlZ2FjeVRpbGVD
YWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihMZWdhY3lUaWxlR3JpZCogZ3JpZCkgY29uc3QK
IHsKICAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpKQotICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjJmLCAxLjBmLCAwLmYsIDAuNWYpOwot
Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMC45ZiwgMC5mLCAw
LjVmKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcig1MSwgMjU1LCAwLCAxMjgpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoNTEsIDIzMCwgMCwgMTI4KTsKIH0KIAogc3RhdGlj
IGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYgZGlydHlSZWN0LCBDR1NS
ZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2FsZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIxOCw3ICsyMjE4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcgogI2VuZGlmCiAKICNpZmRlZiBSRVZFQUxfVFJBTlNQQVJFTkNZX0xBWUVSUwotICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAu
MGYsIDAuNWYsIDAuMmYpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDEyOCwgNTEpKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChwaXhlbFNu
YXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3
ICszODAsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94RGVjb3JhCiAKICAg
ICBpZiAoY2hlY2tlZCB8fCBpbmRldGVybWluYXRlKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyID0g
Ym94LnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0
Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRl
ZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgQ29s
b3I6OmJsYWNrLmNvbG9yV2l0aEFscGhhKDIwNCkpOwogCiAgICAgICAgIGF1dG8gY2xpcCA9IGFk
ZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCk7CiAgICAg
ICAgIGF1dG8gd2lkdGggPSBjbGlwLndpZHRoKCk7CkBAIC00MTYsMTAgKzQxNiwxMCBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94RGVjb3JhCiAgICAgICAgIH0KIAogICAgICAg
ICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4obGluZVdpZHRoLCAxKTsKLSAgICAgICAgZHJh
d0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFkb3cp
IH0sIGtDR0xpbmVDYXBTcXVhcmUsIGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cygwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKSk7CisgICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0Nv
bnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1
YXJlLCBsaW5lV2lkdGgsIENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgxNzkpKTsKIAogICAg
ICAgICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW4od2lkdGgsIGhlaWdodCkg
KiB0aGlja25lc3NSYXRpbywgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQs
IFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUobGluZSkgfSwga0NHTGluZUNhcEJ1dHQsIGxpbmVX
aWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAy
NTUuMGYpKTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9p
bnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBrQ0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBDb2xvcjo6
d2hpdGUuY29sb3JXaXRoQWxwaGEoMjQwKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBj
bGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0
KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQ3Nyw3ICs0NzcsNyBA
QCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICBpZiAoaXND
aGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBib3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3Vu
ZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3Vu
ZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJv
eC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBDb2xvcjo6YmxhY2suY29sb3JXaXRo
QWxwaGEoMjA0KSk7CiAKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAo
Ym94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVHcmFkaWVudCksIGNsaXAubG9j
YXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBv
bGF0aW9uKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvCiAgICAgICAgIGNsaXAuaW5mbGF0ZVgoLWNsaXAud2lkdGgoKSAqIElubmVy
SW52ZXJzZVJhdGlvKTsKICAgICAgICAgY2xpcC5pbmZsYXRlWSgtY2xpcC5oZWlnaHQoKSAqIElu
bmVySW52ZXJzZVJhdGlvKTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRv
d0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuN2YgKiAyNTUpOworICAgICAgICBj
b25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgx
NzkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAs
IENvbG9yOjp3aGl0ZSwgc2hhZG93Q29sb3IpOwogCiAgICAgICAgIEZsb2F0U2l6ZSByYWRpdXMo
Y2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5oZWlnaHQoKSAvIDIuMGYpOwpAQCAtNzM4LDcgKzcz
OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAg
RmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAoYnV0dG9uQ2xpcC53aWR0aCgpIC0g
Y291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykgLyAyLjAsIGJ1dHRvbkNsaXAubWF4
WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRF
bGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjVmKSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgp
LmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgQ29sb3I6OmJsYWNrLmNv
bG9yV2l0aEFscGhhKDEyOCkpOwogICAgICAgICAgICAgZWxsaXBzZS5tb3ZlKHNpemUgKyBwYWRk
aW5nLCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2UgewpAQCAtNzU3LDkgKzc1Nyw5IEBAIGJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgICAgIHsgYXJy
b3dbMl0ueCgpLCBhcnJvd1syXS55KCkgKyAxIH0KICAgICAgICAgfTsKIAotICAgICAgICBmbG9h
dCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDAuMiA6IDAuNTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAw
LjBmLCBvcGFjaXR5KSk7CisgICAgICAgIHVpbnQ4X3Qgb3BhY2l0eSA9IGlzUmVhZE9ubHlDb250
cm9sKGJveCkgPyA1MSA6IDEyODsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJv
a2VDb2xvcihDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEob3BhY2l0eSkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxw
aGEob3BhY2l0eSkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdQYXRoKFBhdGg6
OnBvbHlnb25QYXRoRnJvbVBvaW50cyhzaGFkb3cpKTsKIAogICAgICAgICBwYWludEluZm8uY29u
dGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CkBAIC0xODQwLDcgKzE4NDAsNyBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFN5c3RlbVByZXZpZXdCCiAgICAgLy8gRHJhdyBh
IGRyb3Agc2hhZG93IGFyb3VuZCB0aGUgY2lyY2xlLgogICAgIC8vIFVzZSB0aGUgR3JhcGhpY3ND
b250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIGJsdXIgcmFkaXVzIGlu
IGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVyIHRoYW4gc2NyZWVuIHNwYWNlLgotICAgIGF1
dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuZiwgMC5mLCAwLmYs
IDAuMWYpOworICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29sb3I6OmJsYWNrLmNv
bG9yV2l0aEFscGhhKDI2KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6
ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFy
LgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzYzOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDYtMjggIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSByZW1haW5pbmcgbWFrZVNp
bXBsZUNvbG9yRnJvbSogdmFyaWFudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMzcwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAg
ICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcik6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3IoU1JHQkEgeyAuLi4gfSkgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgVXNlIG1ha2VT
aW1wbGVDb2xvciByYXRoZXIgdGhhbiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzLCBhbGxvd2lu
ZyBmb3IKKyAgICAgICAgY29uc3RhbnQgZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xv
cnMuCisKIDIwMjAtMDYtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXggdGhyZWFkLXNhZmV0eSBpc3N1ZSBpbiB3ZWJQcm9jZXNzUG9vbEhpZ2hEeW5hbWlj
UmFuZ2VEaWRDaGFuZ2VDYWxsYmFjaygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDggKzc1LDcgQEAgR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRDb2xvciwgd2Via2l0
XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJraXRDb2xvclRvV2ViQ29yZUNvbG9yKFdlYktp
dENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci0+Z3JlZW4pLAotICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJsdWUp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmFscGhhKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6
Om1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOwogfQogCiB2b2lk
IHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIHdl
YkNvcmVDb2xvciwgV2ViS2l0Q29sb3IqIGNvbG9yKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xpZW50LmNwcAko
cmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9X
ZWJJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyArMTc3LDcgQEAg
dm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoYwogICAgIHBhaW50TGF5ZXIt
PnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBwYWludExheWVyLT5zZXRQb3Np
dGlvbihyZWN0LmxvY2F0aW9uKCkpOwogICAgIHBhaW50TGF5ZXItPnNldFNpemUocmVjdC5zaXpl
KCkpOwotICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKKyAgICBwYWludExheWVyLT5zZXRC
YWNrZ3JvdW5kQ29sb3IobWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgNTEpKTsKIAogICAgIEtl
eWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwog
ICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4o
MCwgMSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MDksOCArNTA5LDggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFnZU92ZXJsYQog
ewogICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDE7CiAKLSAgICBhdXRvIG92ZXJsYXlCYWNr
Z3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMWYsIDAuMWYsIDAuMWYs
IDAuMjVmKTsKLSAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cygwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25zdGV4cHIgYXV0byBvdmVybGF5QmFj
a2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI2LCAyNiwgMjYsIDY0KTsKKyAgICBjb25z
dGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAxMjgpOwog
CiAgICAgSW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9IGRpcnR5UmVjdDsKICAgICBi
b3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGJvcmRlcldpZHRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403020</attachid>
            <date>2020-06-28 18:04:24 -0700</date>
            <delta_ts>2020-06-29 11:07:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213706-20200628171052.patch</filename>
            <type>text/plain</type>
            <size>45597</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzYyNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBAQAorMjAyMC0wNi0yOCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyBtYWtl
U2ltcGxlQ29sb3JGcm9tKiB2YXJpYW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBt
YWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisgICAgICAgIC0gVXBkYXRlZCBjYWxsZXJzIHRoYXQg
bmVlZCB0byBwYXNzIGZsb2F0cyB0byB1c2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0p
OworICAgICAgICAtIFVwZGF0ZWQgY2FsbGVycyB0aGF0IGRvbid0IG5lZWQgdG8gcGFzcyBmbG9h
dHMsIG1vc3RseSBjb21waWxlIHRpbWUgY29uc3RhbnQKKyAgICAgICAgICBTaW1wbGVDb2xvcnMg
dG8gdXNlIG1ha2VTaW1wbGVDb2xvciguLi4pLCBwYXNzaW5nIGluIDAtMjU1IGJhc2VkIGNvbXBv
bmVudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgLSBVcGRhdGVkIGNhbGxlcnMgb2YgbWFr
ZVNpbXBsZUNvbG9yRnJvbUNNWUtBIHRvIHVzZSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShDTVlL
QSB7IC4uLiB9KSkuCisgICAgICAgICAgVGhpcyByZXF1aXJlZCBhZGRpbmcgQ01ZS0EgdHlwZSB0
byBDb2xvclR5cGVzLmggYW5kIG1vdmluZyBjb252ZXJzaW9uIFNSR0JBIHRvCisgICAgICAgICAg
Q29sb3JVdGlsaXRpZXMgd2l0aCB0aGUgb3RoZXIgY29sb3IgY29udmVyc2lvbiBjb2RlLgorICAg
ICAgICAtIEFkZGVkIGRlZHVjdGlvbiBndWlkZXMgZm9yIGNvbG9yIHR5cGVzIHRvIGFsbG93IGNv
bXBvbmVudCB0eXBlIGRlZHVjdGlvbi4gVGhpcyBhbGxvd3MgCisgICAgICAgICAgdXMgdG8gd3Jp
dGU6CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBIHsgcmVkRmxvYXQsIGdyZWVuRmxv
YXQsIGJsdWVGbG9hdCwgYWxwaGFGbG9hdCB9KQorCisgICAgICAgICAgcmVhdGhlciB0aGFuIHRo
ZSBtb3JlIGN1bWJlcnNvbWU6CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBPGZsb2F0
PiB7IHJlZEZsb2F0LCBncmVlbkZsb2F0LCBibHVlRmxvYXQsIGFscGhhRmxvYXQgfSkKKworICAg
ICAgICAtIEFkZGVkIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBjb2xvciB0eXBlLiBP
bmx5IHVzZWQgYnkgQ01ZS0EgYXQgdGhlIG1vbWVudCwKKyAgICAgICAgICBidXQgZ2VuZXJhbGx5
IHVzZWZ1bCwgc28gYWRkZWQgZm9yIGFsbCBvZiB0aGVtLiBGb3IgYWxsIHR5cGVzIGNvbnZlcnRh
YmxlIHRvIENvbG9yQ29tcG9uZW50cywKKyAgICAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gdXNl
cyB0aGUgY29udmVyc2lvbiB0byBDb2xvckNvbXBvbmVudHMgdG8gYXZvaWQgcmVkdW5kYW5jeS4K
KworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ry
b2tlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6c2V0RmlsbENvbG9yKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IHR5cGVkIGNvbG9y
IGJhc2VkIENhbnZhc1N0eWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3IgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy9tYWtlU2ltcGxlQ29s
b3JGcm9tQ01ZS0EuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAgICAgICBSZXBs
YWNlIGNvbnN0cnVjdG9ycyB0YWtpbmcgcmF3IGZsb2F0cyB3aXRoIG9uZXMgdGFraW5nIHR5cGVk
IGNvbG9ycyAoU1JHQkE8ZmxvYXQ+L0NNWUtBPGZsb2F0PikKKyAgICAgICAgdG8gbWFrZSBpdCBt
b3JlIGNsZWFyIHdoYXQgdGhlIHBhcmFtZXRlcnMgbWVhbi4gCisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IgY29uc3QpOgorICAgICAgICBDb21wYXJlIHRo
ZSBjbXlrYSBjb21wb25lbnRzIHVzaW5nIG5ldyBvcGVyYXRvcj09IGltcGxlbWVudGF0aW9uIGZv
ciBDTVlLQTxmbG9hdD4uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFs
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRS
R0JBIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnRDTVlLQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgaXNFcXVpdmFs
ZW50UkdCQS9pc0VxdWl2YWxlbnRDTVlLQSB3aXRoIG92ZXJsb2FkZWQgaXNFcXVpdmFsZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5RmlsbENvbG9yIGNvbnN0KToKKyAg
ICAgICAgVXBkYXRlIGZvciBuZXcgbmFtZXMgb2YgQ01ZS0EgbWVtYmVycy4KKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAgICBVc2UgU1JHQkE8ZmxvYXQ+IGFuZCBD
TVlLQTxmbG9hdD4gdG8gc2ltcGxpZnkgaW50ZXJmYWNlcworICAgICAgICAKKyAgICAgICAgKiBw
YWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKiBwYWdlL2xpbnV4L1Jlc291cmNl
VXNhZ2VPdmVybGF5TGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZU92
ZXJsYXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxlQ29sb3Ig
cmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cywgYWxsb3dpbmcgZm9yCisgICAg
ICAgIGNvbnN0YW50IGV4cHJlc3Npb24gY3JlYXRpb24gb2YgU2ltcGxlQ29sb3JzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29s
b3I6OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQg
Y29uc3QpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJhdGhl
ciB0aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICBGaXggY29tbWVudC4KKworICAgICAgICAo
V2ViQ29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICBVc2UgbWFrZVNpbXBs
ZUNvbG9yKC4uLikgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIC0g
QWRkIGRlZHVjdGlvbiBndWlkZXMgYW5kIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBj
b2xvciB0eXBlLgorICAgICAgICAtIEFkZCBDTVlLQSB0eXBlLiBObyBjb252ZXJzaW9uIHRvIENv
bG9yQ29tcG9uZW50cyB5ZXQsIGFzIENvbG9yQ29tcG9uZW50cworICAgICAgICAgIG9ubHkgd29y
a3Mgd2l0aCA0IGNvbXBvbmVudCBjb2xvcnMsIG5vdCBvbmVzIHdpdGggNSBsaWtlIENNWUtBLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAgIE1vdmUgY29udmVyc2lvbiBmcm9tIENNWUtB
IHRvIFNSR0JBIGZyb20gbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBIHRvIGhlcmUuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29y
ZTo6Y29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0VG9Db21wb25lbnRCeXRlKToKKyAgICAgICAgVXNlIHN0ZDo6cm91bmQgcmF0aGVyIHRo
YW4gc3RkOjpscm91bmRmLCBzaW5jZSBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgcmVzdWx0IAorICAg
ICAgICBhbmQgaXQgcmVhZHMgbmljZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ01Z
S0EpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6
bWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIC0gUmVtb3ZlZCBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisg
ICAgICAgIC0gQWRkZWQgY29uc3RleHByIG92ZXJsb2FkIG9mIG1ha2VTaW1wbGVDb2xvciB0YWtp
bmcgYSBjb25zdCBTUkdCQTx1aW50OF90PiYuCisgICAgICAgIC0gRml4ZWQgZm9yd2FyZCBkZWNs
YXJhdGlvbiBvZiBtYWtlU2ltcGxlQ29sb3IgdGhhdCB3YXMgdGFraW5nIENvbG9yQ29tcG9uZW50
cyAKKyAgICAgICAgICB0byBhY3R1YWxseSB0YWtlIGFuIFNSR0JBPGZsb2F0Piwgd2hpY2ggaXMg
d2hhdCB0aGUgaW5saW5lIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5CisgICAgICAgICAgdGFrZXMu
CisgCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRU
cmFja1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJv
bUFSR0JDRkFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVu
dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgVXNlIG1h
a2VTaW1wbGVDb2xvcihTUkdCQSB7IC4uLiB9KSByYXRoZXIgdGhhbiBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
OgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAg
ICAqIHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRnJv
bVVJQ29sb3IpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJh
dGhlciB0aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuIENhc3RpbmcgdG8gCisgICAgICAg
IGZsb2F0IGlzIG5lZWRlZCwgYXMgdGhlIGlucHV0IHR5cGVzIGFyZSBDR0Zsb2F0IHdoaWNoIGlz
IGRvdWJsZSBpbiA2NC1iaXQgZW52aXJvbm1lbnRzCisgICAgICAgIGFuZCB3b24ndCBhdXRvbWF0
aWNhbGx5IG5hcnJvdyB3aXRoIHRoZSBuZXcgdHlwZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9p
b3MvTGVnYWN5VGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VGlsZUNhY2hl
Ojpjb2xvckZvckdyaWRUaWxlQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJzKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVDb2xvciByYXRoZXIgdGhhbiBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzLCBhbGxvd2luZyBmb3IKKyAgICAgICAgY29uc3RhbnQg
ZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6
cGFpbnRDaGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
SU9TOjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhl
bWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICBVc2Ug
Q29sb3I6OmJsYWNrL0NvbG9yOjp3aGl0ZS5jb2xvcldpdGhBbHBoYSguLi4pIHJhdGhlciB0aGFu
IG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMsIAorICAgICAgICBhbGxvd2luZyBmb3IgY29uc3Rh
bnQgZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKIDIwMjAtMDYtMjcgIEpl
ciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgaU9TIFNhZmFyaSBpbmNv
cnJlY3RseSByZXBvcnRzICJBcHBsZUNvcmVNZWRpYSIgYXMgVUEgc3RyaW5nCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxNCwyMyArOTE0LDI2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2V0U3QKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdHJva2VDb2xv
cihmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLnN0cm9r
ZVN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1aXZhbGVudFJHQkEo
Z3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKQorICAgIGF1dG8gY29sb3Ig
PSBTUkdCQSB7IGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFscGhhIH07CisgICAg
aWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5bGUu
aXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldFN0cm9rZVN0eWxl
KENhbnZhc1N0eWxlKGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTdHJva2VTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldFN0cm9rZUNvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0g
ICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5
bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBiLCBhKSkKKyAgICBhdXRvIGNvbG9yID0gU1JHQkEg
eyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYm
IHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsKKyAgICBzZXRT
dHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCiB7Ci0gICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxp
ZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50Q01ZS0EoYywgbSwgeSwgaywg
YSkpCisgICAgYXV0byBjb2xvciA9IENNWUtBIHsgYywgbSwgeSwgaywgYSB9OworICAgIGlmIChz
dGF0ZSgpLnN0cm9rZVN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLnN0cm9rZVN0eWxlLmlzRXF1
aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRTdHJva2VTdHlsZShDYW52
YXNTdHlsZShjLCBtLCB5LCBrLCBhKSk7CisgICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUo
Y29sb3IpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxs
Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKQpAQCAtOTUw
LDIzICs5NTMsMjYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5pc1Zh
bGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShncmF5TGV2ZWwsIGdy
YXlMZXZlbCwgZ3JheUxldmVsLCBhbHBoYSkpCisgICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RhdGUoKS5m
aWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudChjb2xv
cikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoZ3JheUxl
dmVsLCBhbHBoYSkpOworICAgIHNldEZpbGxTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihmbG9hdCBy
LCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIGlmIChzdGF0ZSgpLmZpbGxTdHls
ZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5bGUuaXNFcXVpdmFsZW50UkdCQShyLCBnLCBi
LCBhKSkKKyAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyByLCBnLCBiLCBhIH07CisgICAgaWYgKHN0
YXRlKCkuZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxl
bnQoY29sb3IpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxl
KHIsIGcsIGIsIGEpKTsKKyAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxsQ29sb3IoZmxvYXQg
YywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUo
KS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudENN
WUtBKGMsIG0sIHksIGssIGEpKQorICAgIGF1dG8gY29sb3IgPSBDTVlLQSB7IGMsIG0sIHksIGss
IGEgfTsKKyAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmls
bFN0eWxlLmlzRXF1aXZhbGVudChjb2xvcikpCiAgICAgICAgIHJldHVybjsKLSAgICBzZXRGaWxs
U3R5bGUoQ2FudmFzU3R5bGUoYywgbSwgeSwgaywgYSkpOworICAgIHNldEZpbGxTdHlsZShDYW52
YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmJlZ2luUGF0aCgpCkBAIC0xMzA3LDE3ICsxMzEzLDE3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2V0U2gKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpzZXRTaGFkb3coZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgYmx1ciwgZmxvYXQg
Z3JheUxldmVsLCBmbG9hdCBhbHBoYSkKIHsKLSAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBncmF5TGV2ZWwsIGFscGhhKSk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgZ3JheUxldmVsLCBncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEgfSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBi
bHVyLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQogewotICAgIHNldFNoYWRv
dyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9h
dHMociwgZywgYiwgYSkpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBr
LCBmbG9hdCBhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJs
dXIsIG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgc2V0U2hh
ZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yKHRvU1JH
QkEoQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH0pKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y2xlYXJTaGFkb3coKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MiwxOCAr
OTIsMTMgQEAgQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKENvbG9yIGNvbG9yKQogewogfQogCi1D
YW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSkKLSAg
ICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZl
bCwgZ3JheUxldmVsLCBhbHBoYSkpCitDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoY29uc3QgU1JH
QkE8ZmxvYXQ+JiBjb2xvckNvbXBvbmVudHMpCisgICAgOiBtX3N0eWxlKG1ha2VTaW1wbGVDb2xv
cihjb2xvckNvbXBvbmVudHMpKQogewogfQogCi1DYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKLSAgICA6IG1fc3R5bGUobWFrZVNpbXBs
ZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKSkKLXsKLX0KLQotQ2FudmFzU3R5bGU6OkNhbnZh
c1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi0gICAg
OiBtX3N0eWxlKENNWUtBQ29sb3IgeyBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoYywgbSwgeSwg
aywgYSksIGMsIG0sIHksIGssIGEgfSkKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBD
TVlLQTxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykKKyAgICA6IG1fc3R5bGUoQ01ZS0FDb2xvciB7
IG1ha2VTaW1wbGVDb2xvcih0b1NSR0JBKGNvbG9yQ29tcG9uZW50cykpLCBjb2xvckNvbXBvbmVu
dHMgfSkKIHsKIH0KIApAQCAtMTUxLDI3ICsxNDYsMjAgQEAgYm9vbCBDYW52YXNTdHlsZTo6aXNF
cXVpdmFsZW50Q29sb3IoY29ucwogICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9y
PihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihvdGhlci5tX3N0eWxl
KSkKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PENvbG9yPihtX3N0eWxlKSA9PSBXVEY6OmdldDxD
b2xvcj4ob3RoZXIubV9zdHlsZSk7CiAKLSAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxD
TVlLQUNvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+
KG90aGVyLm1fc3R5bGUpKSB7Ci0gICAgICAgIGF1dG8mIGEgPSBXVEY6OmdldDxDTVlLQUNvbG9y
PihtX3N0eWxlKTsKLSAgICAgICAgYXV0byYgYiA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG90aGVy
Lm1fc3R5bGUpOwotICAgICAgICByZXR1cm4gYS5jID09IGIuYyAmJiBhLm0gPT0gYi5tICYmIGEu
eSA9PSBiLnkgJiYgYS5rID09IGIuayAmJiBhLmEgPT0gYi5hOwotICAgIH0KKyAgICBpZiAoV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxDTVlLQUNvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPENNWUtBQ29sb3I+KG90aGVyLm1fc3R5bGUpKQorICAgICAgICByZXR1cm4gV1RG
OjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29tcG9uZW50cyA9PSBXVEY6OmdldDxDTVlLQUNv
bG9yPihvdGhlci5tX3N0eWxlKS5jb21wb25lbnRzOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JBKGZsb2F0IHIsIGZsb2F0IGcsIGZs
b2F0IGIsIGZsb2F0IGEpIGNvbnN0Citib29sIENhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnQoY29u
c3QgU1JHQkE8ZmxvYXQ+JiBjb21wb25lbnRzKSBjb25zdAogewotICAgIHJldHVybiBXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4obV9zdHls
ZSkgPT0gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4g
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8Q29sb3I+
KG1fc3R5bGUpID09IG1ha2VTaW1wbGVDb2xvcihjb21wb25lbnRzKTsKIH0KIAotYm9vbCBDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxv
YXQgaywgZmxvYXQgYSkgY29uc3QKK2Jvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudChjb25z
dCBDTVlLQTxmbG9hdD4mIGNvbXBvbmVudHMpIGNvbnN0CiB7Ci0gICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBjaGFubmVscyA9IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpOwot
ICAgIHJldHVybiBjID09IGNoYW5uZWxzLmMgJiYgbSA9PSBjaGFubmVscy5tICYmIHkgPT0gY2hh
bm5lbHMueSAmJiBrID09IGNoYW5uZWxzLmsgJiYgYSA9PSBjaGFubmVscy5hOworICAgIHJldHVy
biBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0
PENNWUtBQ29sb3I+KG1fc3R5bGUpLmNvbXBvbmVudHMgPT0gY29tcG9uZW50czsKIH0KIAogdm9p
ZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
IGNvbnN0CkBAIC0xODQsOSArMTcyLDkgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VD
b2xvcihHcmFwaAogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBwbGF0Zm9y
bS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogICAgICAgICAgICAgLy8gV2UnbGwg
bmVlZCBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24gdG8gc3VwcG9ydCBDTVlLQSBjb3JyZWN0
bHkKICNpZiBVU0UoQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3Io
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuYywgY29sb3IubSwgY29sb3IueSwgY29s
b3IuaywgY29sb3IuYSk7CisgICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLU3Ryb2tlQ29sb3Io
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuY29tcG9uZW50cy5jeWFuLCBjb2xvci5j
b21wb25lbnRzLm1hZ2VudGEsIGNvbG9yLmNvbXBvbmVudHMueWVsbG93LCBjb2xvci5jb21wb25l
bnRzLmJsYWNrLCBjb2xvci5jb21wb25lbnRzLmFscGhhKTsKICNlbHNlCi0gICAgICAgICAgICBj
b250ZXh0LnNldFN0cm9rZUNvbG9yKGNvbG9yLmNvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c2V0U3Ryb2tlQ29sb3IoY29sb3IuY29sb3JDb252ZXJ0ZWRUb1NSR0JBKTsKICNlbmRpZgogICAg
ICAgICB9LAogICAgICAgICBbJmNvbnRleHRdIChjb25zdCBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+
JiBncmFkaWVudCkgewpAQCAtMjE0LDkgKzIwMiw5IEBAIHZvaWQgQ2FudmFzU3R5bGU6OmFwcGx5
RmlsbENvbG9yKEdyYXBoaWMKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2gg
cGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KICAgICAgICAgICAgIC8v
IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIENvbG9yIGFic3RyYWN0aW9uIHRvIHN1cHBvcnQgQ01ZS0Eg
Y29ycmVjdGx5CiAjaWYgVVNFKENHKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS0ZpbGxD
b2xvcihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBjb2xvci5jLCBjb2xvci5tLCBjb2xvci55
LCBjb2xvci5rLCBjb2xvci5hKTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtGaWxsQ29s
b3IoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgY29sb3IuY29tcG9uZW50cy5jeWFuLCBjb2xv
ci5jb21wb25lbnRzLm1hZ2VudGEsIGNvbG9yLmNvbXBvbmVudHMueWVsbG93LCBjb2xvci5jb21w
b25lbnRzLmJsYWNrLCBjb2xvci5jb21wb25lbnRzLmFscGhhKTsKICNlbHNlCi0gICAgICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihjb2xvci5jb2xvcik7CisgICAgICAgICAgICBjb250ZXh0
LnNldEZpbGxDb2xvcihjb2xvci5jb2xvckNvbnZlcnRlZFRvU1JHQkEpOwogI2VuZGlmCiAgICAg
ICAgIH0sCiAgICAgICAgIFsmY29udGV4dF0gKGNvbnN0IFJlZlB0cjxDYW52YXNHcmFkaWVudD4m
IGdyYWRpZW50KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNTdHls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxl
LmgJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1N0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDkgKzQxLDggQEAgY2xhc3MgQ2FudmFzU3R5
bGUgewogcHVibGljOgogICAgIENhbnZhc1N0eWxlKCk7CiAgICAgQ2FudmFzU3R5bGUoQ29sb3Ip
OwotICAgIENhbnZhc1N0eWxlKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpOwotICAgIENh
bnZhc1N0eWxlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGFscGhhKTsKLSAgICBD
YW52YXNTdHlsZShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhbHBo
YSk7CisgICAgQ2FudmFzU3R5bGUoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CisgICAgQ2FudmFzU3R5
bGUoY29uc3QgQ01ZS0E8ZmxvYXQ+Jik7CiAgICAgQ2FudmFzU3R5bGUoQ2FudmFzR3JhZGllbnQm
KTsKICAgICBDYW52YXNTdHlsZShDYW52YXNQYXR0ZXJuJik7CiAKQEAgLTUzLDcgKzUyLDYgQEAg
cHVibGljOgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICFXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPEludmFsaWQ+KG1fc3R5bGUpOyB9CiAgICAgYm9vbCBpc0N1cnJlbnRDb2xvcigp
IGNvbnN0IHsgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q3VycmVudENvbG9yPihtX3N0
eWxlKTsgfQogICAgIE9wdGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKCkgY29uc3QgeyByZXR1
cm4gV1RGOjpnZXQ8Q3VycmVudENvbG9yPihtX3N0eWxlKS5vdmVycmlkZUFscGhhOyB9Ci0gICAg
CiAKICAgICBTdHJpbmcgY29sb3IoKSBjb25zdDsKICAgICBSZWZQdHI8Q2FudmFzR3JhZGllbnQ+
IGNhbnZhc0dyYWRpZW50KCkgY29uc3Q7CkBAIC02MywxOSArNjEsMTUgQEAgcHVibGljOgogICAg
IHZvaWQgYXBwbHlTdHJva2VDb2xvcihHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAogICAgIGJv
b2wgaXNFcXVpdmFsZW50Q29sb3IoY29uc3QgQ2FudmFzU3R5bGUmKSBjb25zdDsKLSAgICBib29s
IGlzRXF1aXZhbGVudFJHQkEoZmxvYXQgcmVkLCBmbG9hdCBncmVlbiwgZmxvYXQgYmx1ZSwgZmxv
YXQgYWxwaGEpIGNvbnN0OwotICAgIGJvb2wgaXNFcXVpdmFsZW50Q01ZS0EoZmxvYXQgY3lhbiwg
ZmxvYXQgbWFnZW50YSwgZmxvYXQgeWVsbG93LCBmbG9hdCBibGFjaywgZmxvYXQgYWxwaGEpIGNv
bnN0OworICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IFNSR0JBPGZsb2F0PiYpIGNvbnN0Owor
ICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IENNWUtBPGZsb2F0PiYpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIHN0cnVjdCBJbnZhbGlkIHsgfTsKIAogICAgIHN0cnVjdCBDTVlLQUNvbG9yIHsK
LSAgICAgICAgQ29sb3IgY29sb3I7Ci0gICAgICAgIGZsb2F0IGMgeyAwIH07Ci0gICAgICAgIGZs
b2F0IG0geyAwIH07Ci0gICAgICAgIGZsb2F0IHkgeyAwIH07Ci0gICAgICAgIGZsb2F0IGsgeyAw
IH07Ci0gICAgICAgIGZsb2F0IGEgeyAwIH07CisgICAgICAgIENvbG9yIGNvbG9yQ29udmVydGVk
VG9TUkdCQTsKKyAgICAgICAgQ01ZS0E8ZmxvYXQ+IGNvbXBvbmVudHM7CiAKICAgICAgICAgQ01Z
S0FDb2xvcihjb25zdCBDTVlLQUNvbG9yJikgPSBkZWZhdWx0OwogICAgIH07CkBAIC0xMTYsNyAr
MTEwLDcgQEAgaW5saW5lIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBDYW52YXNTdHlsZQogCiBpbmxp
bmUgU3RyaW5nIENhbnZhc1N0eWxlOjpjb2xvcigpIGNvbnN0CiB7Ci0gICAgYXV0byYgY29sb3Ig
PSBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSA/IFdURjo6Z2V0PENvbG9y
PihtX3N0eWxlKSA6IFdURjo6Z2V0PENNWUtBQ29sb3I+KG1fc3R5bGUpLmNvbG9yOworICAgIGF1
dG8mIGNvbG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xvcj4obV9zdHlsZSkgPyBXVEY6
OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb2xv
ckNvbnZlcnRlZFRvU1JHQkE7CiAgICAgcmV0dXJuIGNvbG9yLnNlcmlhbGl6ZWQoKTsKIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9EZWJ1Z1BhZ2VPdmVybGF5cy5jcHAJKHJldmlzaW9u
IDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVidWdQYWdlT3ZlcmxheXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBl
eHBsaWNpdCBNb3VzZVdoZWVsUmVnaW9uT3ZlcmxheShQYWdlJiBwYWdlKQotICAgICAgICA6IFJl
Z2lvbk92ZXJsYXkocGFnZSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjVmLCAwLjBmLCAw
LjBmLCAwLjRmKSkKKyAgICAgICAgOiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1wbGVDb2xv
cigxMjgsIDAsIDAsIDEwMikpCiAgICAgewogICAgIH0KIApAQCAtMTE4LDcgKzExOCw3IEBAIHB1
YmxpYzoKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbk92
ZXJsYXkoUGFnZSYgcGFnZSkKLSAgICAgICAgOiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC41ZiwgMC4wZiwgMC40ZikpCisgICAgICAgIDogUmVn
aW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3IoMjU1LCAxMjgsIDAsIDEwMikpCiAgICAg
ewogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdl
T3ZlcmxheUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2xpbnV4
L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2xpbnV4L1Jlc291cmNlVXNhZ2VPdmVybGF5TGludXguY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYWludENvbnRl
bnRzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlCiAg
ICAgewogICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoY29udGV4
dCk7Ci0gICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZs
b2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7Ci0gICAgICAgIGNvbnRleHQuc2V0RmlsbENv
bG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC45ZiwgMC45ZiwgMC45ZiwgMS5mKSk7Cisg
ICAgICAgIGNvbnRleHQuZmlsbFJlY3QoY2xpcCwgbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDIw
NCkpOworICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMjMwLCAy
MzAsIDIzMCwgMjU1KSk7CiAKICAgICAgICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IHsgMTAsIDIw
IH07CiAgICAgICAgIFN0cmluZyBzdHJpbmcgPSAgIkNQVTogIiArIGNwdVVzYWdlU3RyaW5nKGdE
YXRhLmNwdSk7CkBAIC0xMzcsNyArMTM3LDcgQEAgdm9pZCBSZXNvdXJjZVVzYWdlT3ZlcmxheTo6
cGxhdGZvcm1Jbml0aQogICAgIG1fcGFpbnRMYXllciA9IEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShv
dmVybGF5KCkucGFnZSgpLT5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqbV9vdmVybGF5UGFpbnRlcik7CiAgICAgbV9wYWludExheWVyLT5zZXRBbmNob3JQb2ludChG
bG9hdFBvaW50M0QoKSk7CiAgICAgbV9wYWludExheWVyLT5zZXRTaXplKHsgbm9ybWFsV2lkdGgs
IG5vcm1hbEhlaWdodCB9KTsKLSAgICBtX3BhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvciht
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICBt
X3BhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwg
MjA0KSk7CiAgICAgbV9wYWludExheWVyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CiAgICAgb3Zl
cmxheSgpLmxheWVyKCkuYWRkQ2hpbGQoKm1fcGFpbnRMYXllcik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDI2MzYxOSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIENvbG9yIENvbG9yOjpsaWdodGVuZWQoKSBjb25zdAogCiAg
ICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OwogCi0g
ICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMobXVsdGlwbGllciAqIHIsIG11bHRp
cGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
cihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIs
IGEgfSk7CiB9CiAKIENvbG9yIENvbG9yOjpkYXJrZW5lZCgpIGNvbnN0CkBAIC0xMjgsNyArMTI4
LDcgQEAgQ29sb3IgQ29sb3I6OmRhcmtlbmVkKCkgY29uc3QKICAgICBmbG9hdCB2ID0gc3RkOjpt
YXgoeyByLCBnLCBiIH0pOwogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAo
diAtIDAuMzNmKSAvIHYpOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
bXVsdGlwbGllciAqIHIsIG11bHRpcGxpZXIgKiBnLCBtdWx0aXBsaWVyICogYiwgYSk7CisgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVy
ICogZywgbXVsdGlwbGllciAqIGIsIGEgfSk7CiB9CiAKIGJvb2wgQ29sb3I6OmlzRGFyaygpIGNv
bnN0CkBAIC0xNDcsNyArMTQ3LDggQEAgZmxvYXQgQ29sb3I6OmxpZ2h0bmVzcygpIGNvbnN0CiAK
IGZsb2F0IENvbG9yOjpsdW1pbmFuY2UoKSBjb25zdAogewotICAgIC8vIEZJWE1FOiBUaGlzIGNh
biBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNw
YWNlIGFsZ29yaXRobXMgZm9yIGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBv
bmVudCgpKS4KKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lv
biB0byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zCisgICAgLy8gZm9y
IGx1bWluYW5jZSAoZS5nLiBjb252ZXJ0VG9YWVooYykueUNvbXBvbmVudCgpKS4KICAgICByZXR1
cm4gV2ViQ29yZTo6bHVtaW5hbmNlKHRvU1JHQkFMb3NzeSgpKTsKIH0KIApAQCAtMjkwLDcgKzI5
MSw3IEBAIENvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG8KICAgICBhdXRv
IGZyb21TUkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogICAgIGF1dG8gdG9T
UkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwogCi0gICAgcmV0dXJuIG1ha2VT
aW1wbGVDb2xvckZyb21GbG9hdHMoCisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcigKICAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IucmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVl
bkNvbXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAogICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ibHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29t
cG9uZW50KCksIHByb2dyZXNzKSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yVHlwZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclR5cGVzLmgJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiAr
MzYsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgU1JHQkEgewogICAgIFQgYWxwaGE7
CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTUkdCQShULCBULCBULCBUKSAtPiBTUkdCQTxU
PjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENvbG9yQ29tcG9uZW50czxUPiBh
c0NvbG9yQ29tcG9uZW50cyhjb25zdCBTUkdCQTxUPiYgYykKIHsKICAgICByZXR1cm4geyBjLnJl
ZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CkBAIC00Niw2ICs0OCwxNiBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgU1JHQkE8VD4gCiAgICAgcmV0dXJuIHsgY1swXSwgY1sx
XSwgY1syXSwgY1szXSB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYgYikKK3sKKyAg
ICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3Qg
U1JHQkE8VD4mIGEsIGNvbnN0IFNSR0JBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7
Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFj
aE5vbkFscGhhQ29tcG9uZW50KFNSR0JBPFQ+JiBjb2xvciwgRnVuY3RvciYmIGYpCiB7CiAgICAg
Y29sb3IucmVkID0gZihjb2xvci5yZWQpOwpAQCAtNTMsNiArNjUsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBGdW5jdG9yPiB2CiAgICAgY29sb3IuYmx1ZSA9IGYoY29sb3IuYmx1
ZSk7CiB9CiAKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIHsKICAg
ICBUIHJlZDsKICAgICBUIGdyZWVuOwpAQCAtNjAsNiArNzMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgTGluZWFyU1JHQkEgCiAgICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IExpbmVhclNSR0JBKFQsIFQsIFQsIFQpIC0+IExpbmVhclNSR0JBPFQ+OworCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JD
b21wb25lbnRzKGNvbnN0IExpbmVhclNSR0JBPFQ+JiBjKQogewogICAgIHJldHVybiB7IGMucmVk
LCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKQEAgLTcwLDYgKzg1LDE3IEBAIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJTUkcKICAgICByZXR1cm4geyBjWzBdLCBjWzFd
LCBjWzJdLCBjWzNdIH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29s
IG9wZXJhdG9yPT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEsIGNvbnN0IExpbmVhclNSR0JBPFQ+
JiBiKQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9u
ZW50cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBMaW5lYXJTUkdCQTxUPiYgYSwgY29uc3QgTGluZWFyU1JHQkE8VD4mIGIpCit7
CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGlzcGxheVAzIHsKICAgICBUIHJlZDsKICAgICBUIGdyZWVuOwpAQCAtNzcsNiArMTAzLDgg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQMyB7CiAgICAgVCBhbHBoYTsK
IH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IERpc3BsYXlQMyhULCBULCBULCBUKSAtPiBEaXNw
bGF5UDM8VD47CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVu
dHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgRGlzcGxheVAzPFQ+JiBjKQogewogICAgIHJl
dHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJsdWUsIGMuYWxwaGEgfTsKQEAgLTg3LDYgKzExNSwx
NyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgRGlzcGxheVAzCiAgICAgcmV0dXJu
IHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBj
b25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IERpc3BsYXlQMzxUPiYgYSwgY29uc3QgRGlz
cGxheVAzPFQ+JiBiKQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0Nv
bG9yQ29tcG9uZW50cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYg
YikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBMaW5lYXJEaXNwbGF5UDMgewogICAgIFQgcmVkOwogICAgIFQgZ3JlZW47CkBAIC05
NCw2ICsxMzMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxhCiAg
ICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IExpbmVhckRpc3BsYXlQMyhU
LCBULCBULCBUKSAtPiBMaW5lYXJEaXNwbGF5UDM8VD47CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgTGlu
ZWFyRGlzcGxheVAzPFQ+JiBjKQogewogICAgIHJldHVybiB7IGMucmVkLCBjLmdyZWVuLCBjLmJs
dWUsIGMuYWxwaGEgfTsKQEAgLTEwNCw2ICsxNDUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
Y29uc3RleHByIExpbmVhckRpcwogICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10g
fTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYikK
K3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMo
Yik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0o
Y29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBjb25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIp
Cit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSFNMQSB7CiAgICAgVCBodWU7CiAgICAgVCBzYXR1cmF0aW9uOwpAQCAtMTExLDYgKzE2
Myw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIU0xBIHsKICAgICBUIGFscGhhOwog
fTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gSFNMQShULCBULCBULCBUKSAtPiBIU0xBPFQ+Owor
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29s
b3JDb21wb25lbnRzKGNvbnN0IEhTTEE8VD4mIGMpCiB7CiAgICAgcmV0dXJuIHsgYy5odWUsIGMu
c2F0dXJhdGlvbiwgYy5saWdodG5lc3MsIGMuYWxwaGEgfTsKQEAgLTEyMSw2ICsxNzUsMzkgQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIEhTTEE8VD4gYQogICAgIHJldHVybiB7IGNb
MF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBiKQor
eworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50cyhi
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBIU0xBPFQ+JiBhLCBjb25zdCBIU0xBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKKworLy8gRklYTUU6IFdoZW4gQ29sb3JDb21wb25lbnRzIHN1cHBvcnRzIG1vcmUg
dGhhbiBsZW5ndGggPT0gNCwgYWRkIGNvbnZlcnNpb24gdG8vZnJvbSBDb2xvckNvbXBvbmVudHM8
VD4gZm9yIENNWUtBCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ01ZS0EgeworICAgIFQg
Y3lhbjsKKyAgICBUIG1hZ2VudGE7CisgICAgVCB5ZWxsb3c7CisgICAgVCBibGFjazsKKyAgICBU
IGFscGhhOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gQ01ZS0EoVCwgVCwgVCwgVCwgVCkg
LT4gQ01ZS0E8VD47CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ01ZS0E8VD4mIGEsIGNvbnN0IENNWUtBPFQ+JiBiKQoreworICAgIHJldHVy
biBhLmN5YW4gPT0gYi5jeWFuICYmIGEubWFnZW50YSA9PSBiLm1hZ2VudGEgJiYgYS55ZWxsb3cg
PT0gYi55ZWxsb3cgJiYgYS5ibGFjayA9PSBiLmJsYWNrICYmIGEuYWxwaGEgPT0gYi5hbHBoYTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDTVlLQTxUPiYgYSwgY29uc3QgQ01ZS0E8VD4mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBi
KTsKK30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgWFlaQSB7CiAgICAgVCB4Owog
ICAgIFQgeTsKQEAgLTEyOCw2ICsyMTUsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
WFlaQSB7CiAgICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IFhZWkEoVCwg
VCwgVCwgVCkgLT4gWFlaQTxUPjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIENv
bG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBYWVpBPFQ+JiBjKQogewog
ICAgIHJldHVybiB7IGMueCwgYy55LCBjLnosIGMuYWxwaGEgfTsKQEAgLTEzOCw0ICsyMjcsMTQg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFhZWkE8VD4gYQogICAgIHJldHVybiB7
IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBi
KQoreworICAgIHJldHVybiBhc0NvbG9yQ29tcG9uZW50cyhhKSA9PSBhc0NvbG9yQ29tcG9uZW50
cyhiKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBYWVpBPFQ+JiBhLCBjb25zdCBYWVpBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEg
PT0gYik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHJldmlzaW9u
IDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSwxNiBAQCBTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYgCiAgICAgfTsKIH0KIAorU1JHQkE8ZmxvYXQ+IHRv
U1JHQkEoY29uc3QgQ01ZS0E8ZmxvYXQ+JiBjb2xvcikKK3sKKyAgICBhdXRvIFtjLCBtLCB5LCBr
LCBhXSA9IGNvbG9yOworICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOworICAgIGZsb2F0IHIgPSBj
b2xvcnMgKiAoMS4wZiAtIGMpOworICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOwor
ICAgIGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOworICAgIHJldHVybiB7IHIsIGcsIGIs
IGEgfTsKK30KKwogU1JHQkE8ZmxvYXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+
JiBjb2xvcikKIHsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IGNvbG9yOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oCShyZXZp
c2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0
aWxpdGllcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgSFNMQTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgTGluZWFyRGlzcGxh
eVAzOwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBMaW5lYXJTUkdCQTsKIHRlbXBsYXRlPHR5
cGVuYW1lPiBzdHJ1Y3QgU1JHQkE7Cit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IENNWUtBOwog
CiAvLyAwLTEgY29tcG9uZW50cywgcmVzdWx0IGlzIGNsYW1wZWQuCiBmbG9hdCBsaW5lYXJUb1JH
QkNvbG9yQ29tcG9uZW50KGZsb2F0KTsKQEAgLTUyLDIxICs1MywyMyBAQCBEaXNwbGF5UDM8Zmxv
YXQ+IHRvRGlzcGxheVAzKGNvbnN0IFNSR0JBCiBXRUJDT1JFX0VYUE9SVCBIU0xBPGZsb2F0PiB0
b0hTTEEoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiBXRUJDT1JFX0VYUE9SVCBTUkdCQTxmbG9hdD4g
dG9TUkdCQShjb25zdCBIU0xBPGZsb2F0PiYpOwogCitTUkdCQTxmbG9hdD4gdG9TUkdCQShjb25z
dCBDTVlLQTxmbG9hdD4mKTsKKworCiBmbG9hdCBsaWdodG5lc3MoY29uc3QgU1JHQkE8ZmxvYXQ+
Jik7CiBmbG9hdCBsdW1pbmFuY2UoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7Ci0KIGZsb2F0IGNvbnRy
YXN0UmF0aW8oY29uc3QgU1JHQkE8ZmxvYXQ+JiwgY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIFNS
R0JBPGZsb2F0PiBwcmVtdWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBpbmxpbmUg
dWludDhfdCBjb252ZXJ0UHJlc2NhbGVkVG9Db21wb25lbnRCeXRlKGZsb2F0IGYpCiB7Ci0gICAg
cmV0dXJuIHN0ZDo6Y2xhbXAoc3RhdGljX2Nhc3Q8aW50PihzdGQ6Omxyb3VuZGYoZikpLCAwLCAy
NTUpOworICAgIHJldHVybiBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4oc3RkOjpyb3VuZChm
KSksIDAsIDI1NSk7CiB9CiAKIGlubGluZSB1aW50OF90IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUo
ZmxvYXQgZikKIHsKLSAgICByZXR1cm4gc3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6
bHJvdW5kZihmICogMjU1LjBmKSksIDAsIDI1NSk7CisgICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3Rh
dGljX2Nhc3Q8aW50PihzdGQ6OnJvdW5kKGYgKiAyNTUuMGYpKSwgMCwgMjU1KTsKIH0KIAogY29u
c3RleHByIGZsb2F0IGNvbnZlcnRUb0NvbXBvbmVudEZsb2F0KHVpbnQ4X3QgYnl0ZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJ
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTUgKzYyLDYgQEAgU2ltcGxlQ29s
b3IgdW5wcmVtdWx0aXBseShTaW1wbGVDb2xvciBjbwogICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3IodW5wcmVtdWx0aXBseUNoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGcsIGEp
LCB1bnByZW11bHRpcGx5Q2hhbm5lbChiLCBhKSwgYSk7CiB9CiAKLVNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvckZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBm
bG9hdCBhKQotewotICAgIGZsb2F0IGNvbG9ycyA9IDEgLSBrOwotICAgIGZsb2F0IHIgPSBjb2xv
cnMgKiAoMS4wZiAtIGMpOwotICAgIGZsb2F0IGcgPSBjb2xvcnMgKiAoMS4wZiAtIG0pOwotICAg
IGZsb2F0IGIgPSBjb2xvcnMgKiAoMS4wZiAtIHkpOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29s
b3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOwotfQotCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlh
bGl6YXRpb25Gb3JIVE1MKCkgY29uc3QKIHsKICAgICBpZiAoaXNPcGFxdWUoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNp
b24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29s
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTAgKzkxLDggQEAgYm9vbCBvcGVyYXRvciE9KFNp
bXBsZUNvbG9yLCBTaW1wbGVDb2xvcgogCiBjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBs
ZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIpOwogY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VT
aW1wbGVDb2xvcihpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7Ci0KLVNpbXBsZUNvbG9yIG1h
a2VTaW1wbGVDb2xvcihjb25zdCBDb2xvckNvbXBvbmVudHM8ZmxvYXQ+JiBzUkdCQ29tcG9uZW50
cyk7Ci1TaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0
IGcsIGZsb2F0IGIsIGZsb2F0IGEpOwotU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNN
WUtBKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpOworY29uc3Rl
eHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBTUkdCQTx1aW50OF90PiYpOwor
U2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYpOwogCiBTaW1w
bGVDb2xvciBwcmVtdWx0aXBseUZsb29yaW5nKFNpbXBsZUNvbG9yKTsKIFNpbXBsZUNvbG9yIHBy
ZW11bHRpcGx5Q2VpbGluZyhTaW1wbGVDb2xvcik7CkBAIC0xMjAsMTQgKzExOCwxNSBAQCBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGluCiAgICAgcmV0dXJuIHsgc3RhdGlj
X2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChyLCAwLCAweEZGKSksIHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHN0ZDo6Y2xhbXAoZywgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNs
YW1wKGIsIDAsIDB4RkYpKSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChhLCAwLCAw
eEZGKSkgfTsKIH0KIAotaW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvcihjb25zdCBT
UkdCQTxmbG9hdD4mIHNSR0JBKQorY29uc3RleHByIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xv
cihjb25zdCBTUkdCQTx1aW50OF90PiYgc1JHQkEpCiB7CiAgICAgYXV0byBbciwgZywgYiwgYV0g
PSBzUkdCQTsKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KTsKKyAgICByZXR1cm4geyByLCBnLCBiLCBhIH07CiB9CiAKLWlubGluZSBTaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0
IGEpCitpbmxpbmUgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0
PiYgc1JHQkEpCiB7CisgICAgYXV0byBbciwgZywgYiwgYV0gPSBzUkdCQTsKICAgICByZXR1cm4g
eyBjb252ZXJ0VG9Db21wb25lbnRCeXRlKHIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGcpLCBj
b252ZXJ0VG9Db21wb25lbnRCeXRlKGIpLCBjb252ZXJ0VG9Db21wb25lbnRCeXRlKGEpIH07CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9J
bmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFW
Ri5jcHAJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9JbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODAsNyArODAsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U2ltcGxlQ29sb3I+IG1ha2VT
aW1wbGVDCiAgICAgICAgIGNvbXBvbmVudEFycmF5W2ldID0gY29tcG9uZW50OwogICAgIH0KIAot
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbXBvbmVudEFycmF5WzFdLCBj
b21wb25lbnRBcnJheVsyXSwgY29tcG9uZW50QXJyYXlbM10sIGNvbXBvbmVudEFycmF5WzBdKTsK
KyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgY29tcG9uZW50QXJyYXlbMV0sIGNv
bXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwgY29tcG9uZW50QXJyYXlbMF0gfSk7
CiB9CiAKIFJlZjxJbmJhbmRHZW5lcmljQ3VlPiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlQVZGOjpw
cm9jZXNzQ3VlQXR0cmlidXRlcyhDRkF0dHJpYnV0ZWRTdHJpbmdSZWYgYXR0cmlidXRlZFN0cmlu
ZykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBHcmFkaWVudDo6Q29sb3JTdG9wIGludGVy
cG9sYXRlQ28KICAgICBmbG9hdCBiID0gYjEgKyAoYjIgLSBiMSkgKiAwLjVmOwogICAgIGZsb2F0
IGEgPSBhMSArIChhMiAtIGExKSAqIDAuNWY7CiAKLSAgICByZXR1cm4gR3JhZGllbnQ6OkNvbG9y
U3RvcChvZmZzZXQsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSkpOworICAg
IHJldHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwgbWFrZVNpbXBsZUNvbG9yKFNSR0JB
IHsgciwgZywgYiwgYSB9KSk7CiB9CiAKIHN0YXRpYyBjYWlyb19wYXR0ZXJuX3QqIGNyZWF0ZUNv
bmljKGZsb2F0IHhvLCBmbG9hdCB5bywgZmxvYXQgciwgZmxvYXQgYW5nbGVSYWRpYW5zLApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJ
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0NvbG9yQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyBTaW1w
bGVDb2xvciBtYWtlU2ltcGxlQ29sb3JGcm9tQ0cKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywg
YiwgYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IHIsIGcsIGIsIGEgfSk7
CiB9CiAKIENvbG9yOjpDb2xvcihDR0NvbG9yUmVmIGNvbG9yKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db2xvck1hYy5tbQkocmV2aXNpb24gMjYz
NjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHN0YXRpYyBTaW1wbGVDb2xvciBtYWtl
U2ltcGxlQ29sb3JGcm9tTlMKICAgICBbcmdiQ29sb3IgZ2V0UmVkOiZyZWRDb21wb25lbnQgZ3Jl
ZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25lbnQgYWxwaGE6JmFscGhhXTsKICAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMocmVkQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudCwgYmx1ZUNvbXBvbmVudCwg
YWxwaGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBzdGF0aWNfY2FzdDxm
bG9hdD4ocmVkQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdyZWVuQ29tcG9uZW50KSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGJsdWVDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYWxw
aGEpIH0pOwogfQogCiBDb2xvciBjb2xvckZyb21OU0NvbG9yKE5TQ29sb3IgKmNvbG9yKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERp
cmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsNyArMTMyLDcgQEAgdm9pZCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6c2V0QWN0aXZlTAogCiBDT01QdHI8SUQyRDFTb2xpZENvbG9yQnJ1c2g+
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpicnVzaFdpdGhDb2xvcihjb25zdCBEMkQxX0NPTE9S
X0YmIGNvbG9yKQogewotICAgIFNpbXBsZUNvbG9yIGNvbG9yS2V5ID0gbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cyhjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hKTsKKyAgICBhdXRv
IGNvbG9yS2V5ID0gbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgY29sb3IuciwgY29sb3IuZywgY29s
b3IuYiwgY29sb3IuYSB9KTsKIAogICAgIGlmICghY29sb3JLZXkpIHsKICAgICAgICAgaWYgKCFt
X3plcm9CcnVzaCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklPUy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvQ29sb3JJT1MubW0J
KHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Db2xvcklP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBDb2xvciBjb2xvckZyb21VSUNv
bG9yKFVJQ29sb3IgKmNvbG9yKQogCiAgICAgW2NvbG9yIGdldFJlZDomcmVkQ29tcG9uZW50IGdy
ZWVuOiZncmVlbkNvbXBvbmVudCBibHVlOiZibHVlQ29tcG9uZW50IGFscGhhOiZhbHBoYV07CiAK
LSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21wb25lbnQsIGdyZWVu
Q29tcG9uZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVD
b2xvcihTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVu
dCksIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVD
YWNoZS5tbQkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0xlZ2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYyLDkgKzQ2Miw4IEBAIHVu
c2lnbmVkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5Rm8KIENvbG9yIExlZ2FjeVRpbGVD
YWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihMZWdhY3lUaWxlR3JpZCogZ3JpZCkgY29uc3QK
IHsKICAgICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpKQotICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjJmLCAxLjBmLCAwLmYsIDAuNWYpOwot
Ci0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4yZiwgMC45ZiwgMC5mLCAw
LjVmKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcig1MSwgMjU1LCAwLCAxMjgpOwor
ICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoNTEsIDIzMCwgMCwgMTI4KTsKIH0KIAogc3RhdGlj
IGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYgZGlydHlSZWN0LCBDR1NS
ZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2FsZSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjIxOCw3ICsyMjE4LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcgogI2VuZGlmCiAKICNpZmRlZiBSRVZFQUxfVFJBTlNQQVJFTkNZX0xBWUVSUwotICAgICAg
ICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAu
MGYsIDAuNWYsIDAuMmYpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxsQ29sb3IobWFrZVNpbXBs
ZUNvbG9yKDAsIDAsIDEyOCwgNTEpKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChwaXhlbFNu
YXBwZWRDbGlwUmVjdCk7CiAjZW5kaWYKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lSU9TLm1tCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM4MCw3
ICszODAsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94RGVjb3JhCiAKICAg
ICBpZiAoY2hlY2tlZCB8fCBpbmRldGVybWluYXRlKSB7CiAgICAgICAgIGF1dG8gYm9yZGVyID0g
Ym94LnN0eWxlKCkuZ2V0Um91bmRlZEJvcmRlckZvcihyZWN0KTsKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5kZWRSZWN0
Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIG1ha2VTaW1w
bGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC44ZikpOworICAgICAgICBwYWlu
dEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRl
ZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgQ29s
b3I6OmJsYWNrLmNvbG9yV2l0aEFscGhhKDIwNCkpOwogCiAgICAgICAgIGF1dG8gY2xpcCA9IGFk
ZFJvdW5kZWRCb3JkZXJDbGlwKGJveCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCk7CiAgICAg
ICAgIGF1dG8gd2lkdGggPSBjbGlwLndpZHRoKCk7CkBAIC00MTYsMTAgKzQxNiwxMCBAQCBib29s
IFJlbmRlclRoZW1lSU9TOjpwYWludENoZWNrYm94RGVjb3JhCiAgICAgICAgIH0KIAogICAgICAg
ICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4obGluZVdpZHRoLCAxKTsKLSAgICAgICAgZHJh
d0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFkb3cp
IH0sIGtDR0xpbmVDYXBTcXVhcmUsIGxpbmVXaWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cygwLjBmLCAwLjBmLCAwLjBmLCAwLjdmKSk7CisgICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0Nv
bnRleHQsIFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUoc2hhZG93KSB9LCBrQ0dMaW5lQ2FwU3F1
YXJlLCBsaW5lV2lkdGgsIENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgxNzkpKTsKIAogICAg
ICAgICBsaW5lV2lkdGggPSBzdGQ6Om1heDxmbG9hdD4oc3RkOjptaW4od2lkdGgsIGhlaWdodCkg
KiB0aGlja25lc3NSYXRpbywgMSk7Ci0gICAgICAgIGRyYXdKb2luZWRMaW5lcyhjZ0NvbnRleHQs
IFZlY3RvcjxDR1BvaW50PiB7IFdURk1vdmUobGluZSkgfSwga0NHTGluZUNhcEJ1dHQsIGxpbmVX
aWR0aCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygxLjBmLCAxLjBmLCAxLjBmLCAyNDAgLyAy
NTUuMGYpKTsKKyAgICAgICAgZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9p
bnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBrQ0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBDb2xvcjo6
d2hpdGUuY29sb3JXaXRoQWxwaGEoMjQwKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYXV0byBj
bGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0
KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQ3Nyw3ICs0NzcsNyBA
QCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJhZGlvRGVjb3JhdGlvCiAKICAgICBpZiAoaXND
aGVja2VkKGJveCkpIHsKICAgICAgICAgYXV0byBib3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3Vu
ZGVkQm9yZGVyRm9yKHJlY3QpOwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3Vu
ZGVkUmVjdChib3JkZXIucGl4ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmls
bFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJv
eC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBDb2xvcjo6YmxhY2suY29sb3JXaXRo
QWxwaGEoMjA0KSk7CiAKICAgICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAo
Ym94LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0KTsKICAgICAgICAgZHJhd0F4aWFsR3JhZGll
bnQoY2dDb250ZXh0LCBncmFkaWVudFdpdGhOYW1lKENvbmNhdmVHcmFkaWVudCksIGNsaXAubG9j
YXRpb24oKSwgRmxvYXRQb2ludChjbGlwLngoKSwgY2xpcC5tYXhZKCkpLCBMaW5lYXJJbnRlcnBv
bGF0aW9uKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQCBib29sIFJlbmRlclRoZW1lSU9TOjpwYWludFJh
ZGlvRGVjb3JhdGlvCiAgICAgICAgIGNsaXAuaW5mbGF0ZVgoLWNsaXAud2lkdGgoKSAqIElubmVy
SW52ZXJzZVJhdGlvKTsKICAgICAgICAgY2xpcC5pbmZsYXRlWSgtY2xpcC5oZWlnaHQoKSAqIElu
bmVySW52ZXJzZVJhdGlvKTsKICAgICAgICAgCi0gICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRv
d0NvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDAuN2YgKiAyNTUpOworICAgICAgICBj
b25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgx
NzkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRFbGxpcHNlKGNsaXAs
IENvbG9yOjp3aGl0ZSwgc2hhZG93Q29sb3IpOwogCiAgICAgICAgIEZsb2F0U2l6ZSByYWRpdXMo
Y2xpcC53aWR0aCgpIC8gMi4wZiwgY2xpcC5oZWlnaHQoKSAvIDIuMGYpOwpAQCAtNzM4LDcgKzcz
OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAg
RmxvYXRSZWN0IGVsbGlwc2UoYnV0dG9uQ2xpcC54KCkgKyAoYnV0dG9uQ2xpcC53aWR0aCgpIC0g
Y291bnQgKiAoc2l6ZSArIHBhZGRpbmcpICsgcGFkZGluZykgLyAyLjAsIGJ1dHRvbkNsaXAubWF4
WSgpIC0gMTAuMCwgc2l6ZSwgc2l6ZSk7CiAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKSB7Ci0gICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdSYWlzZWRF
bGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygw
LjBmLCAwLjBmLCAwLjBmLCAwLjVmKSk7CisgICAgICAgICAgICBwYWludEluZm8uY29udGV4dCgp
LmRyYXdSYWlzZWRFbGxpcHNlKGVsbGlwc2UsIENvbG9yOjp3aGl0ZSwgQ29sb3I6OmJsYWNrLmNv
bG9yV2l0aEFscGhhKDEyOCkpOwogICAgICAgICAgICAgZWxsaXBzZS5tb3ZlKHNpemUgKyBwYWRk
aW5nLCAwKTsKICAgICAgICAgfQogICAgIH0gIGVsc2UgewpAQCAtNzU3LDkgKzc1Nyw5IEBAIGJv
b2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50TWVudUxpc3RCdXR0b24KICAgICAgICAgICAgIHsgYXJy
b3dbMl0ueCgpLCBhcnJvd1syXS55KCkgKyAxIH0KICAgICAgICAgfTsKIAotICAgICAgICBmbG9h
dCBvcGFjaXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDAuMiA6IDAuNTsKLSAgICAgICAg
cGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJva2VDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxv
YXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKLSAgICAgICAgcGFpbnRJbmZvLmNvbnRl
eHQoKS5zZXRGaWxsQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAw
LjBmLCBvcGFjaXR5KSk7CisgICAgICAgIHVpbnQ4X3Qgb3BhY2l0eSA9IGlzUmVhZE9ubHlDb250
cm9sKGJveCkgPyA1MSA6IDEyODsKKyAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zZXRTdHJv
a2VDb2xvcihDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEob3BhY2l0eSkpOworICAgICAgICBw
YWludEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxw
aGEob3BhY2l0eSkpOwogICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmRyYXdQYXRoKFBhdGg6
OnBvbHlnb25QYXRoRnJvbVBvaW50cyhzaGFkb3cpKTsKIAogICAgICAgICBwYWludEluZm8uY29u
dGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yOjp3aGl0ZSk7CkBAIC0xODQwLDcgKzE4NDAsNyBA
QCB2b2lkIFJlbmRlclRoZW1lSU9TOjpwYWludFN5c3RlbVByZXZpZXdCCiAgICAgLy8gRHJhdyBh
IGRyb3Agc2hhZG93IGFyb3VuZCB0aGUgY2lyY2xlLgogICAgIC8vIFVzZSB0aGUgR3JhcGhpY3ND
b250ZXh0IGZ1bmN0aW9uLCBiZWNhdXNlIGl0IGNhbGN1bGF0ZXMgdGhlIGJsdXIgcmFkaXVzIGlu
IGNvbnRleHQgc3BhY2UsCiAgICAgLy8gcmF0aGVyIHRoYW4gc2NyZWVuIHNwYWNlLgotICAgIGF1
dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuZiwgMC5mLCAwLmYs
IDAuMWYpOworICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29sb3I6OmJsYWNrLmNv
bG9yV2l0aEFscGhhKDI2KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0U2hhZG93KEZsb2F0U2l6
ZSB7IH0sIDE2LCBzaGFkb3dDb2xvcik7CiAKICAgICAvLyBUaGUgY2lyY2xlIG11c3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsIHZhbHVlIG9mIDEgZm9yIHRoZSBzaGFkb3cgY29sb3IgdG8gYXBwZWFy
LgpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzYzOCkKKysrIFNvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDYtMjggIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSByZW1haW5pbmcgbWFrZVNp
bXBsZUNvbG9yRnJvbSogdmFyaWFudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIxMzcwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwOgorICAg
ICAgICAod2Via2l0Q29sb3JUb1dlYkNvcmVDb2xvcik6CisgICAgICAgIFVzZSBtYWtlU2ltcGxl
Q29sb3IoU1JHQkEgeyAuLi4gfSkgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNsaWVudDo6c2hvd1BhaW50UmVjdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6RmluZENvbnRyb2xsZXI6OmRyYXdSZWN0KToKKyAgICAgICAgVXNlIG1ha2VT
aW1wbGVDb2xvciByYXRoZXIgdGhhbiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzLCBhbGxvd2lu
ZyBmb3IKKyAgICAgICAgY29uc3RhbnQgZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xv
cnMuCisKIDIwMjAtMDYtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXggdGhyZWFkLXNhZmV0eSBpc3N1ZSBpbiB3ZWJQcm9jZXNzUG9vbEhpZ2hEeW5hbWlj
UmFuZ2VEaWRDaGFuZ2VDYWxsYmFjaygpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvd3BlL1dlYktpdENvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRDb2xvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDggKzc1LDcgQEAgR19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRDb2xvciwgd2Via2l0
XwogCiBjb25zdCBXZWJDb3JlOjpDb2xvciB3ZWJraXRDb2xvclRvV2ViQ29yZUNvbG9yKFdlYktp
dENvbG9yKiBjb2xvcikKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJv
bUZsb2F0cyhzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPnJlZCksIHN0YXRpY19jYXN0PGZsb2F0
Pihjb2xvci0+Z3JlZW4pLAotICAgICAgICBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmJsdWUp
LCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmFscGhhKSk7CisgICAgcmV0dXJuIFdlYkNvcmU6
Om1ha2VTaW1wbGVDb2xvcihXZWJDb3JlOjpTUkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0Pihjb2xv
ci0+cmVkKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpIH0pOwog
fQogCiB2b2lkIHdlYmtpdENvbG9yRmlsbEZyb21XZWJDb3JlQ29sb3IoY29uc3QgV2ViQ29yZTo6
Q29sb3ImIHdlYkNvcmVDb2xvciwgV2ViS2l0Q29sb3IqIGNvbG9yKQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luc3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2ViSW5zcGVjdG9yQ2xp
ZW50LmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
c3BlY3Rvci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzcsNyAr
MTc3LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3JDbGllbnQ6OnNob3dQYWludFJlY3QoYwogICAgIHBh
aW50TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKICAgICBwYWludExheWVy
LT5zZXRQb3NpdGlvbihyZWN0LmxvY2F0aW9uKCkpOwogICAgIHBhaW50TGF5ZXItPnNldFNpemUo
cmVjdC5zaXplKCkpOwotICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuMGYsIDAuMGYsIDAuMmYpKTsKKyAgICBwYWludExh
eWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IobWFrZVNpbXBsZUNvbG9yKDI1NSwgMCwgMCwgNTEpKTsK
IAogICAgIEtleWZyYW1lVmFsdWVMaXN0IGZhZGVLZXlmcmFtZXMoQW5pbWF0ZWRQcm9wZXJ0eU9w
YWNpdHkpOwogICAgIGZhZGVLZXlmcmFtZXMuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRp
b25WYWx1ZT4oMCwgMSkpOwpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
RmluZENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MDksOCArNTA5LDggQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QoUGFn
ZU92ZXJsYQogewogICAgIGNvbnN0IGludCBib3JkZXJXaWR0aCA9IDE7CiAKLSAgICBhdXRvIG92
ZXJsYXlCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMWYsIDAu
MWYsIDAuMWYsIDAuMjVmKTsKLSAgICBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNpbXBsZUNvbG9y
RnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAwLjVmKTsKKyAgICBjb25zdGV4cHIgYXV0byBv
dmVybGF5QmFja2dyb3VuZENvbG9yID0gbWFrZVNpbXBsZUNvbG9yKDI2LCAyNiwgMjYsIDY0KTsK
KyAgICBjb25zdGV4cHIgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAw
LCAxMjgpOwogCiAgICAgSW50UmVjdCBib3JkZXJJbmZsYXRlZERpcnR5UmVjdCA9IGRpcnR5UmVj
dDsKICAgICBib3JkZXJJbmZsYXRlZERpcnR5UmVjdC5pbmZsYXRlKGJvcmRlcldpZHRoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>403088</attachid>
            <date>2020-06-29 11:07:04 -0700</date>
            <delta_ts>2020-06-29 13:32:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213706-20200629110703.patch</filename>
            <type>text/plain</type>
            <size>45956</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MzY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMiBAQAorMjAyMC0wNi0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHJlbWFpbmluZyBtYWtl
U2ltcGxlQ29sb3JGcm9tKiB2YXJpYW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCisKKyAgICAgICAgUmVtb3ZlZCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBtYWtl
U2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisgICAgICAgIC0gVXBkYXRlZCBjYWxsZXJzIHRoYXQgbmVl
ZCB0byBwYXNzIGZsb2F0cyB0byB1c2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pOwor
ICAgICAgICAtIFVwZGF0ZWQgY2FsbGVycyB0aGF0IGRvbid0IG5lZWQgdG8gcGFzcyBmbG9hdHMs
IG1vc3RseSBjb21waWxlIHRpbWUgY29uc3RhbnQKKyAgICAgICAgICBTaW1wbGVDb2xvcnMgdG8g
dXNlIG1ha2VTaW1wbGVDb2xvciguLi4pLCBwYXNzaW5nIGluIDAtMjU1IGJhc2VkIGNvbXBvbmVu
dAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAgLSBVcGRhdGVkIGNhbGxlcnMgb2YgbWFrZVNp
bXBsZUNvbG9yRnJvbUNNWUtBIHRvIHVzZSBtYWtlU2ltcGxlQ29sb3IodG9TUkdCQShDTVlLQSB7
IC4uLiB9KSkuCisgICAgICAgICAgVGhpcyByZXF1aXJlZCBhZGRpbmcgQ01ZS0EgdHlwZSB0byBD
b2xvclR5cGVzLmggYW5kIG1vdmluZyBjb252ZXJzaW9uIFNSR0JBIHRvCisgICAgICAgICAgQ29s
b3JVdGlsaXRpZXMgd2l0aCB0aGUgb3RoZXIgY29sb3IgY29udmVyc2lvbiBjb2RlLgorICAgICAg
ICAtIEFkZGVkIGRlZHVjdGlvbiBndWlkZXMgZm9yIGNvbG9yIHR5cGVzIHRvIGFsbG93IGNvbXBv
bmVudCB0eXBlIGRlZHVjdGlvbi4gVGhpcyBhbGxvd3MgCisgICAgICAgICAgdXMgdG8gd3JpdGU6
CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBIHsgcmVkRmxvYXQsIGdyZWVuRmxvYXQs
IGJsdWVGbG9hdCwgYWxwaGFGbG9hdCB9KQorCisgICAgICAgICAgcmVhdGhlciB0aGFuIHRoZSBt
b3JlIGN1bWJlcnNvbWU6CisKKyAgICAgICAgICAgICAgIGZ1bmN0aW9uKFNSR0JBPGZsb2F0PiB7
IHJlZEZsb2F0LCBncmVlbkZsb2F0LCBibHVlRmxvYXQsIGFscGhhRmxvYXQgfSkKKworICAgICAg
ICAtIEFkZGVkIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBjb2xvciB0eXBlLiBPbmx5
IHVzZWQgYnkgQ01ZS0EgYXQgdGhlIG1vbWVudCwKKyAgICAgICAgICBidXQgZ2VuZXJhbGx5IHVz
ZWZ1bCwgc28gYWRkZWQgZm9yIGFsbCBvZiB0aGVtLiBGb3IgYWxsIHR5cGVzIGNvbnZlcnRhYmxl
IHRvIENvbG9yQ29tcG9uZW50cywKKyAgICAgICAgICB0aGUgaW1wbGVtZW50YXRpb24gdXNlcyB0
aGUgY29udmVyc2lvbiB0byBDb2xvckNvbXBvbmVudHMgdG8gYXZvaWQgcmVkdW5kYW5jeS4KKwor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
c2V0RmlsbENvbG9yKToKKyAgICAgICAgVXBkYXRlIHRvIGNhbGwgbmV3IHR5cGVkIGNvbG9yIGJh
c2VkIENhbnZhc1N0eWxlIGZ1bmN0aW9ucy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNldFNoYWRvdyk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxlQ29s
b3IgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy9tYWtlU2ltcGxlQ29sb3JG
cm9tQ01ZS0EuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUpOgorICAgICAgICBSZXBsYWNl
IGNvbnN0cnVjdG9ycyB0YWtpbmcgcmF3IGZsb2F0cyB3aXRoIG9uZXMgdGFraW5nIHR5cGVkIGNv
bG9ycyAoU1JHQkE8ZmxvYXQ+L0NNWUtBPGZsb2F0PikKKyAgICAgICAgdG8gbWFrZSBpdCBtb3Jl
IGNsZWFyIHdoYXQgdGhlIHBhcmFtZXRlcnMgbWVhbi4gCisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNTdHlsZTo6aXNFcXVpdmFsZW50Q29sb3IgY29uc3QpOgorICAgICAgICBDb21wYXJlIHRoZSBj
bXlrYSBjb21wb25lbnRzIHVzaW5nIG5ldyBvcGVyYXRvcj09IGltcGxlbWVudGF0aW9uIGZvciBD
TVlLQTxmbG9hdD4uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2YWxlbnRSR0JB
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1N0eWxlOjppc0VxdWl2
YWxlbnRDTVlLQSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2UgaXNFcXVpdmFsZW50
UkdCQS9pc0VxdWl2YWxlbnRDTVlLQSB3aXRoIG92ZXJsb2FkZWQgaXNFcXVpdmFsZW50LgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5U3Ryb2tlQ29sb3IgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzU3R5bGU6OmFwcGx5RmlsbENvbG9yIGNvbnN0KToKKyAgICAg
ICAgVXBkYXRlIGZvciBuZXcgbmFtZXMgb2YgQ01ZS0EgbWVtYmVycy4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNTdHlsZS5oOgorICAgICAgICBVc2UgU1JHQkE8ZmxvYXQ+IGFuZCBDTVlL
QTxmbG9hdD4gdG8gc2ltcGxpZnkgaW50ZXJmYWNlcworICAgICAgICAKKyAgICAgICAgKiBwYWdl
L0RlYnVnUGFnZU92ZXJsYXlzLmNwcDoKKyAgICAgICAgKiBwYWdlL2xpbnV4L1Jlc291cmNlVXNh
Z2VPdmVybGF5TGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VVc2FnZU92ZXJs
YXk6OnBsYXRmb3JtSW5pdGlhbGl6ZSk6CisgICAgICAgIFVzZSBtYWtlU2ltcGxlQ29sb3IgcmF0
aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cywgYWxsb3dpbmcgZm9yCisgICAgICAg
IGNvbnN0YW50IGV4cHJlc3Npb24gY3JlYXRpb24gb2YgU2ltcGxlQ29sb3JzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
OmxpZ2h0ZW5lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFya2VuZWQgY29u
c3QpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJhdGhlciB0
aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuCisKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9y
OjpsdW1pbmFuY2UgY29uc3QpOgorICAgICAgICBGaXggY29tbWVudC4KKworICAgICAgICAoV2Vi
Q29yZTo6YmxlbmRXaXRob3V0UHJlbXVsdGlwbHkpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNv
bG9yKC4uLikgcmF0aGVyIHRoYW4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yVHlwZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3IhPSk6CisgICAgICAgIC0gQWRk
IGRlZHVjdGlvbiBndWlkZXMgYW5kIG9wZXJhdG9yPT0vb3BlcmF0b3IhPSBmb3IgZWFjaCBjb2xv
ciB0eXBlLgorICAgICAgICAtIEFkZCBDTVlLQSB0eXBlLiBObyBjb252ZXJzaW9uIHRvIENvbG9y
Q29tcG9uZW50cyB5ZXQsIGFzIENvbG9yQ29tcG9uZW50cworICAgICAgICAgIG9ubHkgd29ya3Mg
d2l0aCA0IGNvbXBvbmVudCBjb2xvcnMsIG5vdCBvbmVzIHdpdGggNSBsaWtlIENNWUtBLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6dG9TUkdCQSk6CisgICAgICAgIE1vdmUgY29udmVyc2lvbiBmcm9tIENNWUtBIHRv
IFNSR0JBIGZyb20gbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBIHRvIGhlcmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5oOgorICAgICAgICAoV2ViQ29yZTo6
Y29udmVydFByZXNjYWxlZFRvQ29tcG9uZW50Qnl0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0VG9Db21wb25lbnRCeXRlKToKKyAgICAgICAgVXNlIHN0ZDo6cm91bmQgcmF0aGVyIHRoYW4g
c3RkOjpscm91bmRmLCBzaW5jZSBpdCB3aWxsIGhhdmUgdGhlIHNhbWUgcmVzdWx0IAorICAgICAg
ICBhbmQgaXQgcmVhZHMgbmljZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVDb2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0Ep
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjptYWtlU2ltcGxlQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIC0gUmVtb3ZlZCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzIGFuZCBtYWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EuCisgICAg
ICAgIC0gQWRkZWQgY29uc3RleHByIG92ZXJsb2FkIG9mIG1ha2VTaW1wbGVDb2xvciB0YWtpbmcg
YSBjb25zdCBTUkdCQTx1aW50OF90PiYuCisgICAgICAgIC0gRml4ZWQgZm9yd2FyZCBkZWNsYXJh
dGlvbiBvZiBtYWtlU2ltcGxlQ29sb3IgdGhhdCB3YXMgdGFraW5nIENvbG9yQ29tcG9uZW50cyAK
KyAgICAgICAgICB0byBhY3R1YWxseSB0YWtlIGFuIFNSR0JBPGZsb2F0Piwgd2hpY2ggaXMgd2hh
dCB0aGUgaW5saW5lIGltcGxlbWVudGF0aW9uIGFjdHVhbGx5CisgICAgICAgICAgdGFrZXMuCisg
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFj
a1ByaXZhdGVBVkYuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbUFS
R0JDRkFycmF5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENh
aXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmludGVycG9sYXRlQ29sb3JTdG9wKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VTaW1wbGVDb2xvckZyb21DR0NvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENvbG9yKToKKyAgICAgICAgVXNlIG1ha2VT
aW1wbGVDb2xvcihTUkdCQSB7IC4uLiB9KSByYXRoZXIgdGhhbiBtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9yTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yRnJvbU5TQ29sb3IpOgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9Db2xvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbVVJ
Q29sb3IpOgorICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgLi4uIH0pIHJhdGhl
ciB0aGFuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMuIENhc3RpbmcgdG8gCisgICAgICAgIGZs
b2F0IGlzIG5lZWRlZCwgYXMgdGhlIGlucHV0IHR5cGVzIGFyZSBDR0Zsb2F0IHdoaWNoIGlzIGRv
dWJsZSBpbiA2NC1iaXQgZW52aXJvbm1lbnRzCisgICAgICAgIGFuZCB3b24ndCBhdXRvbWF0aWNh
bGx5IG5hcnJvdyB3aXRoIHRoZSBuZXcgdHlwZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mv
TGVnYWN5VGlsZUNhY2hlLm1tOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5VGlsZUNhY2hlOjpj
b2xvckZvckdyaWRUaWxlQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmJlZ2luVHJhbnNwYXJl
bmN5TGF5ZXJzKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVDb2xvciByYXRoZXIgdGhhbiBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzLCBhbGxvd2luZyBmb3IKKyAgICAgICAgY29uc3RhbnQgZXhw
cmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUlPUzo6cGFp
bnRDaGVja2JveERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lSU9T
OjpwYWludFJhZGlvRGVjb3JhdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVJ
T1M6OnBhaW50TWVudUxpc3RCdXR0b25EZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUlPUzo6cGFpbnRTeXN0ZW1QcmV2aWV3QmFkZ2UpOgorICAgICAgICBVc2UgQ29s
b3I6OmJsYWNrL0NvbG9yOjp3aGl0ZS5jb2xvcldpdGhBbHBoYSguLi4pIHJhdGhlciB0aGFuIG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMsIAorICAgICAgICBhbGxvd2luZyBmb3IgY29uc3RhbnQg
ZXhwcmVzc2lvbiBjcmVhdGlvbiBvZiBTaW1wbGVDb2xvcnMuCisKIDIwMjAtMDYtMjkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBPbiBsb2FkIGZyb20gYmFjay9m
b3J3YXJkIGNhY2hlLCBjYWxsIGNoZWNrQ29tcGxldGVkKCkgZm9yIEFMTCBmcmFtZXMgaW5zaWRl
IEZyYW1lTG9hZGVyOjpjb21taXRQcm92aXNpb25hbExvYWQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAJKHJldmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEs
NyArMzcxLDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogICAg
IGlmICghc3R5bGUuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoc3RhdGUo
KS5zdHJva2VTdHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxl
bnRDb2xvcihzdHlsZSkpCisgICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50
Q29sb3Ioc3R5bGUpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc3R5bGUuaXNDdXJyZW50
Q29sb3IoKSkKQEAgLTM5NCw3ICszOTQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldEZpCiAgICAgaWYgKCFzdHlsZS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5maWxsU3R5
bGUuaXNFcXVpdmFsZW50Q29sb3Ioc3R5bGUpKQorICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5p
c0VxdWl2YWxlbnRDb2xvcihzdHlsZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzdHls
ZS5pc0N1cnJlbnRDb2xvcigpKQpAQCAtOTE0LDIzICs5MTQsMjYgQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRTdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnNldFN0cm9rZUNvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0g
ICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuc3Ryb2tlU3R5
bGUuaXNFcXVpdmFsZW50UkdCQShncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCBhbHBo
YSkpCisgICAgYXV0byBjb2xvciA9IFNSR0JBIHsgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgYWxwaGEgfTsKKyAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnQo
Y29sb3IpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUo
Z3JheUxldmVsLCBhbHBoYSkpOworICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKGNvbG9y
KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29s
b3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUo
KS5zdHJva2VTdHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxl
bnRSR0JBKHIsIGcsIGIsIGEpKQorICAgIGF1dG8gY29sb3IgPSBTUkdCQSB7IHIsIGcsIGIsIGEg
fTsKKyAgICBpZiAoc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAg
ICAgICByZXR1cm47Ci0gICAgc2V0U3Ryb2tlU3R5bGUoQ2FudmFzU3R5bGUociwgZywgYiwgYSkp
OworICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKGNvbG9yKSk7CiB9CiAKIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U3Ryb2tlQ29sb3IoZmxvYXQgYywgZmxvYXQg
bSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUoKS5zdHJva2VT
dHlsZS5pc1ZhbGlkKCkgJiYgc3RhdGUoKS5zdHJva2VTdHlsZS5pc0VxdWl2YWxlbnRDTVlLQShj
LCBtLCB5LCBrLCBhKSkKKyAgICBhdXRvIGNvbG9yID0gQ01ZS0EgeyBjLCBtLCB5LCBrLCBhIH07
CisgICAgaWYgKHN0YXRlKCkuc3Ryb2tlU3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIHNldFN0cm9rZVN0eWxlKENhbnZhc1N0eWxlKGMsIG0sIHksIGssIGEp
KTsKKyAgICBzZXRTdHJva2VTdHlsZShDYW52YXNTdHlsZShjb2xvcikpOwogfQogCiB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpbGxDb2xvcihjb25zdCBTdHJpbmcmIGNv
bG9yLCBPcHRpb25hbDxmbG9hdD4gYWxwaGEpCkBAIC05NTAsMjMgKzk1MywyNiBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldEZpCiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEp
CiB7Ci0gICAgaWYgKHN0YXRlKCkuZmlsbFN0eWxlLmlzVmFsaWQoKSAmJiBzdGF0ZSgpLmZpbGxT
dHlsZS5pc0VxdWl2YWxlbnRSR0JBKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2ZWwsIGFs
cGhhKSkKKyAgICBhdXRvIGNvbG9yID0gU1JHQkEgeyBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3Jh
eUxldmVsLCBhbHBoYSB9OworICAgIGlmIChzdGF0ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxlbnQo
Y29sb3IpKQogICAgICAgICByZXR1cm47Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlKGdy
YXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRGaWxsU3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRGaWxsQ29sb3IoZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUoKS5maWxs
U3R5bGUuaXNWYWxpZCgpICYmIHN0YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudFJHQkEociwg
ZywgYiwgYSkpCisgICAgYXV0byBjb2xvciA9IFNSR0JBIHsgciwgZywgYiwgYSB9OworICAgIGlm
IChzdGF0ZSgpLmZpbGxTdHlsZS5pc0VxdWl2YWxlbnQoY29sb3IpKQogICAgICAgICByZXR1cm47
Ci0gICAgc2V0RmlsbFN0eWxlKENhbnZhc1N0eWxlKHIsIGcsIGIsIGEpKTsKKyAgICBzZXRGaWxs
U3R5bGUoQ2FudmFzU3R5bGUoY29sb3IpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpzZXRGaWxsQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQg
aywgZmxvYXQgYSkKIHsKLSAgICBpZiAoc3RhdGUoKS5maWxsU3R5bGUuaXNWYWxpZCgpICYmIHN0
YXRlKCkuZmlsbFN0eWxlLmlzRXF1aXZhbGVudENNWUtBKGMsIG0sIHksIGssIGEpKQorICAgIGF1
dG8gY29sb3IgPSBDTVlLQSB7IGMsIG0sIHksIGssIGEgfTsKKyAgICBpZiAoc3RhdGUoKS5maWxs
U3R5bGUuaXNFcXVpdmFsZW50KGNvbG9yKSkKICAgICAgICAgcmV0dXJuOwotICAgIHNldEZpbGxT
dHlsZShDYW52YXNTdHlsZShjLCBtLCB5LCBrLCBhKSk7CisgICAgc2V0RmlsbFN0eWxlKENhbnZh
c1N0eWxlKGNvbG9yKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
YmVnaW5QYXRoKCkKQEAgLTEzMDcsMTcgKzEzMTMsMTcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzZXRTaAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnNldFNoYWRvdyhmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCBn
cmF5TGV2ZWwsIGZsb2F0IGFscGhhKQogewotICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgs
IGhlaWdodCksIGJsdXIsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5
TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRo
LCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBncmF5TGV2ZWwsIGdyYXlM
ZXZlbCwgZ3JheUxldmVsLCBhbHBoYSB9KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJs
dXIsIGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cyhyLCBnLCBiLCBhKSk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwg
Ymx1ciwgbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgciwgZywgYiwgYSB9KSk7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGss
IGZsb2F0IGEpCiB7Ci0gICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICBzZXRTaGFk
b3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVyLCBtYWtlU2ltcGxlQ29sb3IodG9TUkdC
QShDTVlLQSB7IGMsIG0sIHksIGssIGEgfSkpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpjbGVhclNoYWRvdygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzU3R5bGUuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyLDE4ICs5
MiwxMyBAQCBDYW52YXNTdHlsZTo6Q2FudmFzU3R5bGUoQ29sb3IgY29sb3IpCiB7CiB9CiAKLUNh
bnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9hdCBncmF5TGV2ZWwsIGZsb2F0IGFscGhhKQotICAg
IDogbV9zdHlsZShtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxldmVs
LCBncmF5TGV2ZWwsIGFscGhhKSkKK0NhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShjb25zdCBTUkdC
QTxmbG9hdD4mIGNvbG9yQ29tcG9uZW50cykKKyAgICA6IG1fc3R5bGUobWFrZVNpbXBsZUNvbG9y
KGNvbG9yQ29tcG9uZW50cykpCiB7CiB9CiAKLUNhbnZhc1N0eWxlOjpDYW52YXNTdHlsZShmbG9h
dCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotICAgIDogbV9zdHlsZShtYWtlU2ltcGxl
Q29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpKQotewotfQotCi1DYW52YXNTdHlsZTo6Q2FudmFz
U3R5bGUoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLSAgICA6
IG1fc3R5bGUoQ01ZS0FDb2xvciB7IG1ha2VTaW1wbGVDb2xvckZyb21DTVlLQShjLCBtLCB5LCBr
LCBhKSwgYywgbSwgeSwgaywgYSB9KQorQ2FudmFzU3R5bGU6OkNhbnZhc1N0eWxlKGNvbnN0IENN
WUtBPGZsb2F0PiYgY29sb3JDb21wb25lbnRzKQorICAgIDogbV9zdHlsZShDTVlLQUNvbG9yIHsg
bWFrZVNpbXBsZUNvbG9yKHRvU1JHQkEoY29sb3JDb21wb25lbnRzKSksIGNvbG9yQ29tcG9uZW50
cyB9KQogewogfQogCkBAIC0xNTEsMjcgKzE0NiwyMCBAQCBib29sIENhbnZhc1N0eWxlOjppc0Vx
dWl2YWxlbnRDb2xvcihjb25zCiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+
KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG90aGVyLm1fc3R5bGUp
KQogICAgICAgICByZXR1cm4gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpID09IFdURjo6Z2V0PENv
bG9yPihvdGhlci5tX3N0eWxlKTsKIAotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENN
WUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4o
b3RoZXIubV9zdHlsZSkpIHsKLSAgICAgICAgYXV0byYgYSA9IFdURjo6Z2V0PENNWUtBQ29sb3I+
KG1fc3R5bGUpOwotICAgICAgICBhdXRvJiBiID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4ob3RoZXIu
bV9zdHlsZSk7Ci0gICAgICAgIHJldHVybiBhLmMgPT0gYi5jICYmIGEubSA9PSBiLm0gJiYgYS55
ID09IGIueSAmJiBhLmsgPT0gYi5rICYmIGEuYSA9PSBiLmE7Ci0gICAgfQorICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPENNWUtBQ29sb3I+KG1fc3R5bGUpICYmIFdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8Q01ZS0FDb2xvcj4ob3RoZXIubV9zdHlsZSkpCisgICAgICAgIHJldHVybiBXVEY6
OmdldDxDTVlLQUNvbG9yPihtX3N0eWxlKS5jb21wb25lbnRzID09IFdURjo6Z2V0PENNWUtBQ29s
b3I+KG90aGVyLm1fc3R5bGUpLmNvbXBvbmVudHM7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudFJHQkEoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSkgY29uc3QKK2Jvb2wgQ2FudmFzU3R5bGU6OmlzRXF1aXZhbGVudChjb25z
dCBTUkdCQTxmbG9hdD4mIGNvbXBvbmVudHMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8Q29sb3I+KG1fc3R5bGUpICYmIFdURjo6Z2V0PENvbG9yPihtX3N0eWxl
KSA9PSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHIsIGcsIGIsIGEpOworICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPENvbG9yPihtX3N0eWxlKSAmJiBXVEY6OmdldDxDb2xvcj4o
bV9zdHlsZSkgPT0gbWFrZVNpbXBsZUNvbG9yKGNvbXBvbmVudHMpOwogfQogCi1ib29sIENhbnZh
c1N0eWxlOjppc0VxdWl2YWxlbnRDTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKSBjb25zdAorYm9vbCBDYW52YXNTdHlsZTo6aXNFcXVpdmFsZW50KGNvbnN0
IENNWUtBPGZsb2F0PiYgY29tcG9uZW50cykgY29uc3QKIHsKLSAgICBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8mIGNoYW5uZWxzID0gV1RGOjpnZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSk7Ci0g
ICAgcmV0dXJuIGMgPT0gY2hhbm5lbHMuYyAmJiBtID09IGNoYW5uZWxzLm0gJiYgeSA9PSBjaGFu
bmVscy55ICYmIGsgPT0gY2hhbm5lbHMuayAmJiBhID09IGNoYW5uZWxzLmE7CisgICAgcmV0dXJu
IFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8Q01ZS0FDb2xvcj4obV9zdHlsZSkgJiYgV1RGOjpnZXQ8
Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29tcG9uZW50cyA9PSBjb21wb25lbnRzOwogfQogCiB2b2lk
IENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkg
Y29uc3QKQEAgLTE4NCw5ICsxNzIsOSBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNv
bG9yKEdyYXBoCiAgICAgICAgICAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3Jt
LWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCiAgICAgICAgICAgICAvLyBXZSdsbCBu
ZWVkIGEgZmFuY2llciBDb2xvciBhYnN0cmFjdGlvbiB0byBzdXBwb3J0IENNWUtBIGNvcnJlY3Rs
eQogI2lmIFVTRShDRykKLSAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtTdHJva2VDb2xvcihj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBjb2xvci5jLCBjb2xvci5tLCBjb2xvci55LCBjb2xv
ci5rLCBjb2xvci5hKTsKKyAgICAgICAgICAgIENHQ29udGV4dFNldENNWUtTdHJva2VDb2xvcihj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBjb2xvci5jb21wb25lbnRzLmN5YW4sIGNvbG9yLmNv
bXBvbmVudHMubWFnZW50YSwgY29sb3IuY29tcG9uZW50cy55ZWxsb3csIGNvbG9yLmNvbXBvbmVu
dHMuYmxhY2ssIGNvbG9yLmNvbXBvbmVudHMuYWxwaGEpOwogI2Vsc2UKLSAgICAgICAgICAgIGNv
bnRleHQuc2V0U3Ryb2tlQ29sb3IoY29sb3IuY29sb3IpOworICAgICAgICAgICAgY29udGV4dC5z
ZXRTdHJva2VDb2xvcihjb2xvci5jb2xvckNvbnZlcnRlZFRvU1JHQkEpOwogI2VuZGlmCiAgICAg
ICAgIH0sCiAgICAgICAgIFsmY29udGV4dF0gKGNvbnN0IFJlZlB0cjxDYW52YXNHcmFkaWVudD4m
IGdyYWRpZW50KSB7CkBAIC0yMTQsOSArMjAyLDkgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlG
aWxsQ29sb3IoR3JhcGhpYwogICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgdGhyb3VnaCBw
bGF0Zm9ybS1pbmRlcGVuZGVudCBHcmFwaGljc0NvbnRleHQgQVBJLgogICAgICAgICAgICAgLy8g
V2UnbGwgbmVlZCBhIGZhbmNpZXIgQ29sb3IgYWJzdHJhY3Rpb24gdG8gc3VwcG9ydCBDTVlLQSBj
b3JyZWN0bHkKICNpZiBVU0UoQ0cpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRDTVlLRmlsbENv
bG9yKGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGNvbG9yLmMsIGNvbG9yLm0sIGNvbG9yLnks
IGNvbG9yLmssIGNvbG9yLmEpOworICAgICAgICAgICAgQ0dDb250ZXh0U2V0Q01ZS0ZpbGxDb2xv
cihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBjb2xvci5jb21wb25lbnRzLmN5YW4sIGNvbG9y
LmNvbXBvbmVudHMubWFnZW50YSwgY29sb3IuY29tcG9uZW50cy55ZWxsb3csIGNvbG9yLmNvbXBv
bmVudHMuYmxhY2ssIGNvbG9yLmNvbXBvbmVudHMuYWxwaGEpOwogI2Vsc2UKLSAgICAgICAgICAg
IGNvbnRleHQuc2V0RmlsbENvbG9yKGNvbG9yLmNvbG9yKTsKKyAgICAgICAgICAgIGNvbnRleHQu
c2V0RmlsbENvbG9yKGNvbG9yLmNvbG9yQ29udmVydGVkVG9TUkdCQSk7CiAjZW5kaWYKICAgICAg
ICAgfSwKICAgICAgICAgWyZjb250ZXh0XSAoY29uc3QgUmVmUHRyPENhbnZhc0dyYWRpZW50PiYg
Z3JhZGllbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1N0eWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUu
aAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
U3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsOCBAQCBjbGFzcyBDYW52YXNTdHls
ZSB7CiBwdWJsaWM6CiAgICAgQ2FudmFzU3R5bGUoKTsKICAgICBDYW52YXNTdHlsZShDb2xvcik7
Ci0gICAgQ2FudmFzU3R5bGUoZmxvYXQgZ3JheUxldmVsLCBmbG9hdCBhbHBoYSk7Ci0gICAgQ2Fu
dmFzU3R5bGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYWxwaGEpOwotICAgIENh
bnZhc1N0eWxlKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGFscGhh
KTsKKyAgICBDYW52YXNTdHlsZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKKyAgICBDYW52YXNTdHls
ZShjb25zdCBDTVlLQTxmbG9hdD4mKTsKICAgICBDYW52YXNTdHlsZShDYW52YXNHcmFkaWVudCYp
OwogICAgIENhbnZhc1N0eWxlKENhbnZhc1BhdHRlcm4mKTsKIApAQCAtNTMsNyArNTIsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8SW52YWxpZD4obV9zdHlsZSk7IH0KICAgICBib29sIGlzQ3VycmVudENvbG9yKCkg
Y29uc3QgeyByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDdXJyZW50Q29sb3I+KG1fc3R5
bGUpOyB9CiAgICAgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEoKSBjb25zdCB7IHJldHVy
biBXVEY6OmdldDxDdXJyZW50Q29sb3I+KG1fc3R5bGUpLm92ZXJyaWRlQWxwaGE7IH0KLSAgICAK
IAogICAgIFN0cmluZyBjb2xvcigpIGNvbnN0OwogICAgIFJlZlB0cjxDYW52YXNHcmFkaWVudD4g
Y2FudmFzR3JhZGllbnQoKSBjb25zdDsKQEAgLTYzLDIxICs2MSwxNSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhcHBseVN0cm9rZUNvbG9yKEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwogCiAgICAgYm9v
bCBpc0VxdWl2YWxlbnRDb2xvcihjb25zdCBDYW52YXNTdHlsZSYpIGNvbnN0OwotICAgIGJvb2wg
aXNFcXVpdmFsZW50UkdCQShmbG9hdCByZWQsIGZsb2F0IGdyZWVuLCBmbG9hdCBibHVlLCBmbG9h
dCBhbHBoYSkgY29uc3Q7Ci0gICAgYm9vbCBpc0VxdWl2YWxlbnRDTVlLQShmbG9hdCBjeWFuLCBm
bG9hdCBtYWdlbnRhLCBmbG9hdCB5ZWxsb3csIGZsb2F0IGJsYWNrLCBmbG9hdCBhbHBoYSkgY29u
c3Q7CisgICAgYm9vbCBpc0VxdWl2YWxlbnQoY29uc3QgU1JHQkE8ZmxvYXQ+JikgY29uc3Q7Cisg
ICAgYm9vbCBpc0VxdWl2YWxlbnQoY29uc3QgQ01ZS0E8ZmxvYXQ+JikgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgc3RydWN0IEludmFsaWQgeyB9OwogCiAgICAgc3RydWN0IENNWUtBQ29sb3Igewot
ICAgICAgICBDb2xvciBjb2xvcjsKLSAgICAgICAgZmxvYXQgYyB7IDAgfTsKLSAgICAgICAgZmxv
YXQgbSB7IDAgfTsKLSAgICAgICAgZmxvYXQgeSB7IDAgfTsKLSAgICAgICAgZmxvYXQgayB7IDAg
fTsKLSAgICAgICAgZmxvYXQgYSB7IDAgfTsKLQotICAgICAgICBDTVlLQUNvbG9yKGNvbnN0IENN
WUtBQ29sb3ImKSA9IGRlZmF1bHQ7CisgICAgICAgIENvbG9yIGNvbG9yQ29udmVydGVkVG9TUkdC
QTsKKyAgICAgICAgQ01ZS0E8ZmxvYXQ+IGNvbXBvbmVudHM7CiAgICAgfTsKIAogICAgIHN0cnVj
dCBDdXJyZW50Q29sb3IgewpAQCAtMTE2LDcgKzEwOCw3IEBAIGlubGluZSBSZWZQdHI8Q2FudmFz
UGF0dGVybj4gQ2FudmFzU3R5bGUKIAogaW5saW5lIFN0cmluZyBDYW52YXNTdHlsZTo6Y29sb3Io
KSBjb25zdAogewotICAgIGF1dG8mIGNvbG9yID0gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDb2xv
cj4obV9zdHlsZSkgPyBXVEY6OmdldDxDb2xvcj4obV9zdHlsZSkgOiBXVEY6OmdldDxDTVlLQUNv
bG9yPihtX3N0eWxlKS5jb2xvcjsKKyAgICBhdXRvJiBjb2xvciA9IFdURjo6aG9sZHNfYWx0ZXJu
YXRpdmU8Q29sb3I+KG1fc3R5bGUpID8gV1RGOjpnZXQ8Q29sb3I+KG1fc3R5bGUpIDogV1RGOjpn
ZXQ8Q01ZS0FDb2xvcj4obV9zdHlsZSkuY29sb3JDb252ZXJ0ZWRUb1NSR0JBOwogICAgIHJldHVy
biBjb2xvci5zZXJpYWxpemVkKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVi
dWdQYWdlT3ZlcmxheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRGVi
dWdQYWdlT3ZlcmxheXMuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL0RlYnVnUGFnZU92ZXJsYXlzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgTW91c2VXaGVlbFJlZ2lvbk92ZXJs
YXkoUGFnZSYgcGFnZSkKLSAgICAgICAgOiBSZWdpb25PdmVybGF5KHBhZ2UsIG1ha2VTaW1wbGVD
b2xvckZyb21GbG9hdHMoMC41ZiwgMC4wZiwgMC4wZiwgMC40ZikpCisgICAgICAgIDogUmVnaW9u
T3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3IoMTI4LCAwLCAwLCAxMDIpKQogICAgIHsKICAg
ICB9CiAKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZXhwbGlj
aXQgTm9uRmFzdFNjcm9sbGFibGVSZWdpb25PdmVybGF5KFBhZ2UmIHBhZ2UpCi0gICAgICAgIDog
UmVnaW9uT3ZlcmxheShwYWdlLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYsIDAuNWYs
IDAuMGYsIDAuNGYpKQorICAgICAgICA6IFJlZ2lvbk92ZXJsYXkocGFnZSwgbWFrZVNpbXBsZUNv
bG9yKDI1NSwgMTI4LCAwLCAxMDIpKQogICAgIHsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvbGludXgvUmVzb3VyY2VVc2FnZU92ZXJsYXlMaW51eC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJjZVVzYWdlT3ZlcmxheUxpbnV4LmNw
cAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9saW51eC9SZXNvdXJj
ZVVzYWdlT3ZlcmxheUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsOCArODgsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgcGFpbnRDb250ZW50cyhjb25zdCBHcmFwaGljc0xheWVyKiwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXAsIEdyYXBoaWNzTGF5
ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZQogICAgIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOwotICAgICAgICBjb250ZXh0LmZpbGxSZWN0
KGNsaXAsIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgMC44Zikp
OwotICAgICAgICBjb250ZXh0LnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KDAuOWYsIDAuOWYsIDAuOWYsIDEuZikpOworICAgICAgICBjb250ZXh0LmZpbGxSZWN0KGNsaXAs
IG1ha2VTaW1wbGVDb2xvcigwLCAwLCAwLCAyMDQpKTsKKyAgICAgICAgY29udGV4dC5zZXRGaWxs
Q29sb3IobWFrZVNpbXBsZUNvbG9yKDIzMCwgMjMwLCAyMzAsIDI1NSkpOwogCiAgICAgICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSB7IDEwLCAyMCB9OwogICAgICAgICBTdHJpbmcgc3RyaW5nID0g
ICJDUFU6ICIgKyBjcHVVc2FnZVN0cmluZyhnRGF0YS5jcHUpOwpAQCAtMTM3LDcgKzEzNyw3IEBA
IHZvaWQgUmVzb3VyY2VVc2FnZU92ZXJsYXk6OnBsYXRmb3JtSW5pdGkKICAgICBtX3BhaW50TGF5
ZXIgPSBHcmFwaGljc0xheWVyOjpjcmVhdGUob3ZlcmxheSgpLnBhZ2UoKS0+Y2hyb21lKCkuY2xp
ZW50KCkuZ3JhcGhpY3NMYXllckZhY3RvcnkoKSwgKm1fb3ZlcmxheVBhaW50ZXIpOwogICAgIG1f
cGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOwogICAgIG1fcGFpbnRM
YXllci0+c2V0U2l6ZSh7IG5vcm1hbFdpZHRoLCBub3JtYWxIZWlnaHQgfSk7Ci0gICAgbV9wYWlu
dExheWVyLT5zZXRCYWNrZ3JvdW5kQ29sb3IobWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBm
LCAwLjBmLCAwLjBmLCAwLjhmKSk7CisgICAgbV9wYWludExheWVyLT5zZXRCYWNrZ3JvdW5kQ29s
b3IobWFrZVNpbXBsZUNvbG9yKDAsIDAsIDAsIDIwNCkpOwogICAgIG1fcGFpbnRMYXllci0+c2V0
RHJhd3NDb250ZW50KHRydWUpOwogICAgIG92ZXJsYXkoKS5sYXllcigpLmFkZENoaWxkKCptX3Bh
aW50TGF5ZXIpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBDb2xvciBD
b2xvcjo6bGlnaHRlbmVkKCkgY29uc3QKIAogICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1p
bigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICogZywgbXVsdGlwbGllciAqIGIsIGEp
OworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBtdWx0aXBsaWVyICogciwgbXVs
dGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwogfQogCiBDb2xvciBDb2xvcjo6ZGFy
a2VuZWQoKSBjb25zdApAQCAtMTI4LDcgKzEyOCw3IEBAIENvbG9yIENvbG9yOjpkYXJrZW5lZCgp
IGNvbnN0CiAgICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKICAgICBmbG9hdCBt
dWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsKIAotICAgIHJldHVy
biBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKG11bHRpcGxpZXIgKiByLCBtdWx0aXBsaWVyICog
ZywgbXVsdGlwbGllciAqIGIsIGEpOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEg
eyBtdWx0aXBsaWVyICogciwgbXVsdGlwbGllciAqIGcsIG11bHRpcGxpZXIgKiBiLCBhIH0pOwog
fQogCiBib29sIENvbG9yOjppc0RhcmsoKSBjb25zdApAQCAtMTQ3LDcgKzE0Nyw4IEBAIGZsb2F0
IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAogCiBmbG9hdCBDb2xvcjo6bHVtaW5hbmNlKCkgY29u
c3QKIHsKLSAgICAvLyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lvbiB0
byBzUkdCIGJ5IGhhdmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zIGZvciBsdW1pbmFuY2Ug
KGUuZy4gY29udmVydFRvWFlaKGMpLnlDb21wb25lbnQoKSkuCisgICAgLy8gRklYTUU6IFRoaXMg
Y2FuIHByb2JhYmx5IGF2b2lkIGNvbnZlcnNpb24gdG8gc1JHQiBieSBoYXZpbmcgcGVyLWNvbG9y
c3BhY2UgYWxnb3JpdGhtcworICAgIC8vIGZvciBsdW1pbmFuY2UgKGUuZy4gY29udmVydFRvWFla
KGMpLnlDb21wb25lbnQoKSkuCiAgICAgcmV0dXJuIFdlYkNvcmU6Omx1bWluYW5jZSh0b1NSR0JB
TG9zc3koKSk7CiB9CiAKQEAgLTI5MCw3ICsyOTEsNyBAQCBDb2xvciBibGVuZFdpdGhvdXRQcmVt
dWx0aXBseShjb25zdCBDb2xvCiAgICAgYXV0byBmcm9tU1JHQiA9IGZyb20udG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKICAgICBhdXRvIHRvU1JHQiA9IGZyb20udG9TUkdCQVNpbXBsZUNvbG9y
TG9zc3koKTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKAorICAgIHJl
dHVybiBtYWtlU2ltcGxlQ29sb3IoCiAgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLnJl
ZENvbXBvbmVudCgpLCB0b1NSR0IucmVkQ29tcG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAg
V2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuZ3JlZW5Db21wb25lbnQoKSwgdG9TUkdCLmdyZWVuQ29t
cG9uZW50KCksIHByb2dyZXNzKSwKICAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYmx1
ZUNvbXBvbmVudCgpLCB0b1NSR0IuYmx1ZUNvbXBvbmVudCgpLCBwcm9ncmVzcyksCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JUeXBlcy5oCShyZXZpc2lv
biAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclR5cGVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IFNSR0JBIHsKICAgICBUIGFscGhhOwogfTsKIAordGVtcGxhdGU8dHlwZW5hbWUgVD4g
U1JHQkEoVCwgVCwgVCwgVCkgLT4gU1JHQkE8VD47CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBvbmVudHMoY29uc3QgU1JHQkE8
VD4mIGMpCiB7CiAgICAgcmV0dXJuIHsgYy5yZWQsIGMuZ3JlZW4sIGMuYmx1ZSwgYy5hbHBoYSB9
OwpAQCAtNDYsNiArNDgsMTYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIFNSR0JB
PFQ+IAogICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTUkdCQTxUPiYg
YSwgY29uc3QgU1JHQkE8VD4mIGIpCit7CisgICAgcmV0dXJuIGFzQ29sb3JDb21wb25lbnRzKGEp
ID09IGFzQ29sb3JDb21wb25lbnRzKGIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25z
dGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFNSR0JBPFQ+JiBhLCBjb25zdCBTUkdCQTxUPiYg
YikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hOb25BbHBoYUNvbXBvbmVudChTUkdCQTxUPiYg
Y29sb3IsIEZ1bmN0b3ImJiBmKQogewogICAgIGNvbG9yLnJlZCA9IGYoY29sb3IucmVkKTsKQEAg
LTUzLDYgKzY1LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgRnVuY3Rvcj4gdgog
ICAgIGNvbG9yLmJsdWUgPSBmKGNvbG9yLmJsdWUpOwogfQogCisKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBMaW5lYXJTUkdCQSB7CiAgICAgVCByZWQ7CiAgICAgVCBncmVlbjsKQEAgLTYw
LDYgKzczLDggQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IExpbmVhclNSR0JBIAogICAg
IFQgYWxwaGE7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBMaW5lYXJTUkdCQShULCBULCBU
LCBUKSAtPiBMaW5lYXJTUkdCQTxUPjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHBy
IENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBMaW5lYXJTUkdCQTxU
PiYgYykKIHsKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07
CkBAIC03MCw2ICs4NSwxNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgTGluZWFy
U1JHCiAgICAgcmV0dXJuIHsgY1swXSwgY1sxXSwgY1syXSwgY1szXSB9OwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExpbmVhclNSR0JB
PFQ+JiBhLCBjb25zdCBMaW5lYXJTUkdCQTxUPiYgYikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNv
bXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgTGluZWFyU1JHQkE8VD4mIGEs
IGNvbnN0IExpbmVhclNSR0JBPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisK
KwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERpc3BsYXlQMyB7CiAgICAgVCByZWQ7CiAg
ICAgVCBncmVlbjsKQEAgLTc3LDYgKzEwMyw4IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEaXNwbGF5UDMgewogICAgIFQgYWxwaGE7CiB9OwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBE
aXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gRGlzcGxheVAzPFQ+OworCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0
IERpc3BsYXlQMzxUPiYgYykKIHsKICAgICByZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVl
LCBjLmFscGhhIH07CkBAIC04Nyw2ICsxMTUsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29u
c3RleHByIERpc3BsYXlQMwogICAgIHJldHVybiB7IGNbMF0sIGNbMV0sIGNbMl0sIGNbM10gfTsK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3RleHByIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBEaXNwbGF5UDM8VD4mIGEsIGNvbnN0IERpc3BsYXlQMzxUPiYgYikKK3sKKyAgICByZXR1cm4g
YXNDb2xvckNvbXBvbmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgRGlzcGxheVAz
PFQ+JiBhLCBjb25zdCBEaXNwbGF5UDM8VD4mIGIpCit7CisgICAgcmV0dXJuICEoYSA9PSBiKTsK
K30KKworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgTGluZWFyRGlzcGxheVAzIHsKICAg
ICBUIHJlZDsKICAgICBUIGdyZWVuOwpAQCAtOTQsNiArMTMzLDggQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IExpbmVhckRpc3BsYQogICAgIFQgYWxwaGE7CiB9OwogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBMaW5lYXJEaXNwbGF5UDMoVCwgVCwgVCwgVCkgLT4gTGluZWFyRGlzcGxheVAz
PFQ+OworCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjb25zdGV4cHIgQ29sb3JDb21wb25lbnRzPFQ+
IGFzQ29sb3JDb21wb25lbnRzKGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYykKIHsKICAgICBy
ZXR1cm4geyBjLnJlZCwgYy5ncmVlbiwgYy5ibHVlLCBjLmFscGhhIH07CkBAIC0xMDQsNiArMTQ1
LDE3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBMaW5lYXJEaXMKICAgICByZXR1
cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBhLCBj
b25zdCBMaW5lYXJEaXNwbGF5UDM8VD4mIGIpCit7CisgICAgcmV0dXJuIGFzQ29sb3JDb21wb25l
bnRzKGEpID09IGFzQ29sb3JDb21wb25lbnRzKGIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvciE9KGNvbnN0IExpbmVhckRpc3BsYXlQMzxUPiYgYSwg
Y29uc3QgTGluZWFyRGlzcGxheVAzPFQ+JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9
CisKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhTTEEgewogICAgIFQgaHVlOwogICAg
IFQgc2F0dXJhdGlvbjsKQEAgLTExMSw2ICsxNjMsOCBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgSFNMQSB7CiAgICAgVCBhbHBoYTsKIH07CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IEhT
TEEoVCwgVCwgVCwgVCkgLT4gSFNMQTxUPjsKKwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gY29uc3Rl
eHByIENvbG9yQ29tcG9uZW50czxUPiBhc0NvbG9yQ29tcG9uZW50cyhjb25zdCBIU0xBPFQ+JiBj
KQogewogICAgIHJldHVybiB7IGMuaHVlLCBjLnNhdHVyYXRpb24sIGMubGlnaHRuZXNzLCBjLmFs
cGhhIH07CkBAIC0xMjEsNiArMTc1LDM5IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhw
ciBIU0xBPFQ+IGEKICAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3QgSFNM
QTxUPiYgYSwgY29uc3QgSFNMQTxUPiYgYikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBvbmVu
dHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgSFNMQTxUPiYgYSwgY29uc3QgSFNMQTxU
PiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCisKKy8vIEZJWE1FOiBXaGVuIENv
bG9yQ29tcG9uZW50cyBzdXBwb3J0cyBtb3JlIHRoYW4gbGVuZ3RoID09IDQsIGFkZCBjb252ZXJz
aW9uIHRvL2Zyb20gQ29sb3JDb21wb25lbnRzPFQ+IGZvciBDTVlLQQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IENNWUtBIHsKKyAgICBUIGN5YW47CisgICAgVCBtYWdlbnRhOworICAgIFQg
eWVsbG93OworICAgIFQgYmxhY2s7CisgICAgVCBhbHBoYTsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IENNWUtBKFQsIFQsIFQsIFQsIFQpIC0+IENNWUtBPFQ+OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBjb25zdGV4cHIgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENNWUtBPFQ+JiBhLCBjb25z
dCBDTVlLQTxUPiYgYikKK3sKKyAgICByZXR1cm4gYS5jeWFuID09IGIuY3lhbiAmJiBhLm1hZ2Vu
dGEgPT0gYi5tYWdlbnRhICYmIGEueWVsbG93ID09IGIueWVsbG93ICYmIGEuYmxhY2sgPT0gYi5i
bGFjayAmJiBhLmFscGhhID09IGIuYWxwaGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNv
bnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgQ01ZS0E8VD4mIGEsIGNvbnN0IENNWUtBPFQ+
JiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKKwogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IFhZWkEgewogICAgIFQgeDsKICAgICBUIHk7CkBAIC0xMjgsNiArMjE1LDggQEAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IFhZWkEgewogICAgIFQgYWxwaGE7CiB9OwogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBYWVpBKFQsIFQsIFQsIFQpIC0+IFhZWkE8VD47CisKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBDb2xvckNvbXBvbmVudHM8VD4gYXNDb2xvckNvbXBv
bmVudHMoY29uc3QgWFlaQTxUPiYgYykKIHsKICAgICByZXR1cm4geyBjLngsIGMueSwgYy56LCBj
LmFscGhhIH07CkBAIC0xMzgsNCArMjI3LDE0IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0
ZXhwciBYWVpBPFQ+IGEKICAgICByZXR1cm4geyBjWzBdLCBjWzFdLCBjWzJdLCBjWzNdIH07CiB9
CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yPT0oY29uc3Qg
WFlaQTxUPiYgYSwgY29uc3QgWFlaQTxUPiYgYikKK3sKKyAgICByZXR1cm4gYXNDb2xvckNvbXBv
bmVudHMoYSkgPT0gYXNDb2xvckNvbXBvbmVudHMoYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGNvbnN0ZXhwciBib29sIG9wZXJhdG9yIT0oY29uc3QgWFlaQTxUPiYgYSwgY29uc3QgWFla
QTxUPiYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JVdGlsaXRpZXMuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
OSw2ICsyNTksMTYgQEAgU1JHQkE8ZmxvYXQ+IHRvU1JHQkEoY29uc3QgSFNMQTxmbG9hdD4mIAog
ICAgIH07CiB9CiAKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtBPGZsb2F0PiYgY29s
b3IpCit7CisgICAgYXV0byBbYywgbSwgeSwgaywgYV0gPSBjb2xvcjsKKyAgICBmbG9hdCBjb2xv
cnMgPSAxIC0gazsKKyAgICBmbG9hdCByID0gY29sb3JzICogKDEuMGYgLSBjKTsKKyAgICBmbG9h
dCBnID0gY29sb3JzICogKDEuMGYgLSBtKTsKKyAgICBmbG9hdCBiID0gY29sb3JzICogKDEuMGYg
LSB5KTsKKyAgICByZXR1cm4geyByLCBnLCBiLCBhIH07Cit9CisKIFNSR0JBPGZsb2F0PiBwcmVt
dWx0aXBsaWVkKGNvbnN0IFNSR0JBPGZsb2F0PiYgY29sb3IpCiB7CiAgICAgYXV0byBbciwgZywg
YiwgYV0gPSBjb2xvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
PiBzdHJ1Y3QgQ01ZS0E7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERpc3BsYXlQMzsKIHRl
bXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSFNMQTsKIHRlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3Qg
TGluZWFyRGlzcGxheVAzOwpAQCAtNTIsMjEgKzUzLDIzIEBAIERpc3BsYXlQMzxmbG9hdD4gdG9E
aXNwbGF5UDMoY29uc3QgU1JHQkEKIFdFQkNPUkVfRVhQT1JUIEhTTEE8ZmxvYXQ+IHRvSFNMQShj
b25zdCBTUkdCQTxmbG9hdD4mKTsKIFdFQkNPUkVfRVhQT1JUIFNSR0JBPGZsb2F0PiB0b1NSR0JB
KGNvbnN0IEhTTEE8ZmxvYXQ+Jik7CiAKK1NSR0JBPGZsb2F0PiB0b1NSR0JBKGNvbnN0IENNWUtB
PGZsb2F0PiYpOworCisKIGZsb2F0IGxpZ2h0bmVzcyhjb25zdCBTUkdCQTxmbG9hdD4mKTsKIGZs
b2F0IGx1bWluYW5jZShjb25zdCBTUkdCQTxmbG9hdD4mKTsKLQogZmxvYXQgY29udHJhc3RSYXRp
byhjb25zdCBTUkdCQTxmbG9hdD4mLCBjb25zdCBTUkdCQTxmbG9hdD4mKTsKIAogU1JHQkE8Zmxv
YXQ+IHByZW11bHRpcGxpZWQoY29uc3QgU1JHQkE8ZmxvYXQ+Jik7CiAKIGlubGluZSB1aW50OF90
IGNvbnZlcnRQcmVzY2FsZWRUb0NvbXBvbmVudEJ5dGUoZmxvYXQgZikKIHsKLSAgICByZXR1cm4g
c3RkOjpjbGFtcChzdGF0aWNfY2FzdDxpbnQ+KHN0ZDo6bHJvdW5kZihmKSksIDAsIDI1NSk7Cisg
ICAgcmV0dXJuIHN0ZDo6Y2xhbXAoc3RkOjpscm91bmQoZiksIDBsLCAyNTVsKTsKIH0KIAogaW5s
aW5lIHVpbnQ4X3QgY29udmVydFRvQ29tcG9uZW50Qnl0ZShmbG9hdCBmKQogewotICAgIHJldHVy
biBzdGQ6OmNsYW1wKHN0YXRpY19jYXN0PGludD4oc3RkOjpscm91bmRmKGYgKiAyNTUuMGYpKSwg
MCwgMjU1KTsKKyAgICByZXR1cm4gc3RkOjpjbGFtcChzdGQ6Omxyb3VuZChmICogMjU1LjBmKSwg
MGwsIDI1NWwpOwogfQogCiBjb25zdGV4cHIgZmxvYXQgY29udmVydFRvQ29tcG9uZW50RmxvYXQo
dWludDhfdCBieXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miwx
NSArNjIsNiBAQCBTaW1wbGVDb2xvciB1bnByZW11bHRpcGx5KFNpbXBsZUNvbG9yIGNvCiAgICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvcih1bnByZW11bHRpcGx5Q2hhbm5lbChyLCBhKSwgdW5wcmVt
dWx0aXBseUNoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbHlDaGFubmVsKGIsIGEpLCBhKTsKIH0K
IAotU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IG0s
IGZsb2F0IHksIGZsb2F0IGssIGZsb2F0IGEpCi17Ci0gICAgZmxvYXQgY29sb3JzID0gMSAtIGs7
Ci0gICAgZmxvYXQgciA9IGNvbG9ycyAqICgxLjBmIC0gYyk7Ci0gICAgZmxvYXQgZyA9IGNvbG9y
cyAqICgxLjBmIC0gbSk7Ci0gICAgZmxvYXQgYiA9IGNvbG9ycyAqICgxLjBmIC0geSk7Ci0gICAg
cmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMociwgZywgYiwgYSk7Ci19Ci0KIFN0cmlu
ZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBjb25zdAogewogICAgIGlmIChp
c09wYXF1ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxl
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5oCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMCArOTEsOCBA
QCBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yCiAKIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYik7CiBjb25zdGV4
cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBh
KTsKLQotU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IENvbG9yQ29tcG9uZW50czxm
bG9hdD4mIHNSR0JDb21wb25lbnRzKTsKLVNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1TaW1wbGVDb2xvciBt
YWtlU2ltcGxlQ29sb3JGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQg
aywgZmxvYXQgYSk7Citjb25zdGV4cHIgU2ltcGxlQ29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0
IFNSR0JBPHVpbnQ4X3Q+Jik7CitTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoY29uc3QgU1JH
QkE8ZmxvYXQ+Jik7CiAKIFNpbXBsZUNvbG9yIHByZW11bHRpcGx5Rmxvb3JpbmcoU2ltcGxlQ29s
b3IpOwogU2ltcGxlQ29sb3IgcHJlbXVsdGlwbHlDZWlsaW5nKFNpbXBsZUNvbG9yKTsKQEAgLTEy
MCwxNCArMTE4LDE1IEBAIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29sb3IoaW4K
ICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDx1aW50OF90PihzdGQ6OmNsYW1wKHIsIDAsIDB4RkYp
KSwgc3RhdGljX2Nhc3Q8dWludDhfdD4oc3RkOjpjbGFtcChnLCAwLCAweEZGKSksIHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHN0ZDo6Y2xhbXAoYiwgMCwgMHhGRikpLCBzdGF0aWNfY2FzdDx1aW50OF90
PihzdGQ6OmNsYW1wKGEsIDAsIDB4RkYpKSB9OwogfQogCi1pbmxpbmUgU2ltcGxlQ29sb3IgbWFr
ZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPGZsb2F0PiYgc1JHQkEpCitjb25zdGV4cHIgU2ltcGxl
Q29sb3IgbWFrZVNpbXBsZUNvbG9yKGNvbnN0IFNSR0JBPHVpbnQ4X3Q+JiBzUkdCQSkKIHsKICAg
ICBhdXRvIFtyLCBnLCBiLCBhXSA9IHNSR0JBOwotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JG
cm9tRmxvYXRzKHIsIGcsIGIsIGEpOworICAgIHJldHVybiB7IHIsIGcsIGIsIGEgfTsKIH0KIAot
aW5saW5lIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSkKK2lubGluZSBTaW1wbGVDb2xvciBtYWtlU2ltcGxlQ29s
b3IoY29uc3QgU1JHQkE8ZmxvYXQ+JiBzUkdCQSkKIHsKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHNSR0JBOwogICAgIHJldHVybiB7IGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUociksIGNvbnZlcnRU
b0NvbXBvbmVudEJ5dGUoZyksIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYiksIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYSkgfTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9JbmJh
bmRUZXh0VHJhY2tQcml2YXRlQVZGLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0luYmFuZFRleHRUcmFja1ByaXZh
dGVBVkYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBPcHRpb25h
bDxTaW1wbGVDb2xvcj4gbWFrZVNpbXBsZUMKICAgICAgICAgY29tcG9uZW50QXJyYXlbaV0gPSBj
b21wb25lbnQ7CiAgICAgfQogCi0gICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMo
Y29tcG9uZW50QXJyYXlbMV0sIGNvbXBvbmVudEFycmF5WzJdLCBjb21wb25lbnRBcnJheVszXSwg
Y29tcG9uZW50QXJyYXlbMF0pOworICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBj
b21wb25lbnRBcnJheVsxXSwgY29tcG9uZW50QXJyYXlbMl0sIGNvbXBvbmVudEFycmF5WzNdLCBj
b21wb25lbnRBcnJheVswXSB9KTsKIH0KIAogUmVmPEluYmFuZEdlbmVyaWNDdWU+IEluYmFuZFRl
eHRUcmFja1ByaXZhdGVBVkY6OnByb2Nlc3NDdWVBdHRyaWJ1dGVzKENGQXR0cmlidXRlZFN0cmlu
Z1JlZiBhdHRyaWJ1dGVkU3RyaW5nKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAJKHJldmlzaW9uIDI2
MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQsNyArMTQ0LDcgQEAgc3RhdGljIEdyYWRp
ZW50OjpDb2xvclN0b3AgaW50ZXJwb2xhdGVDbwogICAgIGZsb2F0IGIgPSBiMSArIChiMiAtIGIx
KSAqIDAuNWY7CiAgICAgZmxvYXQgYSA9IGExICsgKGEyIC0gYTEpICogMC41ZjsKIAotICAgIHJl
dHVybiBHcmFkaWVudDo6Q29sb3JTdG9wKG9mZnNldCwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cyhyLCBnLCBiLCBhKSk7CisgICAgcmV0dXJuIEdyYWRpZW50OjpDb2xvclN0b3Aob2Zmc2V0LCBt
YWtlU2ltcGxlQ29sb3IoU1JHQkEgeyByLCBnLCBiLCBhIH0pKTsKIH0KIAogc3RhdGljIGNhaXJv
X3BhdHRlcm5fdCogY3JlYXRlQ29uaWMoZmxvYXQgeG8sIGZsb2F0IHlvLCBmbG9hdCByLCBmbG9h
dCBhbmdsZVJhZGlhbnMsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9Db2xvckNHLmNwcAkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcg
Kzc4LDcgQEAgc3RhdGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21DRwogICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gbWFrZVNpbXBsZUNv
bG9yRnJvbUZsb2F0cyhyLCBnLCBiLCBhKTsKKyAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNS
R0JBIHsgciwgZywgYiwgYSB9KTsKIH0KIAogQ29sb3I6OkNvbG9yKENHQ29sb3JSZWYgY29sb3Ip
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbG9y
TWFjLm1tCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvQ29sb3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgc3Rh
dGljIFNpbXBsZUNvbG9yIG1ha2VTaW1wbGVDb2xvckZyb21OUwogICAgIFtyZ2JDb2xvciBnZXRS
ZWQ6JnJlZENvbXBvbmVudCBncmVlbjomZ3JlZW5Db21wb25lbnQgYmx1ZTomYmx1ZUNvbXBvbmVu
dCBhbHBoYTomYWxwaGFdOwogICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CiAKLSAgICBy
ZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cyhyZWRDb21wb25lbnQsIGdyZWVuQ29tcG9u
ZW50LCBibHVlQ29tcG9uZW50LCBhbHBoYSk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcihT
UkdCQSB7IHN0YXRpY19jYXN0PGZsb2F0PihyZWRDb21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9h
dD4oZ3JlZW5Db21wb25lbnQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oYmx1ZUNvbXBvbmVudCksIHN0
YXRpY19jYXN0PGZsb2F0PihhbHBoYSkgfSk7CiB9CiAKIENvbG9yIGNvbG9yRnJvbU5TQ29sb3Io
TlNDb2xvciAqY29sb3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI2MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Q
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIs
NyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRBY3RpdmVMCiAKIENPTVB0cjxJ
RDJEMVNvbGlkQ29sb3JCcnVzaD4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmJydXNoV2l0aENv
bG9yKGNvbnN0IEQyRDFfQ09MT1JfRiYgY29sb3IpCiB7Ci0gICAgU2ltcGxlQ29sb3IgY29sb3JL
ZXkgPSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIs
IGNvbG9yLmEpOworICAgIGF1dG8gY29sb3JLZXkgPSBtYWtlU2ltcGxlQ29sb3IoU1JHQkEgeyBj
b2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hIH0pOwogCiAgICAgaWYgKCFjb2xvcktl
eSkgewogICAgICAgICBpZiAoIW1femVyb0JydXNoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW9zL0NvbG9ySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9Db2xvcklPUy5tbQkocmV2aXNpb24gMjYzNjE5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0NvbG9ySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IENvbG9yIGNvbG9yRnJvbVVJQ29sb3IoVUlDb2xvciAqY29sb3IpCiAKICAgICBbY29sb3IgZ2V0
UmVkOiZyZWRDb21wb25lbnQgZ3JlZW46JmdyZWVuQ29tcG9uZW50IGJsdWU6JmJsdWVDb21wb25l
bnQgYWxwaGE6JmFscGhhXTsKIAotICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRz
KHJlZENvbXBvbmVudCwgZ3JlZW5Db21wb25lbnQsIGJsdWVDb21wb25lbnQsIGFscGhhKTsKKyAg
ICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yKFNSR0JBIHsgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJlZENv
bXBvbmVudCksIHN0YXRpY19jYXN0PGZsb2F0PihncmVlbkNvbXBvbmVudCksIHN0YXRpY19jYXN0
PGZsb2F0PihibHVlQ29tcG9uZW50KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKSB9KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC00NjIsOSArNDYyLDggQEAgdW5zaWduZWQgTGVnYWN5VGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlG
bwogQ29sb3IgTGVnYWN5VGlsZUNhY2hlOjpjb2xvckZvckdyaWRUaWxlQm9yZGVyKExlZ2FjeVRp
bGVHcmlkKiBncmlkKSBjb25zdAogewogICAgIGlmIChncmlkID09IG1fem9vbWVkT3V0VGlsZUdy
aWQuZ2V0KCkpCi0gICAgICAgIHJldHVybiBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMmYs
IDEuMGYsIDAuZiwgMC41Zik7Ci0KLSAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0
cygwLjJmLCAwLjlmLCAwLmYsIDAuNWYpOworICAgICAgICByZXR1cm4gbWFrZVNpbXBsZUNvbG9y
KDUxLCAyNTUsIDAsIDEyOCk7CisgICAgcmV0dXJuIG1ha2VTaW1wbGVDb2xvcig1MSwgMjMwLCAw
LCAxMjgpOwogfQogCiBzdGF0aWMgYm9vbCBzaG91bGRSZXBhaW50SW5QaWVjZXMoY29uc3QgQ0dS
ZWN0JiBkaXJ0eVJlY3QsIENHU1JlZ2lvbk9iaiBkaXJ0eVJlZ2lvbiwgQ0dGbG9hdCBjb250ZW50
c1NjYWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShy
ZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjE4LDcgKzIyMTgsNyBAQCB2b2lkIFJlbmRlckxheWVy
OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyCiAjZW5kaWYKIAogI2lmZGVmIFJFVkVBTF9UUkFOU1BB
UkVOQ1lfTEFZRVJTCi0gICAgICAgIGNvbnRleHQuc2V0RmlsbENvbG9yKG1ha2VTaW1wbGVDb2xv
ckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC41ZiwgMC4yZikpOworICAgICAgICBjb250ZXh0LnNl
dEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMTI4LCA1MSkpOwogICAgICAgICBjb250
ZXh0LmZpbGxSZWN0KHBpeGVsU25hcHBlZENsaXBSZWN0KTsKICNlbmRpZgogICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVJT1MubW0JKHJldmlzaW9uIDI2
MzYxOSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUlPUy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMzgwLDcgKzM4MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50
Q2hlY2tib3hEZWNvcmEKIAogICAgIGlmIChjaGVja2VkIHx8IGluZGV0ZXJtaW5hdGUpIHsKICAg
ICAgICAgYXV0byBib3JkZXIgPSBib3guc3R5bGUoKS5nZXRSb3VuZGVkQm9yZGVyRm9yKHJlY3Qp
OwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLmZpbGxSb3VuZGVkUmVjdChib3JkZXIucGl4
ZWxTbmFwcGVkUm91bmRlZFJlY3RGb3JQYWludGluZyhib3guZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKSwgbWFrZVNpbXBsZUNvbG9yRnJvbUZsb2F0cygwLjBmLCAwLjBmLCAwLjBmLCAw
LjhmKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRl
ci5waXhlbFNuYXBwZWRSb3VuZGVkUmVjdEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpLCBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEoMjA0KSk7CiAKICAg
ICAgICAgYXV0byBjbGlwID0gYWRkUm91bmRlZEJvcmRlckNsaXAoYm94LCBwYWludEluZm8uY29u
dGV4dCgpLCByZWN0KTsKICAgICAgICAgYXV0byB3aWR0aCA9IGNsaXAud2lkdGgoKTsKQEAgLTQx
NiwxMCArNDE2LDEwIEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50Q2hlY2tib3hEZWNvcmEK
ICAgICAgICAgfQogCiAgICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihsaW5lV2lk
dGgsIDEpOwotICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dDb250ZXh0LCBWZWN0b3I8Q0dQb2lu
dD4geyBXVEZNb3ZlKHNoYWRvdykgfSwga0NHTGluZUNhcFNxdWFyZSwgbGluZVdpZHRoLCBtYWtl
U2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuN2YpKTsKKyAgICAgICAg
ZHJhd0pvaW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShzaGFk
b3cpIH0sIGtDR0xpbmVDYXBTcXVhcmUsIGxpbmVXaWR0aCwgQ29sb3I6OmJsYWNrLmNvbG9yV2l0
aEFscGhhKDE3OSkpOwogCiAgICAgICAgIGxpbmVXaWR0aCA9IHN0ZDo6bWF4PGZsb2F0PihzdGQ6
Om1pbih3aWR0aCwgaGVpZ2h0KSAqIHRoaWNrbmVzc1JhdGlvLCAxKTsKLSAgICAgICAgZHJhd0pv
aW5lZExpbmVzKGNnQ29udGV4dCwgVmVjdG9yPENHUG9pbnQ+IHsgV1RGTW92ZShsaW5lKSB9LCBr
Q0dMaW5lQ2FwQnV0dCwgbGluZVdpZHRoLCBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDEuMGYs
IDEuMGYsIDEuMGYsIDI0MCAvIDI1NS4wZikpOworICAgICAgICBkcmF3Sm9pbmVkTGluZXMoY2dD
b250ZXh0LCBWZWN0b3I8Q0dQb2ludD4geyBXVEZNb3ZlKGxpbmUpIH0sIGtDR0xpbmVDYXBCdXR0
LCBsaW5lV2lkdGgsIENvbG9yOjp3aGl0ZS5jb2xvcldpdGhBbHBoYSgyNDApKTsKICAgICB9IGVs
c2UgewogICAgICAgICBhdXRvIGNsaXAgPSBhZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50
SW5mby5jb250ZXh0KCksIHJlY3QpOwogICAgICAgICBhdXRvIHdpZHRoID0gY2xpcC53aWR0aCgp
OwpAQCAtNDc3LDcgKzQ3Nyw3IEBAIGJvb2wgUmVuZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNv
cmF0aW8KIAogICAgIGlmIChpc0NoZWNrZWQoYm94KSkgewogICAgICAgICBhdXRvIGJvcmRlciA9
IGJveC5zdHlsZSgpLmdldFJvdW5kZWRCb3JkZXJGb3IocmVjdCk7Ci0gICAgICAgIHBhaW50SW5m
by5jb250ZXh0KCkuZmlsbFJvdW5kZWRSZWN0KGJvcmRlci5waXhlbFNuYXBwZWRSb3VuZGVkUmVj
dEZvclBhaW50aW5nKGJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpLCBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuOGYpKTsKKyAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQoKS5maWxsUm91bmRlZFJlY3QoYm9yZGVyLnBpeGVsU25hcHBlZFJvdW5k
ZWRSZWN0Rm9yUGFpbnRpbmcoYm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSksIENv
bG9yOjpibGFjay5jb2xvcldpdGhBbHBoYSgyMDQpKTsKIAogICAgICAgICBhdXRvIGNsaXAgPSBh
ZGRSb3VuZGVkQm9yZGVyQ2xpcChib3gsIHBhaW50SW5mby5jb250ZXh0KCksIHJlY3QpOwogICAg
ICAgICBkcmF3QXhpYWxHcmFkaWVudChjZ0NvbnRleHQsIGdyYWRpZW50V2l0aE5hbWUoQ29uY2F2
ZUdyYWRpZW50KSwgY2xpcC5sb2NhdGlvbigpLCBGbG9hdFBvaW50KGNsaXAueCgpLCBjbGlwLm1h
eFkoKSksIExpbmVhckludGVycG9sYXRpb24pOwpAQCAtNDkwLDcgKzQ5MCw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVJT1M6OnBhaW50UmFkaW9EZWNvcmF0aW8KICAgICAgICAgY2xpcC5pbmZsYXRlWCgt
Y2xpcC53aWR0aCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwogICAgICAgICBjbGlwLmluZmxhdGVZ
KC1jbGlwLmhlaWdodCgpICogSW5uZXJJbnZlcnNlUmF0aW8pOwogICAgICAgICAKLSAgICAgICAg
Y29uc3RleHByIGF1dG8gc2hhZG93Q29sb3IgPSBtYWtlU2ltcGxlQ29sb3IoMCwgMCwgMCwgMC43
ZiAqIDI1NSk7CisgICAgICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gQ29sb3I6OmJs
YWNrLmNvbG9yV2l0aEFscGhhKDE3OSk7CiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuZHJh
d1JhaXNlZEVsbGlwc2UoY2xpcCwgQ29sb3I6OndoaXRlLCBzaGFkb3dDb2xvcik7CiAKICAgICAg
ICAgRmxvYXRTaXplIHJhZGl1cyhjbGlwLndpZHRoKCkgLyAyLjBmLCBjbGlwLmhlaWdodCgpIC8g
Mi4wZik7CkBAIC03MzgsNyArNzM4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51
TGlzdEJ1dHRvbgogICAgICAgICBGbG9hdFJlY3QgZWxsaXBzZShidXR0b25DbGlwLngoKSArIChi
dXR0b25DbGlwLndpZHRoKCkgLSBjb3VudCAqIChzaXplICsgcGFkZGluZykgKyBwYWRkaW5nKSAv
IDIuMCwgYnV0dG9uQ2xpcC5tYXhZKCkgLSAxMC4wLCBzaXplLCBzaXplKTsKIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgIHBhaW50SW5mby5j
b250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6OndoaXRlLCBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpKTsKKyAgICAgICAgICAg
IHBhaW50SW5mby5jb250ZXh0KCkuZHJhd1JhaXNlZEVsbGlwc2UoZWxsaXBzZSwgQ29sb3I6Ondo
aXRlLCBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEoMTI4KSk7CiAgICAgICAgICAgICBlbGxp
cHNlLm1vdmUoc2l6ZSArIHBhZGRpbmcsIDApOwogICAgICAgICB9CiAgICAgfSAgZWxzZSB7CkBA
IC03NTcsOSArNzU3LDkgQEAgYm9vbCBSZW5kZXJUaGVtZUlPUzo6cGFpbnRNZW51TGlzdEJ1dHRv
bgogICAgICAgICAgICAgeyBhcnJvd1syXS54KCksIGFycm93WzJdLnkoKSArIDEgfQogICAgICAg
ICB9OwogCi0gICAgICAgIGZsb2F0IG9wYWNpdHkgPSBpc1JlYWRPbmx5Q29udHJvbChib3gpID8g
MC4yIDogMC41OwotICAgICAgICBwYWludEluZm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKG1h
a2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMC4wZiwgMC4wZiwgMC4wZiwgb3BhY2l0eSkpOwotICAg
ICAgICBwYWludEluZm8uY29udGV4dCgpLnNldEZpbGxDb2xvcihtYWtlU2ltcGxlQ29sb3JGcm9t
RmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIG9wYWNpdHkpKTsKKyAgICAgICAgdWludDhfdCBvcGFj
aXR5ID0gaXNSZWFkT25seUNvbnRyb2woYm94KSA/IDUxIDogMTI4OworICAgICAgICBwYWludElu
Zm8uY29udGV4dCgpLnNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjay5jb2xvcldpdGhBbHBoYShv
cGFjaXR5KSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0RmlsbENvbG9yKENvbG9y
OjpibGFjay5jb2xvcldpdGhBbHBoYShvcGFjaXR5KSk7CiAgICAgICAgIHBhaW50SW5mby5jb250
ZXh0KCkuZHJhd1BhdGgoUGF0aDo6cG9seWdvblBhdGhGcm9tUG9pbnRzKHNoYWRvdykpOwogCiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OndoaXRlKTsK
QEAgLTE4NDAsNyArMTg0MCw3IEBAIHZvaWQgUmVuZGVyVGhlbWVJT1M6OnBhaW50U3lzdGVtUHJl
dmlld0IKICAgICAvLyBEcmF3IGEgZHJvcCBzaGFkb3cgYXJvdW5kIHRoZSBjaXJjbGUuCiAgICAg
Ly8gVXNlIHRoZSBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb24sIGJlY2F1c2UgaXQgY2FsY3VsYXRl
cyB0aGUgYmx1ciByYWRpdXMgaW4gY29udGV4dCBzcGFjZSwKICAgICAvLyByYXRoZXIgdGhhbiBz
Y3JlZW4gc3BhY2UuCi0gICAgYXV0byBzaGFkb3dDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZyb21G
bG9hdHMoMC5mLCAwLmYsIDAuZiwgMC4xZik7CisgICAgY29uc3RleHByIGF1dG8gc2hhZG93Q29s
b3IgPSBDb2xvcjo6YmxhY2suY29sb3JXaXRoQWxwaGEoMjYpOwogICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRTaGFkb3coRmxvYXRTaXplIHsgfSwgMTYsIHNoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRo
ZSBjaXJjbGUgbXVzdCBoYXZlIGFuIGFscGhhIGNoYW5uZWwgdmFsdWUgb2YgMSBmb3IgdGhlIHNo
YWRvdyBjb2xvciB0byBhcHBlYXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjYzNjQxKQorKysg
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAor
MjAyMC0wNi0yOSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIHJlbWFpbmluZyBtYWtlU2ltcGxlQ29sb3JGcm9tKiB2YXJpYW50cworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzNzA2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL3dwZS9XZWJL
aXRDb2xvci5jcHA6CisgICAgICAgICh3ZWJraXRDb2xvclRvV2ViQ29yZUNvbG9yKToKKyAgICAg
ICAgVXNlIG1ha2VTaW1wbGVDb2xvcihTUkdCQSB7IC4uLiB9KSByYXRoZXIgdGhhbiBtYWtlU2lt
cGxlQ29sb3JGcm9tRmxvYXRzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbnNwZWN0b3IvV2Vi
SW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yQ2xpZW50
OjpzaG93UGFpbnRSZWN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6ZHJhd1JlY3QpOgor
ICAgICAgICBVc2UgbWFrZVNpbXBsZUNvbG9yIHJhdGhlciB0aGFuIG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMsIGFsbG93aW5nIGZvcgorICAgICAgICBjb25zdGFudCBleHByZXNzaW9uIGNyZWF0
aW9uIG9mIFNpbXBsZUNvbG9ycy4KKwogMjAyMC0wNi0yOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aHJlYWQtc2FmZXR5IGlzc3VlIGluIHdlYlByb2Nl
c3NQb29sSGlnaER5bmFtaWNSYW5nZURpZENoYW5nZUNhbGxiYWNrKCkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0Q29sb3IuY3BwCShyZXZpc2lvbiAy
NjM2MTkpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdENvbG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsNyBAQCBHX0RFRklORV9CT1hFRF9UWVBFKFdl
YktpdENvbG9yLCB3ZWJraXRfCiAKIGNvbnN0IFdlYkNvcmU6OkNvbG9yIHdlYmtpdENvbG9yVG9X
ZWJDb3JlQ29sb3IoV2ViS2l0Q29sb3IqIGNvbG9yKQogewotICAgIHJldHVybiBXZWJDb3JlOjpt
YWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+cmVkKSwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ncmVlbiksCi0gICAgICAgIHN0YXRpY19jYXN0PGZs
b2F0Pihjb2xvci0+Ymx1ZSksIHN0YXRpY19jYXN0PGZsb2F0Pihjb2xvci0+YWxwaGEpKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6bWFrZVNpbXBsZUNvbG9yKFdlYkNvcmU6OlNSR0JBIHsgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5yZWQpLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29sb3ItPmdyZWVu
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvbG9yLT5ibHVlKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNv
bG9yLT5hbHBoYSkgfSk7CiB9CiAKIHZvaWQgd2Via2l0Q29sb3JGaWxsRnJvbVdlYkNvcmVDb2xv
cihjb25zdCBXZWJDb3JlOjpDb2xvciYgd2ViQ29yZUNvbG9yLCBXZWJLaXRDb2xvciogY29sb3Ip
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNs
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luc3BlY3Rv
ci9XZWJJbnNwZWN0b3JDbGllbnQuY3BwCShyZXZpc2lvbiAyNjM2MTkpCisrKyBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvSW5zcGVjdG9yL1dlYkluc3BlY3RvckNsaWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCB2b2lkIFdlYkluc3BlY3RvckNsaWVudDo6c2hvd1Bh
aW50UmVjdChjCiAgICAgcGFpbnRMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkp
OwogICAgIHBhaW50TGF5ZXItPnNldFBvc2l0aW9uKHJlY3QubG9jYXRpb24oKSk7CiAgICAgcGFp
bnRMYXllci0+c2V0U2l6ZShyZWN0LnNpemUoKSk7Ci0gICAgcGFpbnRMYXllci0+c2V0QmFja2dy
b3VuZENvbG9yKG1ha2VTaW1wbGVDb2xvckZyb21GbG9hdHMoMS4wZiwgMC4wZiwgMC4wZiwgMC4y
ZikpOworICAgIHBhaW50TGF5ZXItPnNldEJhY2tncm91bmRDb2xvcihtYWtlU2ltcGxlQ29sb3Io
MjU1LCAwLCAwLCA1MSkpOwogCiAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmFkZUtleWZyYW1lcyhB
bmltYXRlZFByb3BlcnR5T3BhY2l0eSk7CiAgICAgZmFkZUtleWZyYW1lcy5pbnNlcnQobWFrZVVu
aXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCAxKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAy
NjM2MTkpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwOSw4ICs1MDksOCBAQCB2b2lkIEZpbmRDb250cm9s
bGVyOjpkcmF3UmVjdChQYWdlT3ZlcmxhCiB7CiAgICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0g
MTsKIAotICAgIGF1dG8gb3ZlcmxheUJhY2tncm91bmRDb2xvciA9IG1ha2VTaW1wbGVDb2xvckZy
b21GbG9hdHMoMC4xZiwgMC4xZiwgMC4xZiwgMC4yNWYpOwotICAgIGF1dG8gc2hhZG93Q29sb3Ig
PSBtYWtlU2ltcGxlQ29sb3JGcm9tRmxvYXRzKDAuMGYsIDAuMGYsIDAuMGYsIDAuNWYpOworICAg
IGNvbnN0ZXhwciBhdXRvIG92ZXJsYXlCYWNrZ3JvdW5kQ29sb3IgPSBtYWtlU2ltcGxlQ29sb3Io
MjYsIDI2LCAyNiwgNjQpOworICAgIGNvbnN0ZXhwciBhdXRvIHNoYWRvd0NvbG9yID0gbWFrZVNp
bXBsZUNvbG9yKDAsIDAsIDAsIDEyOCk7CiAKICAgICBJbnRSZWN0IGJvcmRlckluZmxhdGVkRGly
dHlSZWN0ID0gZGlydHlSZWN0OwogICAgIGJvcmRlckluZmxhdGVkRGlydHlSZWN0LmluZmxhdGUo
Ym9yZGVyV2lkdGgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>