<?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>133426</bug_id>
          
          <creation_ts>2014-05-31 14:17:22 -0700</creation_ts>
          <short_desc>[ftlopt] DFG should use its own notion of JSValue, which we should call FrozenValue, that will carry around a copy of its structure</short_desc>
          <delta_ts>2014-08-18 17:53:18 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>128073</dependson>
    
    <dependson>133624</dependson>
          <blocked>136055</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1012762</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-31 14:17:22 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012763</commentid>
    <comment_count>1</comment_count>
      <attachid>232322</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-31 14:27:49 -0700</bug_when>
    <thetext>Created attachment 232322
it begins!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012778</commentid>
    <comment_count>2</comment_count>
      <attachid>232328</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-31 17:51:57 -0700</bug_when>
    <thetext>Created attachment 232328
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012801</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-31 23:11:08 -0700</bug_when>
    <thetext>I initially started working on this because I believed that it would be absolutely necessary for making eager watchable structure watching sound.  I no longer believe it&apos;s needed for soundness, but it is worth pursuing anyway because it&apos;ll make debugging the DFG a lot easier.

This isn&apos;t needed for soundness so long as we always try to watch the structures of constants as soon as they are introduced into the abstract interpreter, inside of AbstractValue::set().  It&apos;s of course possible for weirdness:

- The value could start with an unwatchable structure and then transition to a watchable structure. Fortunately, we will assume that the structure is TOP if it is unwatchable.  So, this would mean that during the same abstract interpretation cycle, we will still believe that the structure is TOP.  In future cycles, we may believe that the structure is more specific, but that&apos;s OK - it&apos;s always fine to continue optimizing code.

- The value could start with some watchable structure and then it transitions to another watchable structure.  This would mean that the first structure&apos;s watchpoint would have gotten fired, and the code would get invalidated before installation anyway.

Of course, this may be all fine and good, but it&apos;s confusing as heck.  Any bugs in this would be impossible to debug because of the race conditions involved.  So, it&apos;s just a whole lot easier lock in the structure of every value we see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012841</commentid>
    <comment_count>4</comment_count>
      <attachid>232328</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-06-01 11:38:11 -0700</bug_when>
    <thetext>Comment on attachment 232328
more

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

Wow, i really like this.  I also really like the amount of red :)

&gt; Source/JavaScriptCore/runtime/JSCJSValue.cpp:195
&gt; +        out, context, (!!*this &amp;&amp; isCell()) ? asCell()-&gt;structure() : nullptr);

Our normal approach is to add that awful operator &lt;functionptr madness&gt;() const so that you&apos;d only need *this &amp;&amp; isCell(), which i think would look nicer here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012842</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-01 11:39:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 232328 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=232328&amp;action=review
&gt; 
&gt; Wow, i really like this.  I also really like the amount of red :)
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSCJSValue.cpp:195
&gt; &gt; +        out, context, (!!*this &amp;&amp; isCell()) ? asCell()-&gt;structure() : nullptr);
&gt; 
&gt; Our normal approach is to add that awful operator &lt;functionptr madness&gt;() const so that you&apos;d only need *this &amp;&amp; isCell(), which i think would look nicer here.

Right, exactly, madness.  That&apos;s why I didn&apos;t add it.  Not-madness is better than madness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013356</commentid>
    <comment_count>6</comment_count>
      <attachid>232492</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-04 12:38:44 -0700</bug_when>
    <thetext>Created attachment 232492
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013388</commentid>
    <comment_count>7</comment_count>
      <attachid>232504</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-04 14:57:35 -0700</bug_when>
    <thetext>Created attachment 232504
more!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013407</commentid>
    <comment_count>8</comment_count>
      <attachid>232508</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-04 16:38:30 -0700</bug_when>
    <thetext>Created attachment 232508
just a tiny bit more

This is going to be such a surgical and incremental change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013935</commentid>
    <comment_count>9</comment_count>
      <attachid>232654</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-06 21:54:12 -0700</bug_when>
    <thetext>Created attachment 232654
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013973</commentid>
    <comment_count>10</comment_count>
      <attachid>232666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-07 12:27:55 -0700</bug_when>
    <thetext>Created attachment 232666
passes tests

I still need to make sure that I didn&apos;t break performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014453</commentid>
    <comment_count>11</comment_count>
      <attachid>232798</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-10 11:31:48 -0700</bug_when>
    <thetext>Created attachment 232798
the patch

Note that the change to Structure::dfgShouldWatch() is going to be landed separately: https://bugs.webkit.org/show_bug.cgi?id=133624</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014506</commentid>
    <comment_count>12</comment_count>
      <attachid>232798</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-06-10 13:45:32 -0700</bug_when>
    <thetext>Comment on attachment 232798
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1014660</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-10 21:53:42 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/169795</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232322</attachid>
            <date>2014-05-31 14:27:49 -0700</date>
            <delta_ts>2014-05-31 17:51:57 -0700</delta_ts>
            <desc>it begins!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13851</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHRnJvemVuVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5n
bGV0b24oKQoreworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1cm4gJmVt
cHR5OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0Zyb3plblZhbHVlX2gKKyNkZWZpbmUgREZHRnJvemVuVmFsdWVfaAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgRnJvemVuVmFsdWUgeworcHVibGljOgor
ICAgIEZyb3plblZhbHVlKCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAg
ICAsIG1fc3Ryb25nKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUo
SlNWYWx1ZSB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3Ry
dWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKTsKKyAgICB9CisgICAg
CisgICAgRnJvemVuVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUp
CisgICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgICAgICBBU1NFUlQoKCEhdmFs
dWUgJiYgdmFsdWUuaXNDZWxsKCkpID09ICEhc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKCF2
YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkgfHwgdmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpID09
IHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJvemVu
VmFsdWUgZnJlZXplKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRnJvemVu
VmFsdWUoCisgICAgICAgICAgICB2YWx1ZSwgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpID8g
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBGcm96ZW5WYWx1ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgSlNWYWx1ZSB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgCisgICAgdm9pZCBtYXJrU3Ry
b25nbHkoKQorICAgIHsKKyAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpCisg
ICAgICAgICAgICBtX3N0cm9uZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKG91dCwg
Y29udGV4dCwgbV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIEpTVmFsdWUgbV92YWx1ZTsKKyAgICBTdHJ1Y3R1cmUqIG1f
c3RydWN0dXJlOworICAgIGJvb2wgbV9zdHJvbmc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3pl
blZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzAsNiArODcwLDI1IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK0Zyb3plblZhbHVlKiBHcmFwaDo6ZnJl
ZXplKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKCF2YWx1ZSkpCisgICAgICAg
IHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBhdXRvIHJl
c3VsdCA9IG1fZnJvemVuVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIG51bGxw
dHIpOworICAgIGlmIChMSUtFTFkoIXJlc3VsdC5pc05ld0VudHJ5KSkKKyAgICAgICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBtX2Zyb3plblZhbHVlcy5hZGQoRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSkp
OworfQorCitGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZ2x5KEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZSh2YWx1ZSk7CisgICAgcmVzdWx0
LT5tYXJrU3Ryb25nbHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDYgKzE0NCw5
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKKyAgICBGcm96ZW5WYWx1
ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOworICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmds
eShKU1ZhbHVlIHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUpLT5tYXJrU3Ry
b25nbHkoKS4KKyAgICAKICAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIHVu
c2lnbmVkIGNvbnN0YW50TnVtYmVyKQogICAgIHsKICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0g
R2V0TG9jYWwpCkBAIC04MTgsNiArODIxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBWZWN0b3I8
IFJlZlB0cjxCYXNpY0Jsb2NrPiAsIDg+IG1fYmxvY2tzOwogICAgIFZlY3RvcjxFZGdlLCAxNj4g
bV92YXJBcmdDaGlsZHJlbjsKKworICAgIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIEZyb3plblZh
bHVlKiwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHM+IG1fZnJv
emVuVmFsdWVNYXA7CisgICAgQmFnPEZyb3plblZhbHVlPiBtX2Zyb3plblZhbHVlczsKKyAgICAK
ICAgICBWZWN0b3I8U3RvcmFnZUFjY2Vzc0RhdGE+IG1fc3RvcmFnZUFjY2Vzc0RhdGE7CiAgICAg
VmVjdG9yPE5vZGUqLCA4PiBtX2FyZ3VtZW50czsKICAgICBTZWdtZW50ZWRWZWN0b3I8VmFyaWFi
bGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY5MjM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzNCw3ICs0MzQsNiBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3Vi
bGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICBjYXNlIFdl
YWtKU0NvbnN0YW50OgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQ0MiwxMyArNDQxLDE1IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVt
YmVyKCkKKyAgICBGcm96ZW5WYWx1ZSogY29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgQVNTRVJU
KGlzQ29uc3RhbnQoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICAgICAgQVNTRVJU
KGhhc0NvbnN0YW50KCkpOworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQor
ICAgICAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PEZyb3plblZhbHVlKj4obV9vcEluZm8pOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQor
ICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQogICAgIHsKICAg
ICAgICAgaWYgKGhhc0RvdWJsZVJlc3VsdCgpKQogICAgICAgICAgICAgbV9vcCA9IERvdWJsZUNv
bnN0YW50OwpAQCAtNDU3LDE1ICs0NTgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBtX2ZsYWdzICY9IH4oTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0g
ICAgICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7Ci0gICAgICAgIGNoaWxkcmVuLnJlc2V0
KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29udmVydFRvV2Vha0NvbnN0YW50KEpTQ2VsbCog
Y2VsbCkKLSAgICB7Ci0gICAgICAgIG1fb3AgPSBXZWFrSlNDb25zdGFudDsKLSAgICAgICAgbV9m
bGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9kZUNsb2Ji
ZXJzV29ybGQpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNl
bGwpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsK
ICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCkBAIC01NDUsNTIgKzUzOCwy
NCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3AgPSBUb1N0cmluZzsKICAgICB9CiAgICAg
Ci0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkg
PT0gV2Vha0pTQ29uc3RhbnQpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KG1fb3BJbmZvKTsKLSAgICB9Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChD
b2RlQmxvY2sqIGNvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAob3AoKSkgewotICAg
ICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUod2Vh
a0NvbnN0YW50KCkpOwotICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91
YmxlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsKLSAgICAgICAgY2FzZSBQaGFudG9tQXJndW1l
bnRzOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOyAvLyBIYXZlIHRvIHJldHVybiBzb21ldGhpbmcgaW4gcmVsZWFzZSBtb2Rl
LgotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2Nr
KiBjb2RlQmxvY2spCisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzSW50
MzIoKTsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgp
LmlzSW50MzIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudCgpCiAgICAgewotICAg
ICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2Rl
QmxvY2spLmlzRG91YmxlKCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBBU1NF
UlQoIWlzSW50MzJDb25zdGFudChjb2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzRG91
YmxlKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChDb2RlQmxvY2sq
IGNvZGVCbG9jaykKKyAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
Ym9vbCByZXN1bHQgPSBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2Nr
KS5pc051bWJlcigpOwotICAgICAgICBBU1NFUlQocmVzdWx0ID09IChpc0ludDMyQ29uc3RhbnQo
Y29kZUJsb2NrKSB8fCBpc0RvdWJsZUNvbnN0YW50KGNvZGVCbG9jaykpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52
YWx1ZSgpLmlzTnVtYmVyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNCb29sZWFuQ29uc3Rh
bnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudCgpCiAg
ICAgewotICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaykuaXNCb29sZWFuKCk7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29u
c3RhbnQoKS0+dmFsdWUoKS5pc0Jvb2xlYW4oKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjb250
YWluc01vdkhpbnQoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTY5MjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRG91YmxlQ29uc3RhbnQsIE5vZGVSZXN1bHREb3Vi
bGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhJbnQ1MkNvbnN0YW50LCBOb2RlUmVz
dWx0SW50NTIgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCi0gICAgLyogQSBjb25zdGFudCBu
b3QgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50IHBvb2wuIFVzZXMgZ2V0IHBhdGNoZWQgdG8g
anVtcHMgdGhhdCBleGl0IHRoZSAqL1wKLSAgICAvKiBjb2RlIGJsb2NrLiAqL1wKLSAgICBtYWNy
byhXZWFrSlNDb25zdGFudCwgTm9kZVJlc3VsdEpTIHwgTm9kZURvZXNOb3RFeGl0KSBcCi0gICAg
XAogICAgIC8qIE1hcmtlciB0byBpbmRpY2F0ZSB0aGF0IGFuIG9wZXJhdGlvbiB3YXMgb3B0aW1p
emVkIGVudGlyZWx5IGFuZCBhbGwgdGhhdCBpcyBsZWZ0ICovXAogICAgIC8qIGlzIHRvIG1ha2Ug
b25lIG5vZGUgYWxpYXMgYW5vdGhlci4gQ1NFIHdpbGwgbGF0ZXIgdXN1YWxseSBlbGltaW5hdGUg
dGhpcyBub2RlLCAqL1wKICAgICAvKiB0aG91Z2ggaXQgbWF5IGNob29zZSBub3QgdG8gaWYgaXQg
d291bGQgY29ycnVwdCBwcmVkaWN0aW9ucyAodmVyeSByYXJlKS4gKi9cCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTY5MjM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5MSw2ICsxOTEsMTMgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbgogCiB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
IG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CiB7CisgICAgZHVtcEluQ29udGV4dEFz
c3VtaW5nU3RydWN0dXJlKAorICAgICAgICBvdXQsIGNvbnRleHQsICghISp0aGlzICYmIGlzQ2Vs
bCgpKSA/IGFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworfQorCit2b2lkIEpTVmFs
dWU6OmR1bXBJbkNvbnRleHRBc3N1bWluZ1N0cnVjdHVyZSgKKyAgICBQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CiAg
ICAgaWYgKCEqdGhpcykKICAgICAgICAgb3V0LnByaW50KCI8SlNWYWx1ZSgpPiIpOwogICAgIGVs
c2UgaWYgKGlzSW50MzIoKSkKQEAgLTIwNyw3ICsyMTQsNyBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJ
bkNvbnRleHQoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludGYoIkRvdWJsZTogJTA4eDol
MDh4LCAlbGYiLCB1LmFzVHdvSW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBhc0RvdWJsZSgp
KTsKICNlbmRpZgogICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2Vs
bCgpLT5pbmhlcml0cyhKU1N0cmluZzo6aW5mbygpKSkgeworICAgICAgICBpZiAoc3RydWN0dXJl
LT5jbGFzc0luZm8oKS0+aXNTdWJjbGFzc09mKEpTU3RyaW5nOjppbmZvKCkpKSB7CiAgICAgICAg
ICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOwogICAg
ICAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKICAgICAgICAgICAgIGlmIChzdHJpbmctPmlz
Um9wZSgpKQpAQCAtMjIzLDExICsyMzAsMTEgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0
KFByaW50U3RyZWFtJgogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIgKHVucmVzb2x2ZWQpIik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1wbCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzKFN0cnVjdHVyZTo6aW5mbygp
KSkKKyAgICAgICAgfSBlbHNlIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YmNsYXNz
T2YoU3RydWN0dXJlOjppbmZvKCkpKQogICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmU6
ICIsIGluQ29udGV4dCgqanNDYXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKSwgY29udGV4dCkpOwog
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG91dC5wcmludCgiQ2VsbDogIiwgUmF3UG9pbnRl
cihhc0NlbGwoKSkpOwotICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIGluQ29udGV4dCgqYXND
ZWxsKCktPnN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICgiLCBpbkNvbnRleHQoKnN0cnVjdHVyZSwgY29udGV4dCksICIpIik7CiAgICAgICAgIH0K
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBvdXQucHJpbnQoIiwgSUQ6ICIsIGFzQ2VsbCgp
LT5zdHJ1Y3R1cmVJRCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmgJKHJldmlzaW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIHB1
YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0Kikg
Y29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCosIFN0cnVjdHVyZSopIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232328</attachid>
            <date>2014-05-31 17:51:57 -0700</date>
            <delta_ts>2014-06-04 12:38:44 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>52764</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxNjkyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDExICsxMzIsMTAgQEAgcHVi
bGljOgogICAgICAgICAsIG1fZ3JhcGgoZ3JhcGgpCiAgICAgICAgICwgbV9jdXJyZW50QmxvY2so
MCkKICAgICAgICAgLCBtX2N1cnJlbnRJbmRleCgwKQotICAgICAgICAsIG1fY29uc3RhbnRVbmRl
ZmluZWQoVUlOVF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFudE51bGwoVUlOVF9NQVgpCi0gICAg
ICAgICwgbV9jb25zdGFudE5hTihVSU5UX01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50MShVSU5U
X01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50cyhtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFu
dFJlZ2lzdGVycygpKQorICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoZ3JhcGguZnJlZXpl
KGpzVW5kZWZpbmVkKCkpKQorICAgICAgICAsIG1fY29uc3RhbnROdWxsKGdyYXBoLmZyZWV6ZShq
c051bGwoKSkpCisgICAgICAgICwgbV9jb25zdGFudE5hTihncmFwaC5mcmVlemUoanNOdW1iZXIo
UE5hTikpKQorICAgICAgICAsIG1fY29uc3RhbnQxKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkp
CiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkK
ICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMp
CiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQpAQCAtMjE3LDEyICsyMTYsNyBAQCBwcml2
YXRlOgogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGlu
c3RydWN0aW9uLgogICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KLSAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQgPCBtX2Nv
bnN0YW50cy5zaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3Rh
bnQpOwotICAgICAgICB9CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwog
CiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlz
QXJndW1lbnQoKSkKQEAgLTIzNCw2ICsyMjgsMTggQEAgcHJpdmF0ZToKIAogICAgIE5vZGUqIGdl
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7CisgICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkgeworICAgICAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRleCA9IG9wZXJh
bmQudG9Db25zdGFudEluZGV4KCk7CisgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBt
X2NvbnN0YW50cy5zaXplKCkgfHwgbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF0pIHsKKyAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
PmdldENvbnN0YW50KG9wZXJhbmQub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIGlmIChjb25z
dGFudEluZGV4ID49IG1fY29uc3RhbnRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICAgICAgbV9j
b25zdGFudHMuZ3Jvdyhjb25zdGFudEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgbV9jb25z
dGFudHNbY29uc3RhbnRJbmRleF0gPQorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZVN0cm9uZ2x5KHZhbHVlKSkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAg
ICAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCktPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAg
ICAgICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVl
Q29uc3RhbnQoKTsKQEAgLTU1NCwzMiArNTYwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGZsdXNo
Rm9yVGVybWluYWwoKTsKICAgICB9CiAKLSAgICAvLyBOT1RFOiBPbmx5IHVzZSB0aGlzIHRvIGNv
bnN0cnVjdCBjb25zdGFudHMgdGhhdCBhcmlzZSBmcm9tIG5vbi1zcGVjdWxhdGl2ZQotICAgIC8v
IGNvbnN0YW50IGZvbGRpbmcuIEkuZS4gY3JlYXRpbmcgY29uc3RhbnRzIHVzaW5nIHRoaXMgaWYg
d2UgaGFkIGNvbnN0YW50Ci0gICAgLy8gZmllbGQgaW5mZXJlbmNlIHdvdWxkIGJlIGEgYmFkIGlk
ZWEsIHNpbmNlIHRoZSBieXRlY29kZSBwYXJzZXIncyBmb2xkaW5nCi0gICAgLy8gZG9lc24ndCBo
YW5kbGUgbGl2ZW5lc3MgcHJlc2VydmF0aW9uLgotICAgIE5vZGUqIGdldEpTQ29uc3RhbnRGb3JW
YWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBjb25z
dGFudCBzaG91bGQgYmUgc3Ryb25nbHkgbWFya2VkLgorICAgIE5vZGUqIGpzQ29uc3RhbnQoSlNW
YWx1ZSBjb25zdGFudFZhbHVlKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRl
eDsKLSAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+ZmluZENvbnN0YW50KGNvbnN0YW50VmFsdWUs
IGNvbnN0YW50SW5kZXgpKSB7Ci0gICAgICAgICAgICBhZGRDb25zdGFudChjb25zdGFudFZhbHVl
KTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50SW5kZXgpOworICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmdseShjb25z
dGFudFZhbHVlKSkpOwogICAgIH0KIAotICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQg
Y29uc3RhbnQpCisgICAgTm9kZSogd2Vha0pTQ29uc3RhbnQoSlNWYWx1ZSBjb25zdGFudFZhbHVl
KQogICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pT
VmFsdWU7Ci0gICAgICAgIGlmIChub2RlKQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAg
ICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oY29uc3Rh
bnQpKTsKLSAgICAgICAgbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZSA9IHJlc3VsdDsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNvbnN0YW50VmFsdWUpKSk7CiAgICAgfQogCiAg
ICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBnZXQvc2V0IHRoZSB0aGlzIHZhbHVlLgpAQCAtNTkz
LDE0OSArNTgyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0KG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwgdmFsdWUpOwogICAgIH0KIAotICAgIC8vIENvbnZl
bmllbmNlIG1ldGhvZHMgZm9yIGNoZWNraW5nIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9v
bCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5v
cCgpID09IEpTQ29uc3RhbnQ7Ci0gICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgLy8gQ29udmVuaWVuY2Ug
bWV0aG9kcyBmb3IgZ2V0dGluZyBjb25zdGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9m
SlNDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFu
dChub2RlKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggKyBub2RlLT5jb25zdGFudE51bWJlcigpKTsKLSAgICB9Ci0g
ICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBKU0NvbnN0YW50IHdpdGggdGhlIHZhbHVlICd1bmRlZmluZWQnLgotICAg
IE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0
YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnRVbmRl
ZmluZWQgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQg
cG9vbCBmb3IgdW5kZWZpbmVkLCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlz
IQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50
VW5kZWZpbmVkID0gMDsgbV9jb25zdGFudFVuZGVmaW5lZCA8IG51bWJlck9mQ29uc3RhbnRzOyAr
K21fY29uc3RhbnRVbmRlZmluZWQpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9
IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1f
Y29uc3RhbnRVbmRlZmluZWQpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0TWUuaXNVbmRlZmlu
ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFu
dFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB1bmRlZmlu
ZWQgdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcg
c2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXpl
KCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAgICAgICAgYWRkQ29uc3RhbnQoanNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
bV9jb25zdGFudFVuZGVmaW5lZCBtdXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxv
Y2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnRVbmRlZmluZWQpLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1
cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50VW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAnbnVsbCcuCi0g
ICAgTm9kZSogY29uc3RhbnROdWxsKCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50
TnVsbCBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAgIGlmIChtX2NvbnN0YW50TnVsbCA9PSBVSU5U
X01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciBudWxs
LCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5z
aWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJl
Z2lzdGVycygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50TnVsbCA9IDA7IG1fY29uc3Rh
bnROdWxsIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9jb25zdGFudE51bGwpIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnROdWxsKTsKLSAgICAgICAgICAgICAgICBp
ZiAodGVzdE1lLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudChtX2NvbnN0YW50TnVsbCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFk
ZCBudWxsIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMsIGFuZCBhZGQgYSBjb3JyZXNwb25k
aW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMu
c2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIGFkZENvbnN0YW50KGpz
TnVsbCgpKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBt
X2NvbnN0YW50TnVsbCBtdXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBj
b25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2YWx1ZSAnbnVsbCcuCi0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2Nv
bnN0YW50TnVsbCkuaXNOdWxsKCkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2Nv
bnN0YW50TnVsbCk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJs
ZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIDEuCi0gICAgTm9kZSogb25lKCkKLSAgICB7Ci0gICAg
ICAgIC8vIEhhcyBtX2NvbnN0YW50MSBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAgIGlmIChtX2Nv
bnN0YW50MSA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFu
dCBwb29sIGZvciB0aGUgdmFsdWUgMSwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2Ug
dGhpcyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxv
Y2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9jb25z
dGFudDEgPSAwOyBtX2NvbnN0YW50MSA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnQx
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29u
c3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50MSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRlc3RNZS5pc0ludDMyKCkgJiYgdGVzdE1lLmFzSW50MzIoKSA9PSAxKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50MSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgMSB0byB0aGUgQ29k
ZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGluIG1fY29u
c3RhbnRzLgotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBudW1iZXJP
ZkNvbnN0YW50cyk7Ci0gICAgICAgICAgICBhZGRDb25zdGFudChqc051bWJlcigxKSk7Ci0gICAg
ICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudDEgbXVz
dCByZWZlciB0byBhbiBlbnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0
IGhhcyB0aGUgaW50ZWdlciB2YWx1ZSAxLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmlzSW50
MzIoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50MSkuYXNJbnQzMigpID09IDEpOwotICAgICAg
ICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50MSk7Ci0gICAgfQotICAgIAotICAgIC8v
IFRoaXMgbWV0aG9kIHJldHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSBOYU4u
Ci0gICAgTm9kZSogY29uc3RhbnROYU4oKQotICAgIHsKLSAgICAgICAgSlNWYWx1ZSBuYW4gPSBq
c05hTigpOwotICAgICAgICAKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnROYU4gYmVlbiBzZXQg
dXAgeWV0PwotICAgICAgICBpZiAobV9jb25zdGFudE5hTiA9PSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciB0aGUgdmFsdWUgTmFOLCBpZiB3
ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVy
cygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50TmFOID0gMDsgbV9jb25zdGFudE5hTiA8
IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnROYU4pIHsKLSAgICAgICAgICAgICAgICBK
U1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIG1fY29uc3RhbnROYU4pOwotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVl
OjplbmNvZGUodGVzdE1lKSA9PSBKU1ZhbHVlOjplbmNvZGUobmFuKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE5hTik7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgbmFuIHRvIHRoZSBDb2RlQmxvY2sncyBj
b25zdGFudHMsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0g
ICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRz
KTsKLSAgICAgICAgICAgIGFkZENvbnN0YW50KG5hbik7Ci0gICAgICAgICAgICBtX2NvbnN0YW50
cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFu
dHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudE5hTiBtdXN0IHJlZmVyIHRvIGFuIGVu
dHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2YWx1ZSBu
YW4uCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKS5pc0RvdWJsZSgpKTsKLSAgICAgICAgQVNT
RVJUKHN0ZDo6aXNuYW4obV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4ICsgbV9jb25zdGFudE5hTikuYXNEb3VibGUoKSkpOwotICAgICAgICByZXR1cm4g
Z2V0SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogY2Vs
bENvbnN0YW50KEpTQ2VsbCogY2VsbCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8SlNDZWxsKiwg
Tm9kZSo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2VsbCwg
bnVsbHB0cik7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAg
QVNTRVJUKCFIZWFwOjppc1pvbWJpZmllZChjZWxsKSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFs
dWU7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25z
dGFudEZvclZhbHVlKHZhbHVlKTsKLSAgICB9Ci0gICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBp
bmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tUb3At
Pm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtODMxLDE0ICs2NzcsMTQgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3Qs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9
IGNlbGxDb25zdGFudChvYmplY3QpOworICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0ganNDb25z
dGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8o
bV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAg
ICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50
V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhvYmplY3QsIG9iamVjdC0+c3RydWN0dXJl
KCkpOworICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVj
dCwgbV9ncmFwaC5mcmVlemUob2JqZWN0KS0+c3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIFNw
ZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29k
ZUluZGV4KQpAQCAtOTk3LDM2ICs4NDMsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgYnl0ZWNv
ZGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgogICAg
IHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogCi0gICAgLy8gV2UgdXNlIHRoZXNlIHZhbHVlcyBk
dXJpbmcgY29kZSBnZW5lcmF0aW9uLCBhbmQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCi0gICAgLy8g
c3BlY2lhbCBoYW5kbGluZyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0
YW50cyBpbiB0aGUKLSAgICAvLyBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sLiBUaGVzZSB2YXJp
YWJsZXMgYXJlIGluaXRpYWxpemVkIHRvCi0gICAgLy8gVUlOVF9NQVgsIGFuZCBsYXppbHkgdXBk
YXRlZCB0byBob2xkIGFuIGluZGV4IGludG8gdGhlIENvZGVCbG9jaydzCi0gICAgLy8gY29uc3Rh
bnQgcG9vbCwgYXMgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIG1fY29uc3RhbnRVbmRlZmluZWQ7
Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudE51bGw7Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudE5h
TjsKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50MTsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIHVuc2ln
bmVkPiBtX2NlbGxDb25zdGFudHM7Ci0gICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj4gbV9jZWxs
Q29uc3RhbnROb2RlczsKLQotICAgIC8vIEEgY29uc3RhbnQgaW4gdGhlIGNvbnN0YW50IHBvb2wg
bWF5IGJlIHJlcHJlc2VudGVkIGJ5IG1vcmUgdGhhbiBvbmUKLSAgICAvLyBub2RlIGluIHRoZSBn
cmFwaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQu
Ci0gICAgc3RydWN0IENvbnN0YW50UmVjb3JkIHsKLSAgICAgICAgQ29uc3RhbnRSZWNvcmQoKQot
ICAgICAgICAgICAgOiBhc0ludDMyKDApCi0gICAgICAgICAgICAsIGFzTnVtZXJpYygwKQotICAg
ICAgICAgICAgLCBhc0pTVmFsdWUoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
Tm9kZSogYXNJbnQzMjsKLSAgICAgICAgTm9kZSogYXNOdW1lcmljOwotICAgICAgICBOb2RlKiBh
c0pTVmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIFRyYWNrIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3
aG9zZSByZXN1bHQgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGV2ZXJ5Ci0gICAgLy8gcmVnaXN0
ZXIgdmFsdWUgaW4gdGhlIGJ5dGVjb2RlIC0gYXJndW1lbnQsIGxvY2FsLCBhbmQgdGVtcG9yYXJ5
LgotICAgIFZlY3RvcjxDb25zdGFudFJlY29yZCwgMTY+IG1fY29uc3RhbnRzOworICAgIEZyb3pl
blZhbHVlKiBtX2NvbnN0YW50VW5kZWZpbmVkOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50
TnVsbDsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE5hTjsKKyAgICBGcm96ZW5WYWx1ZSog
bV9jb25zdGFudDE7CisgICAgVmVjdG9yPE5vZGUqLCAxNj4gbV9jb25zdGFudHM7CiAKICAgICAv
LyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVu
c2lnbmVkIG1fbnVtQXJndW1lbnRzOwpAQCAtMTA2MSw3ICs4ODIsNiBAQCBwcml2YXRlOgogICAg
ICAgICAvLyAodGhlIG1hY2hpbmUgY29kZSBibG9jaywgd2hpY2ggaXMgdGhlIHRyYW5zaXRpdmUs
IHRob3VnaCBub3QgbmVjZXNzYXJpbHkKICAgICAgICAgLy8gZGlyZWN0LCBjYWxsZXIpLgogICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1faWRlbnRpZmllclJlbWFwOwotICAgICAgICBWZWN0b3I8
dW5zaWduZWQ+IG1fY29uc3RhbnRSZW1hcDsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2Nv
bnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0Y2hSZW1h
cDsKICAgICAgICAgCkBAIC0xMTMyLDExICs5NTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
aWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdCA9IFZpcnR1YWxSZWdpc3Rlciht
X2NvbnN0YW50UmVtYXBbb3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKV0pOwotICAgICAgICAgICAg
ICAgIEFTU0VSVChyZXN1bHQuaXNDb25zdGFudCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29u
c3RhbnQoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5v
ZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCk7CiAgICAgICAgIH0KQEAg
LTExNzAsOCArOTg2LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGF2ZUJ1aWx0T3BlcmFuZE1h
cHM7CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVuIGlkZW50aWZpZXIgbmFtZXMgYW5kIG51bWJlcnMu
CiAgICAgQm9ycm93ZWRJZGVudGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsKLSAgICAvLyBNYXBw
aW5nIGJldHdlZW4gdmFsdWVzIGFuZCBjb25zdGFudCBudW1iZXJzLgotICAgIEpTVmFsdWVNYXAg
bV9qc1ZhbHVlTWFwOwogICAgIC8vIEluZGV4IG9mIHRoZSBlbXB0eSB2YWx1ZSwgb3IgVUlOVF9N
QVggaWYgdGhlcmUgaXMgbm8gbWFwcGluZy4gVGhpcyBpcyBhIGhvcnJpYmxlCiAgICAgLy8gd29y
ay1hcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5
IiB2YWx1ZXMuCiAgICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsKQEAgLTEyMjIsMTAg
KzEwMzYsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIEFTU0VSVChy
ZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQp
OwogICAgIAotICAgIGlmIChtX2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdldCkpIHsKLSAgICAg
ICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cygKLSAgICAgICAgICAgIG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRydWUpOwotICAgIH0K
KyAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExpbmtTdGF0
dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5jb25zdGFudCgpLT52YWx1ZSgpKS5zZXRJ
c1Byb3ZlZCh0cnVlKTsKICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXpl
KCkpIHsKICAgICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4n
dCBleGVjdXRlZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBo
aWNhbGx5CkBAIC0xNTM2LDcgKzEzNDgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bmxpbmluZyhOb2RlCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3Vs
dE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcykKIHsKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMSkgeyAvLyBNYXRoLm1pbigpCi0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGNvbnN0YW50TmFOKCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFO
KSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgIApAQCAtMTU2MSw3ICsxMzcz
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIHN3aXRj
aCAoaW50cmluc2ljKSB7CiAgICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5hYnMoKQotICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7Cisg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIG1fY29uc3RhbnROYU4pKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9CiAKQEAgLTE1ODUsNyArMTM5Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIENvc0ludHJpbnNpYzoKICAgICBjYXNlIFNpbklu
dHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkg
ewotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3Rh
bnROYU4oKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIG1fY29uc3RhbnROYU4pKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTczMiwxOSArMTU0NCwxOSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgfQogICAgICAgICAK
ICAgICBjYXNlIERGR1RydWVJbnRyaW5zaWM6IHsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbih0cnVlKSkp
OworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBqc0NvbnN0YW50
KGpzQm9vbGVhbih0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogewogICAgICAgICBhZGRUb0dyYXBoKEZvcmNl
T1NSRXhpdCk7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNv
bnN0YW50VW5kZWZpbmVkKCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIG1fY29uc3RhbnRVbmRlZmluZWQpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIElzRmluYWxUaWVy
SW50cmluc2ljOiB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCks
Ci0gICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKE9wdGlvbnM6OnVz
ZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOworICAgICAg
ICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAgICAgCkBAIC0xODM5LDcgKzE2NTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIE5vZGUqIHJlc3VsdDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAxKQotICAgICAgICAgICAgcmVz
dWx0ID0gY2VsbENvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGpzQ29uc3RhbnQobV92bS0+c21hbGxTdHJpbmdzLmVtcHR5U3Ry
aW5nKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKFRv
U3RyaW5nLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KSk7CiAgICAgICAgIApAQCAtMTk4MCw3ICsxNzkyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlJZCgKICAgICAKICAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKICAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIGxvYWRlZFZhbHVlID0gY2VsbENvbnN0YW50
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgbG9hZGVkVmFsdWUg
PSBqc0NvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKICAgICAgICAgICAgIHByZWRpY3Rp
b24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCkBAIC0yMTU0LDkg
KzE5NjYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrKCkKIHsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fY29uc3RhbnRz
W2ldID0gQ29uc3RhbnRSZWNvcmQoKTsKLSAgICBtX2NlbGxDb25zdGFudE5vZGVzLmNsZWFyKCk7
CisgICAgbV9jb25zdGFudHMucmVzaXplKDApOwogfQogCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6
Z2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291bnQpCkBAIC0yMjM1LDEyICsy
MDQ1LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAg
ICAgICAvLyA9PT0gRnVuY3Rpb24gZW50cnkgb3Bjb2RlcyA9PT0KIAotICAgICAgICBjYXNlIG9w
X2VudGVyOgorICAgICAgICBjYXNlIG9wX2VudGVyOiB7CisgICAgICAgICAgICBOb2RlKiB1bmRl
ZmluZWQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIG1fY29uc3RhbnRVbmRlZmluZWQpOwogICAg
ICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm1f
bnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAg
ICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVkLCBJbW1lZGlh
dGVOYWtlZFNldCk7CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAg
ICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLCBjb25zdGFudFVuZGVmaW5l
ZCgpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KDApLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX3RvdWNoX2VudHJ5OgpAQCAtMjI3Myw4ICsyMDg0LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IGNhbGxlZU9wZXJhbmQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogY2FsbGVl
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWVPcGVyYW5kKSk7CiAgICAgICAgICAgICBib29s
IGFscmVhZHlFbWl0dGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoY2FsbGVlLT5vcCgpID09
IFdlYWtKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgSlNDZWxsKiBjZWxsID0gY2FsbGVl
LT53ZWFrQ29uc3RhbnQoKTsKKyAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gSlNDb25z
dGFudCAmJiBjYWxsZWUtPmNvbnN0YW50KCktPnZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAg
ICAgICAgSlNDZWxsKiBjZWxsID0gY2FsbGVlLT5jb25zdGFudCgpLT52YWx1ZS5hc0NlbGwoKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2VsbC0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygp
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNlbGwpOwpAQCAtMjM1MSwxMCArMjE2MiwxMSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAg
fHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkRnVuY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihK
U1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dyYXBoLmZyZWV6ZShjYWNoZWRGdW5jdGlvbik7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGNhY2hlZEZ1bmN0aW9uLT5pbmhlcml0cyhKU0Z1bmN0aW9u
OjppbmZvKCkpKTsKICAgICAgICAgICAgICAgICBOb2RlKiBhY3R1YWxDYWxsZWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGNhY2hlZEZ1bmN0aW9uKSwgYWN0dWFsQ2FsbGVlKTsK
LSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2FjaGVkRnVu
Y3Rpb24pKSk7CisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcElu
Zm8oZnJvemVuKSwgYWN0dWFsQ2FsbGVlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhmcm96ZW4pKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9nZXRfY2FsbGVlKTsKICAgICAgICAgfQpAQCAtMjY0Myw3ICsyNDU1LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ug
b3BfZXFfbnVsbDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpOworICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFu
dCwgbV9jb25zdGFudE51bGwpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcV9udWxs
KTsKICAgICAgICAgfQogCkBAIC0yNjYzLDcgKzI0NzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewogICAg
ICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRk
VG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSkpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50
LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBtX2NvbnN0YW50TnVsbCkpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAtMjc4OCw3
ICsyNjAwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9m
ZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCkpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
RXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGNv
bmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIG1fY29uc3RhbnROdWxsKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJy
YW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwg
bV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKSkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfamVxX251bGwpOwogICAgICAgICB9CkBAIC0y
Nzk2LDcgKzI2MDgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIGNhc2Ugb3Bfam5lcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIG1fY29uc3RhbnROdWxsKSk7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVO
R1RIKG9wX2puZXFfbnVsbCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29u
ZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXFfbnVsbCk7CiAgICAgICAg
IH0KQEAgLTMwNTUsNyArMjg2Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBH
bG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBjYXNlIEds
b2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCB3ZWFrSlNDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6IHsKQEAgLTMwNjMsNyArMjg3NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoYWN0aXZhdGlvbgogICAgICAgICAg
ICAgICAgICAgICAmJiBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJl
ZE9uY2UuaXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
dW5jdGlvblJlZW50cnlXYXRjaHBvaW50LCBPcEluZm8oYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUo
KSkpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxD
b25zdGFudChhY3RpdmF0aW9uKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoYWN0aXZhdGlvbikpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihkc3QpLApAQCAtMzEzMSw3ICsyOTQzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZv
KHdhdGNocG9pbnRTZXQpKTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGluZmVycmVkQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyOgpAQCAtMzE0Nyw3ICsyOTU5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFs
dWUgPSB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHNjb3BlTm9kZSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5mbyh3YXRj
aHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMjQ4LDcgKzMwNjAsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6IHsKLSAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldEpTQ29u
c3RhbnRGb3JWYWx1ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGpzQ29uc3RhbnQoSlNWYWx1ZSgp
KSk7CiAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZElzTG9jYWwoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkudG9Mb2NhbCgpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfbGF6eV9yZWcpOwpAQCAtMzQwMywxMyAr
MzIxNSw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZp
ZXJzKCk7ICsraSkKICAgICAgICAgbV9pZGVudGlmaWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihpKS5pbXBsKCksIGkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdp
c3RlckluZGV4KTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIG1fZW1wdHlKU1Zh
bHVlSW5kZXggPSBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgaSAr
IEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICB9CiAgICAgCiAgICAgbV9oYXZlQnVp
bHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CkBAIC0zNTA3LDcgKzMzMTIsNiBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5i
dWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCiAgICAgICAgIG1faWRlbnRp
ZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAg
ICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dpdGNoUmVtYXAucmVz
aXplKGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkpOwogCkBAIC0zNTE4LDI0
ICszMzIyLDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAg
ICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmlkZW50aWZpZXJzKCkuYWRkTGF6
aWx5KHJlcCk7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVy
YXRvci0+dmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewotICAgICAgICAgICAg
ICAgIGlmIChieXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRleCA9PSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRl
eCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVy
cygpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGJ5
dGVDb2RlUGFyc2VyLT5hZGRDb25zdGFudChKU1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBieXRlQ29kZVBhcnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBi
eXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRleDsKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCBy
ZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5hZGRD
b25zdGFudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3Rh
bnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIH0K
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25z
dGFudEJ1ZmZlcnMoKTsgKytpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBpbmxpbmUgdGhlIHNh
bWUgY29kZSBibG9jayBtdWx0aXBsZSB0aW1lcywgd2UgZG9uJ3Qgd2FudCB0byBuZWVkbGVzc2x5
CiAgICAgICAgICAgICAvLyBkdXBsaWNhdGUgaXRzIGNvbnN0YW50IGJ1ZmZlcnMuCkBAIC0zNTY2
LDEzICszMzUyLDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUK
ICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwogCiAgICAgICAgIG1faWRlbnRpZmllclJl
bWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgICAgIG1f
Y29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVt
YmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dpdGNoUmVtYXAucmVzaXplKGNv
ZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAg
ICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IGk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKLSAg
ICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRCdWZmZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1h
cFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1i
ZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQpAQCAtMzU4MCwxNCArMzM2MywxMyBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1fY2FsbHNpdGVC
bG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVtYXAuc2l6ZSgpOyArK2kpCi0gICAgICAgIEFTU0VS
VChtX2NvbnN0YW50UmVtYXBbaV0gPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KSk7Ci0gICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3Rh
Y2tUb3AgPSB0aGlzOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygp
CiB7CisgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOworICAgIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgCiAgICAgaWYgKG1f
Z3JhcGguY29tcGlsYXRpb24oKSkgewpAQCAtMzY4NCw2ICszNDY2LDggQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogCiAgICAgLy8gU2hvdWxkIGhhdmUgcmVhY2hlZCB0
aGUgZW5kIG9mIHRoZSBpbnN0cnVjdGlvbnMuCiAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID09
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKKyAgICAKKyAgICBwcmVwYXJlVG9Q
YXJzZUJsb2NrKCk7CiB9CiAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRnJvemVu
VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKQor
eworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1cm4gJmVtcHR5OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR0Zyb3plblZhbHVlX2gKKyNkZWZpbmUgREZHRnJvemVuVmFsdWVfaAorCisjaWYgRU5BQkxF
KERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgRnJvemVuVmFsdWUgeworcHVibGljOgorICAgIEZyb3pl
blZhbHVlKCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fc3Ry
b25nKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUoSlNWYWx1ZSB2
YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3RydWN0dXJlKG51
bGxwdHIpCisgICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKTsKKyAgICB9CisgICAgCisgICAgRnJv
emVuVmFsdWUoSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
bV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAg
ICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgICAgICBBU1NFUlQoKCEhdmFsdWUgJiYgdmFs
dWUuaXNDZWxsKCkpID09ICEhc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZSB8fCAh
dmFsdWUuaXNDZWxsKCkgfHwgdmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJvemVuVmFsdWUgZnJl
ZXplKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRnJvemVuVmFsdWUoCisg
ICAgICAgICAgICB2YWx1ZSwgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpID8gdmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBG
cm96ZW5WYWx1ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgCisgICAgdm9pZCBtYXJrU3Ryb25nbHkoKQor
ICAgIHsKKyAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAg
ICBtX3N0cm9uZyA9IHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKG91dCwgY29udGV4dCwg
bV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIEpTVmFsdWUgbV92YWx1ZTsKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJl
OworICAgIGJvb2wgbV9zdHJvbmc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3plblZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2
OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NzAsNiArODcwLDI1IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHYKICAgICB9CiB9CiAKK0Zyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplKEpTVmFs
dWUgdmFsdWUpCit7CisgICAgaWYgKFVOTElLRUxZKCF2YWx1ZSkpCisgICAgICAgIHJldHVybiBG
cm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBhdXRvIHJlc3VsdCA9IG1f
ZnJvemVuVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIG51bGxwdHIpOworICAg
IGlmIChMSUtFTFkoIXJlc3VsdC5pc05ld0VudHJ5KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5p
dGVyYXRvci0+dmFsdWU7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBtX2Zyb3plblZhbHVlcy5hZGQoRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSkpOworfQorCitG
cm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZVN0cm9uZ2x5KEpTVmFsdWUgdmFsdWUpCit7CisgICAg
RnJvemVuVmFsdWUqIHJlc3VsdCA9IGZyZWV6ZSh2YWx1ZSk7CisgICAgcmVzdWx0LT5tYXJrU3Ry
b25nbHkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMTQ0LDM5ICsxNDQsMTggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkZXRocmVhZCgpOwogICAgIAotICAgIHZvaWQgY29udmVydFRvQ29u
c3RhbnQoTm9kZSogbm9kZSwgdW5zaWduZWQgY29uc3RhbnROdW1iZXIpCisgICAgRnJvemVuVmFs
dWUqIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKTsKKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplU3Ryb25n
bHkoSlNWYWx1ZSB2YWx1ZSk7IC8vIFNob3J0aGFuZCBmb3IgZnJlZXplKHZhbHVlKS0+bWFya1N0
cm9uZ2x5KCkuCisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBG
cm96ZW5Db25zdGFudCogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCkKICAgICAgICAgICAgIGRldGhyZWFkKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSk7Ci0gICAgICAg
IG5vZGUtPmNvbnZlcnRUb0NvbnN0YW50KGNvbnN0YW50TnVtYmVyKTsKKyAgICAgICAgbm9kZS0+
Y29udmVydFRvQ29uc3RhbnQodmFsdWUpOwogICAgIH0KICAgICAKLSAgICB1bnNpZ25lZCBjb25z
dGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50UmVnaXN0ZXI7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZpbmRD
b25zdGFudCh2YWx1ZSwgY29uc3RhbnRSZWdpc3RlcikpIHsKLSAgICAgICAgICAgIGNvbnN0YW50
UmVnaXN0ZXIgPSBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsKLSAgICAgICAgICAg
IGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAg
bV9wbGFuLndyaXRlQmFycmllcnMsCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNvbnN0
YW50cygpW2NvbnN0YW50UmVnaXN0ZXJdLAotICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLAot
ICAgICAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsK
LSAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9XZWFrQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb252ZXJ0VG9Db25zdGFudChub2RlLCBjb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQodmFs
dWUpKTsKLSAgICB9Ci0KICAgICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxs
b3cgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBu
YW1lcykuCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSwgRHVt
cENvbnRleHQqID0gMCk7CiAgICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNP
bmx5LCBEdW1wQWxsUGhpcyB9OwpAQCAtMTkwLDExICsxNjksNiBAQCBwdWJsaWM6CiAgICAgLy8g
cHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KICAg
ICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4
dCk7CiAKLSAgICBTcGVjdWxhdGVkVHlwZSBnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT52
YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaykpOwotICAgIH0KLSAgICAKICAgICBBZGRTcGVj
dWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxk
U3BlY3VsYXRlSW50MzIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMikKICAgICB7CiAg
ICAgICAgIEFTU0VSVChhZGQtPm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRo
QWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aFN1Yik7CkBAIC0yOTksODggKzI3Myw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5hcmd1bWVu
dEluZGV4QWZ0ZXJDYXB0dXJlKGFyZ3VtZW50KSk7CiAgICAgfQogICAgIAotICAgIC8vIEhlbHBl
ciBtZXRob2RzIHRvIGNoZWNrIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQo
KTsKLSAgICB9Ci0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBub2RlLT5oYXNDb25zdGFudCgpOwotICAgIH0KLSAgICBib29sIGlzSW50MzJD
b25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmlzSW50MzJD
b25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChO
b2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmlzRG91YmxlQ29uc3RhbnQo
bV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJs
b2NrKTsKLSAgICB9Ci0gICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsK
LSAgICB9Ci0gICAgYm9vbCBpc0NlbGxDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAg
ICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlLmlzQ2VsbCgpICYmICEhdmFsdWU7Ci0gICAgfQotICAgIGJvb2wgaXNGdW5j
dGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFnZXRKU0Z1
bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0
aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50
KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkg
fHwgIXZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU0NlbGwqIGNl
bGwgPSB2YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhJbnRlcm5h
bEZ1bmN0aW9uOjppbmZvKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZh
bHVlcyBmcm9tIG5vZGVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVC
bG9jayk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKLSAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2co
IlZhbHVlIGlzbid0IGludDMyOiAiLCB2YWx1ZSwgIlxuIik7Ci0gICAgICAgICAgICBkdW1wKCk7
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB2YWx1ZS5hc0ludDMyKCk7Ci0gICAgfQotICAgIGRvdWJsZSB2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9m
SlNDb25zdGFudChub2RlKS5hc051bWJlcigpOwotICAgIH0KLSAgICBib29sIHZhbHVlT2ZCb29s
ZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlND
b25zdGFudChub2RlKS5hc0Jvb2xlYW4oKTsKLSAgICB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVP
ZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogZnVu
Y3Rpb24gPSBnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAg
QVNTRVJUKGZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVu
Y3Rpb24pOwotICAgIH0KLQogICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUp
OwogICAgIAogICAgIFN0cnVjdHVyZVNldCogYWRkU3RydWN0dXJlU2V0KGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0KQpAQCAtODE4LDYgKzcxMCwxMCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgVmVjdG9yPCBSZWZQdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8
RWRnZSwgMTY+IG1fdmFyQXJnQ2hpbGRyZW47CisKKyAgICBIYXNoTWFwPEVuY29kZWRKU1ZhbHVl
LCBGcm96ZW5WYWx1ZSosIEVuY29kZWRKU1ZhbHVlSGFzaCwgRW5jb2RlZEpTVmFsdWVIYXNoVHJh
aXRzPiBtX2Zyb3plblZhbHVlTWFwOworICAgIEJhZzxGcm96ZW5WYWx1ZT4gbV9mcm96ZW5WYWx1
ZXM7CisgICAgCiAgICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NE
YXRhOwogICAgIFZlY3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVj
dG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwpAQCAtODYw
LDcgKzc1Niw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5o
YXNDb25zdGFudCgpKTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUg
PSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgSlNW
YWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKICAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJu
IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICAgICAgCkBAIC04ODIsNyArNzc4LDcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChpbW1lZGlhdGUtPmhhc0NvbnN0YW50KCkpOwogICAg
ICAgICAKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS0+dmFsdWVP
ZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVl
ID0gaW1tZWRpYXRlLT5jb25zdGFudCgpLT52YWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0
ZVZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkocmV2
aXNpb24gMTY5MjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6
Z2V0VmFsdWUoVk0mIHZtKSBjbwogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBL
bm93blZhbHVlOgotICAgICAgICByZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCktPnZhbHVlKCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJl
dHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNl
IEtub3duU3RyaW5nSW1wbDoKQEAgLTgxLDExICs4MSwxMSBAQCBUcmlTdGF0ZSBMYXp5SlNWYWx1
ZTo6c3RyaWN0RXF1YWwoY29uc3QgCiAgICAgY2FzZSBLbm93blZhbHVlOgogICAgICAgICBzd2l0
Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90aGVyLnZhbHVlKCkp
OworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSgpLT52
YWx1ZSgpLCBvdGhlci52YWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgY2FzZSBTaW5nbGVDaGFy
YWN0ZXJTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxUb1NpbmdsZUNoYXJhY3Rlcih2
YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1Np
bmdsZUNoYXJhY3Rlcih2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CiAgICAg
ICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJp
bmdJbXBsKHZhbHVlKCksIG90aGVyLnN0cmluZ0ltcGwoKSk7CisgICAgICAgICAgICByZXR1cm4g
ZXF1YWxUb1N0cmluZ0ltcGwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuc3RyaW5nSW1wbCgpKTsK
ICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmlu
ZzoKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyCiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNlIEtub3duVmFsdWU6Ci0g
ICAgICAgIHZhbHVlKCkuZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgICAgICB2YWx1
ZSgpLT5kdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICBj
YXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgb3V0LnByaW50KCJMYXp5OlNpbmds
ZUNoYXJhY3RlclN0cmluZygiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xhenlKU1ZhbHVlLmgJKHJldmlzaW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAi
REZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ0LDcgKzQ0LDcgQEAgZW51bSBMYXpp
bmVzc0tpbmQgewogCiBjbGFzcyBMYXp5SlNWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgTGF6eUpTVmFs
dWUoSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICBMYXp5SlNWYWx1ZShGcm96ZW5WYWx1
ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKSkKICAgICAgICAgOiBtX2tp
bmQoS25vd25WYWx1ZSkKICAgICB7CiAgICAgICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpOwpAQCAtNjYsMTkgKzY2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSB0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAgRnJv
emVuVmFsdWUqIHRyeUdldFZhbHVlKEdyYXBoJikgY29uc3QKICAgICB7CiAgICAgICAgIGlmICht
X2tpbmQgPT0gS25vd25WYWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZSgpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAg
CiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShWTSYpIGNvbnN0OwogICAgIAotICAgIEpTVmFsdWUgdmFs
dWUoKSBjb25zdAorICAgIEZyb3plblZhbHVlKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQobV9raW5kID09IEtub3duVmFsdWUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZGVjb2RlKHUudmFsdWUpOworICAgICAgICByZXR1cm4gdS52YWx1ZTsKICAgICB9CiAgICAgCiAg
ICAgVUNoYXIgY2hhcmFjdGVyKCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIC8vIGZvciBhIGtpbmQgb2YgdmFsdWUgdGhhdCBjYW4ndC4KICAgICAgICAgc3dpdGNo
IChtX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAgcmV0dXJu
IHZhbHVlKCkuYXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVlKCku
YXNJbnQzMigpOwogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAg
ICAgIHJldHVybiBjaGFyYWN0ZXIoKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExNiw3ICsxMTYs
NyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHVuaW9uIHsKLSAgICAgICAgRW5jb2Rl
ZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZTsKICAgICAgICAgVUNo
YXIgY2hhcmFjdGVyOwogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsOwogICAgIH0gdTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjkyMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDM0LDcgKzQzNCw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6
Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNDQy
LDEzICs0NDEsMTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogCi0gICAgdW5z
aWduZWQgY29uc3RhbnROdW1iZXIoKQorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaXNDb25zdGFudCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZv
OworICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChvcCgpID09IFBo
YW50b21Bcmd1bWVudHMpCisgICAgICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5U2lu
Z2xldG9uKCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RnJvemVuVmFsdWUqPihtX29w
SW5mbyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQodW5zaWduZWQg
Y29uc3RhbnROdW1iZXIpCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChGcm96ZW5WYWx1ZSog
dmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaGFzRG91YmxlUmVzdWx0KCkpCiAgICAgICAgICAg
ICBtX29wID0gRG91YmxlQ29uc3RhbnQ7CkBAIC00NTcsMTUgKzQ1OCw3IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9vcCA9IEpTQ29uc3RhbnQ7CiAgICAgICAg
IG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVD
bG9iYmVyc1dvcmxkKTsKLSAgICAgICAgbV9vcEluZm8gPSBjb25zdGFudE51bWJlcjsKLSAgICAg
ICAgY2hpbGRyZW4ucmVzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9XZWFr
Q29uc3RhbnQoSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgbV9vcCA9IFdlYWtKU0NvbnN0
YW50OwotICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENs
b2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oY2VsbCk7CisgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4odmFsdWUpOwogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KICAgICAK
QEAgLTU0NSw1MiArNTM4LDI0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcCA9IFRvU3Ry
aW5nOwogICAgIH0KICAgICAKLSAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpCi0gICAgewotICAg
ICAgICBBU1NFUlQob3AoKSA9PSBXZWFrSlNDb25zdGFudCk7Ci0gICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8SlNDZWxsKj4obV9vcEluZm8pOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIHZh
bHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgc3dp
dGNoIChvcCgpKSB7Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSh3ZWFrQ29uc3RhbnQoKSk7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDoK
LSAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50
OgotICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVyKCkpLmdldCgpOwotICAgICAgICBj
YXNlIFBoYW50b21Bcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7IC8vIEhhdmUgdG8gcmV0dXJuIHNvbWV0aGlu
ZyBpbiByZWxlYXNlIG1vZGUuCi0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzSW50MzJD
b25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBib29sIGlzSW50MzJDb25zdGFudCgp
CiAgICAgewotICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50
KGNvZGVCbG9jaykuaXNJbnQzMigpOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNv
bnN0YW50KCktPnZhbHVlKCkuaXNJbnQzMigpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzRG91
YmxlQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0
YW50KCkKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaXNDb25zdGFudCgpICYmIHZhbHVl
T2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNEb3VibGUoKTsKLSAgICAgICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jaykpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50
KCktPnZhbHVlKCkuaXNEb3VibGUoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc051bWJlckNv
bnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudCgp
CiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2spLmlzTnVtYmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
KGlzSW50MzJDb25zdGFudChjb2RlQmxvY2spIHx8IGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2Nr
KSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgp
ICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNOdW1iZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc0Jvb2xlYW5Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBib29sIGlzQm9v
bGVhbkNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQm9vbGVhbigpOwogICAgIH0KICAg
ICAKICAgICBib29sIGNvbnRhaW5zTW92SGludCgpCkBAIC0xMDQzLDExICsxMDA4LDExIEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIEpTQ2VsbCogZnVuY3Rpb24oKQor
ICAgIEZyb3plblZhbHVlKiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBBU1NFUlQoaGFzRnVu
Y3Rpb24oKSk7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxKU0Z1
bmN0aW9uKj4obV9vcEluZm8pOwotICAgICAgICBBU1NFUlQoSlNWYWx1ZShyZXN1bHQpLmlzRnVu
Y3Rpb24oKSk7CisgICAgICAgIEZyb3plblZhbHVlKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0
PEZyb3plblZhbHVlKj4obV9vcEluZm8pOworICAgICAgICBBU1NFUlQocmVzdWx0LT52YWx1ZSgp
LmlzRnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY5MjM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSwxMCArNDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oRG91YmxlQ29uc3RhbnQsIE5vZGVSZXN1bHREb3VibGUgfCBOb2RlRG9lc05vdEV4
aXQpIFwKICAgICBtYWNybyhJbnQ1MkNvbnN0YW50LCBOb2RlUmVzdWx0SW50NTIgfCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBcCi0gICAgLyogQSBjb25zdGFudCBub3QgaW4gdGhlIENvZGVCbG9j
aydzIGNvbnN0YW50IHBvb2wuIFVzZXMgZ2V0IHBhdGNoZWQgdG8ganVtcHMgdGhhdCBleGl0IHRo
ZSAqL1wKLSAgICAvKiBjb2RlIGJsb2NrLiAqL1wKLSAgICBtYWNybyhXZWFrSlNDb25zdGFudCwg
Tm9kZVJlc3VsdEpTIHwgTm9kZURvZXNOb3RFeGl0KSBcCi0gICAgXAogICAgIC8qIE1hcmtlciB0
byBpbmRpY2F0ZSB0aGF0IGFuIG9wZXJhdGlvbiB3YXMgb3B0aW1pemVkIGVudGlyZWx5IGFuZCBh
bGwgdGhhdCBpcyBsZWZ0ICovXAogICAgIC8qIGlzIHRvIG1ha2Ugb25lIG5vZGUgYWxpYXMgYW5v
dGhlci4gQ1NFIHdpbGwgbGF0ZXIgdXN1YWxseSBlbGltaW5hdGUgdGhpcyBub2RlLCAqL1wKICAg
ICAvKiB0aG91Z2ggaXQgbWF5IGNob29zZSBub3QgdG8gaWYgaXQgd291bGQgY29ycnVwdCBwcmVk
aWN0aW9ucyAodmVyeSByYXJlKS4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTY5MjM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2
ICsxOTEsMTMgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogCiB2
b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQq
IGNvbnRleHQpIGNvbnN0CiB7CisgICAgZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKAor
ICAgICAgICBvdXQsIGNvbnRleHQsICghISp0aGlzICYmIGlzQ2VsbCgpKSA/IGFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworfQorCit2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHRB
c3N1bWluZ1N0cnVjdHVyZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CiAgICAgaWYgKCEqdGhpcykKICAg
ICAgICAgb3V0LnByaW50KCI8SlNWYWx1ZSgpPiIpOwogICAgIGVsc2UgaWYgKGlzSW50MzIoKSkK
QEAgLTIwNyw3ICsyMTQsNyBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mCiAgICAgICAgIG91dC5wcmludGYoIkRvdWJsZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdv
SW50MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBhc0RvdWJsZSgpKTsKICNlbmRpZgogICAgIH0g
ZWxzZSBpZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cyhKU1N0
cmluZzo6aW5mbygpKSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNT
dWJjbGFzc09mKEpTU3RyaW5nOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3Ry
aW5nID0ganNDYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOwogICAgICAgICAgICAgb3V0LnByaW50
KCJTdHJpbmciKTsKICAgICAgICAgICAgIGlmIChzdHJpbmctPmlzUm9wZSgpKQpAQCAtMjIzLDEx
ICsyMzAsMTEgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJgogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQp
Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1wbCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoYXNDZWxsKCktPmluaGVyaXRzKFN0cnVjdHVyZTo6aW5mbygpKSkKKyAgICAgICAgfSBlbHNl
IGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YmNsYXNzT2YoU3RydWN0dXJlOjppbmZv
KCkpKQogICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmU6ICIsIGluQ29udGV4dCgqanND
YXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKSwgY29udGV4dCkpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIG91dC5wcmludCgiQ2VsbDogIiwgUmF3UG9pbnRlcihhc0NlbGwoKSkpOwotICAg
ICAgICAgICAgb3V0LnByaW50KCIgKCIsIGluQ29udGV4dCgqYXNDZWxsKCktPnN0cnVjdHVyZSgp
LCBjb250ZXh0KSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBpbkNvbnRleHQo
KnN0cnVjdHVyZSwgY29udGV4dCksICIpIik7CiAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICBvdXQucHJpbnQoIiwgSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlz
aW9uIDE2OTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBk
dW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCos
IFN0cnVjdHVyZSopIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHN5
bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232492</attachid>
            <date>2014-06-04 12:38:44 -0700</date>
            <delta_ts>2014-06-04 14:57:35 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>103786</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBACiAJCTBGNjY2RUNEMTgzNkIz
N0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0Uw
MEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKKwkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcg
LyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQjkxODYxMjQ0QzAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjEzMSw2ICsyMTMzLDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0g
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zyb3plblZh
bHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5oOyBwYXRo
ID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpT
Q2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTIsNiArNDcxNiw4IEBACiAJCQkJMEY5RDMzOTUxN0ZGQzRF
NjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCiAJCQkJQTdEODlDRTkxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggKi8sCisJCQkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLywKKwkJCQkwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuaCAqLywKIAkJCQkyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovLAogCQkJCTJBODgwNjc3MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLApAQCAtNTU3Miw2ICs1NTc4LDcgQEAKIAkJ
CQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2OUNDODkxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0
MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02ODcyLDYgKzY4NzksNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYw
MDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0
MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xl
YW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VDMTFBMDAx
M0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NTEw
N0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBub2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShUIG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUp
OwogICAgIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIEZpbHRy
YXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7
CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRU
eXBlKTsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYs
IEpTVmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZh
bHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3Js
ZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKQEAgLTE2NSwxNCAr
MTY1LDE0IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1
bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsKICAgICAKLSAgICB2b2lkIHNldEJ1aWx0SW5Db25z
dGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgc2V0QnVpbHRJbkNvbnN0
YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGFic3RyYWN0
VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KTsKICAgICAgICAgYWJzdHJhY3RWYWx1ZS5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obm9kZSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB2b2lkIHNldENvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVl
KQogICAgIHsKICAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw4
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3Rh
bnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
IHsKLSAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsIG1fZ3JhcGgudmFsdWVPZkpTQ29u
c3RhbnQobm9kZSkpOworICAgICAgICBzZXRCdWlsdEluQ29uc3RhbnQobm9kZSwgKm5vZGUtPmNv
bnN0YW50KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtODU1LDMyICs4
NTQsMzIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0g
anNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkKTsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIHR5cGVTdHJpbmcpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGgu
ZnJlZXplKHR5cGVTdHJpbmcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdz
Lm51bWJlclN0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBo
LmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRp
b24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcnJh
eVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0
aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmco
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkp
OworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHZtLT5zbWFs
bFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICpt
X2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTQzMiw3ICsxNDMxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgU2tpcFNjb3BlOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwog
ICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpOworICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKEpTVmFsdWUoanNDYXN0PEpTU2Nv
cGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjT2JqZWN0T3RoZXIpOwpA
QCAtMTQ3OSw3ICsxNDc4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNb
MF0uc3BlY2lmaWNWYWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAg
ICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQo
KSk7CkBAIC0xNzYzLDE0ICsxNzYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBub2Rl
LT5mdW5jdGlvbigpLT52YWx1ZSgpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgZmlsdGVyQnlWYWx1ZShub2Rl
LT5jaGlsZDEoKSwgKm5vZGUtPmZ1bmN0aW9uKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMjEyNCw3ICsyMTIzLDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdElu
dGVycHJldGVyPEFicwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZp
bHRlckJ5VmFsdWUoCi0gICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBj
b25jcmV0ZVZhbHVlKQorICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0VmFsdWUsIEZyb3plblZh
bHVlIGNvbmNyZXRlVmFsdWUpCiB7CiAgICAgaWYgKGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1
ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0
aW9uT0s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCB2
b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogfQogCi12b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYg
Z3JhcGgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZp
YyhHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoISF2
YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS52
YWx1ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
c3RydWN0dXJlKCk7CiAgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0
dXJlKTsKICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKQEAgLTU5LDE3
ICs1OSwxNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgICAgICAKLSAgICBtX3R5cGUgPSBzcGVj
dWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSk7Ci0gICAgbV92YWx1ZSA9IHZhbHVlOworICAgIG1fdHlw
ZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWUgPSB2
YWx1ZS52YWx1ZSgpOwogICAgICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgYXNz
ZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgm
IGdyYXBoLCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRl
KQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1
ZSYgdmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCiB7Ci0gICAgaWYg
KCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCEhdmFsdWUgJiYgdmFs
dWUudmFsdWUoKS5pc0NlbGwoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRl
cihzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBhc3N1
bWUgdGhhdCB0aGUgd2F0Y2hwb2ludCBmb3IgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIHNldC4KICAg
ICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4ndCBiZWNhdXNlIG91ciB2aWV3IG9mIHdoYXQgc3RydWN0
dXJlIGEgdmFsdWUgaGFzIGtlZXBzIGNoYW5naW5nLiBUaGF0J3MKQEAgLTkwLDggKzkwLDggQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKUwogICAgICAgICBtX2FycmF5
TW9kZXMgPSAwOwogICAgIH0KICAgICAKLSAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZSk7Ci0gICAgbV92YWx1ZSA9IHZhbHVlOworICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9u
RnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwog
ICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgp
OwpAQCAtMjIxLDExICsyMjEsMTEgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXIoUwogICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KCk7CiB9CiAKLUZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnlWYWx1ZShKU1ZhbHVlIHZhbHVlKQorRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3plblZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IGZpbHRlcihzcGVjdWxh
dGlvbkZyb21WYWx1ZSh2YWx1ZSkpOworICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0gZmls
dGVyKHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpKTsKICAgICBpZiAobV90eXBl
KQotICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1
ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZH
RmlsdHJhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
IgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgpAQCAtMTczLDggKzE3NCw4
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgmLCBKU1ZhbHVlKTsKLSAgICB2
b2lkIHNldChHcmFwaCYsIEpTVmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisgICAgdm9p
ZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgmLCBjb25zdCBGcm96ZW5WYWx1ZSYpOworICAgIHZvaWQg
c2V0KEdyYXBoJiwgY29uc3QgRnJvemVuVmFsdWUmLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwog
ICAgIHZvaWQgc2V0KEdyYXBoJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKQEAgLTI2Miw3ICsyNjMsNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEpT
VmFsdWUgdmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBG
cm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIAogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1
ZSkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw4ICsyMDgsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0X2xhenlfcmVnIHNpbmNlIGl0IHRy
ZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJlIGZpeGVkLCBidXQgaXQncyBlYXNpZXIg
dG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvcmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgPT0gSlNDb25zdGFudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgPT0g
SlNDb25zdGFudCAmJiAhKnNvdXJjZS0+Y29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRvdGFsbHkgZGVhZCwgdGhlbiBpZ25vcmUg
aXQuCkBAIC01MTEsNyArNTEwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBvcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252
ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKG9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBtX2dyYXBoLmZyZWV6ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqc051bWJlcihvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAg
LTUzMCw3ICs1MzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygp
KTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgpLT5j
b25zdGFudCgpLT52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50
MzIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBpbnQzMl90IGluZGV4ID0gdmFsdWUuYXNJbnQzMigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNyArNjcs
MTcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzTm90TmVnWmVybyhOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCisg
ICAgICAgIGlmICghbm9kZS0+Y29uc3RhbnQoKS0+dmFsdWUoKS5pc051bWJlcigpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVl
T2ZOdW1iZXJDb25zdGFudChub2RlKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbm9kZS0+Y29u
c3RhbnQoKS0+dmFsdWUoKS5hc051bWJlcigpOwogICAgICAgICByZXR1cm4gKHZhbHVlIHx8IDEu
MCAvIHZhbHVlID4gMC4wKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc05vdFBvc1plcm8oTm9k
ZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5v
ZGUpKQorICAgICAgICBpZiAoIW5vZGUtPmNvbnN0YW50KCktPnZhbHVlKCkuaXNOdW1iZXIoKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG5v
ZGUtPmNvbnN0YW50KCktPnZhbHVlKCkuYXNOdW1iZXIoKTsKICAgICAgICAgcmV0dXJuICh2YWx1
ZSB8fCAxLjAgLyB2YWx1ZSA8IDAuMCk7CiAgICAgfQogCkBAIC04NSw3ICs4NSw3IEBAIHByaXZh
dGU6CiAgICAgdGVtcGxhdGU8aW50IHBvd2VyPgogICAgIGJvb2wgaXNXaXRoaW5Qb3dlck9mVHdv
Rm9yQ29uc3RhbnQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRl
VmFsdWUgPSBub2RlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgIEpT
VmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBub2RlLT5jb25zdGFudCgpLT52YWx1ZSgpOwogICAgICAg
ICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGRvdWJsZSBpbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc051bWJlcigp
OwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBzaGlmdEFt
b3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChzaGlmdEFtb3Vu
dC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpT
Q29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1
ZSA9IHNoaWZ0QW1vdW50LT5jb25zdGFudCgpLT52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFp
bW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKSA+IDMyIC0gcG93ZXI7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxOCArMTMyLDE2IEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudEJsb2Nr
KDApCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKLSAgICAgICAgLCBtX2NvbnN0YW50VW5k
ZWZpbmVkKFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnROdWxsKFVJTlRfTUFYKQotICAg
ICAgICAsIG1fY29uc3RhbnROYU4oVUlOVF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFudDEoVUlO
VF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFudHMobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3Rh
bnRSZWdpc3RlcnMoKSkKKyAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKGdyYXBoLmZyZWV6
ZShqc1VuZGVmaW5lZCgpKSkKKyAgICAgICAgLCBtX2NvbnN0YW50TnVsbChncmFwaC5mcmVlemUo
anNOdWxsKCkpKQorICAgICAgICAsIG1fY29uc3RhbnROYU4oZ3JhcGguZnJlZXplKGpzTnVtYmVy
KFBOYU4pKSkKKyAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigx
KSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMo
KSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3Rl
cnMpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2Vk
VmFyQXJncygwKQogICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKICAgICAgICAgLCBtX2hh
dmVCdWlsdE9wZXJhbmRNYXBzKGZhbHNlKQotICAgICAgICAsIG1fZW1wdHlKU1ZhbHVlSW5kZXgo
VUlOVF9NQVgpCiAgICAgICAgICwgbV9jdXJyZW50SW5zdHJ1Y3Rpb24oMCkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwpAQCAtMjE3LDEyICsyMTUsNyBAQCBwcml2YXRl
OgogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3Ry
dWN0aW9uLgogICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAg
ICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KLSAgICAgICAgaWYgKG9wZXJhbmQu
aXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQu
dG9Db25zdGFudEluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQgPCBtX2NvbnN0
YW50cy5zaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnQp
OwotICAgICAgICB9CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogCiAg
ICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJn
dW1lbnQoKSkKQEAgLTIzNCwxMyArMjI3LDI1IEBAIHByaXZhdGU6CiAKICAgICBOb2RlKiBnZXQo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5k
LnRvQ29uc3RhbnRJbmRleCgpOworICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gbV9j
b25zdGFudHMuc2l6ZSgpIHx8IG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7CisgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5n
ZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3Rh
bnRJbmRleCA+PSBtX2NvbnN0YW50cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIG1fY29u
c3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOworICAgICAgICAgICAgICAgIG1fY29uc3Rh
bnRzW2NvbnN0YW50SW5kZXhdID0KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmdseSh2YWx1ZSkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XTsKKyAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAg
ICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAg
ICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlZUNv
bnN0YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFj
azo6Q2FsbGVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50KGNhbGxl
ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0NvbnN0YW50KGNhbGxlZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6U2NvcGVDaGFpbikK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudChjYWxsZWUtPnNjb3BlKCkp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNDb25zdGFudChjYWxsZWUtPnNjb3BlKCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0g
SlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVl
KTsKQEAgLTMwOSwxNCArMzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKG1fY29kZUJsb2Nr
LT5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFi
bGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6
IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQgc3RhbmRwb2ludC4gV2Ugd291
bGRuJ3QgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0byBkbyB0aGlzIGZvciBtb3N0
IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdyZSBkZWFsaW5nCi0gICAgICAg
ICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBGb3IgbW9zdCBsb2NhbHMgd2Ug
d291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCi0gICAgICAgICAgICAgICAgICAgIC8vIGhl
cmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcgSVIgd2hlcmV2ZXIgdGhlcmUg
d291bGQgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIHVzZXMgaW4gYnl0ZWNvZGUu
IENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8gdGhpcy4gQnV0Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gdHJh
Y2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCi0gICAgICAgICAgICAgICAgICAgIC8vIGxvY2Fscywg
YW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9yIGNhcHR1cmVkIGxvY2Fscy4K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29uc3RhbnQodmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4ganNDb25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NTQsMzIgKzU1MiwxNSBAQCBwcml2
YXRlOgogICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAgfQogCi0gICAgLy8gTk9URTog
T25seSB1c2UgdGhpcyB0byBjb25zdHJ1Y3QgY29uc3RhbnRzIHRoYXQgYXJpc2UgZnJvbSBub24t
c3BlY3VsYXRpdmUKLSAgICAvLyBjb25zdGFudCBmb2xkaW5nLiBJLmUuIGNyZWF0aW5nIGNvbnN0
YW50cyB1c2luZyB0aGlzIGlmIHdlIGhhZCBjb25zdGFudAotICAgIC8vIGZpZWxkIGluZmVyZW5j
ZSB3b3VsZCBiZSBhIGJhZCBpZGVhLCBzaW5jZSB0aGUgYnl0ZWNvZGUgcGFyc2VyJ3MgZm9sZGlu
ZwotICAgIC8vIGRvZXNuJ3QgaGFuZGxlIGxpdmVuZXNzIHByZXNlcnZhdGlvbi4KLSAgICBOb2Rl
KiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQorICAgIC8vIEFz
c3VtZXMgdGhhdCB0aGUgY29uc3RhbnQgc2hvdWxkIGJlIHN0cm9uZ2x5IG1hcmtlZC4KKyAgICBO
b2RlKiBqc0NvbnN0YW50KEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50SW5kZXg7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZpbmRDb25z
dGFudChjb25zdGFudFZhbHVlLCBjb25zdGFudEluZGV4KSkgewotICAgICAgICAgICAgYWRkQ29u
c3RhbnQoY29uc3RhbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29u
c3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2Nv
bnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMo
KSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFudEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGgu
ZnJlZXplU3Ryb25nbHkoY29uc3RhbnRWYWx1ZSkpKTsKICAgICB9CiAKLSAgICBOb2RlKiBnZXRK
U0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIHdlYWtKU0NvbnN0YW50KEpT
VmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBtX2NvbnN0
YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAobm9kZSkKLSAgICAgICAgICAg
IHJldHVybiBub2RlOwotCi0gICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKGNvbnN0YW50KSk7Ci0gICAgICAgIG1fY29uc3RhbnRzW2NvbnN0YW50XS5h
c0pTVmFsdWUgPSByZXN1bHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb25zdGFudFZh
bHVlKSkpOwogICAgIH0KIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdG8gZ2V0L3NldCB0aGUg
dGhpcyB2YWx1ZS4KQEAgLTU5MywxNDkgKzU3NCw2IEBAIHByaXZhdGU6CiAgICAgICAgIHNldCht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIHZhbHVlKTsKICAg
ICB9CiAKLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBjaGVja2luZyBub2RlcyBmb3Ig
Y29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50OwotICAgIH0KLSAgICBib29sIGlz
SW50MzJDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzSlNDb25z
dGFudChub2RlKSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0ludDMyKCk7Ci0gICAgfQot
ICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcgY29uc3RhbnQgdmFsdWVzLgot
ICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29uc3RhbnRO
dW1iZXIoKSk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkpOwotICAg
ICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwotICAgIH0KLSAg
ICAKLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3aXRoIHRoZSB2YWx1
ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlKiBjb25zdGFudFVuZGVmaW5lZCgpCi0gICAgewotICAg
ICAgICAvLyBIYXMgbV9jb25zdGFudFVuZGVmaW5lZCBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAg
IGlmIChtX2NvbnN0YW50VW5kZWZpbmVkID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAvLyBT
ZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIHVuZGVmaW5lZCwgaWYgd2UgZmluZCBpdCwgd2Ug
Y2FuIGp1c3QgcmV1c2UgdGhpcyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3Rh
bnRzID0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAg
ICAgIGZvciAobV9jb25zdGFudFVuZGVmaW5lZCA9IDA7IG1fY29uc3RhbnRVbmRlZmluZWQgPCBu
dW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50VW5kZWZpbmVkKSB7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFu
dFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50VW5kZWZpbmVkKTsKLSAgICAgICAgICAgICAgICBp
ZiAodGVzdE1lLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KG1fY29uc3RhbnRVbmRlZmluZWQpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAvLyBBZGQgdW5kZWZpbmVkIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMsIGFuZCBh
ZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAgICBBU1NF
UlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAgICAgICAg
IGFkZENvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgbV9jb25zdGFudHMuYXBw
ZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNp
emUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIG1fY29uc3RhbnRVbmRlZmluZWQgbXVzdCByZWZlciB0byBhbiBl
bnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUgdmFsdWUg
J3VuZGVmaW5lZCcuCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50VW5kZWZpbmVkKS5pc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudFVuZGVmaW5lZCk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIEpTQ29uc3RhbnQgd2l0aCB0
aGUgdmFsdWUgJ251bGwnLgotICAgIE5vZGUqIGNvbnN0YW50TnVsbCgpCi0gICAgewotICAgICAg
ICAvLyBIYXMgbV9jb25zdGFudE51bGwgYmVlbiBzZXQgdXAgeWV0PwotICAgICAgICBpZiAobV9j
b25zdGFudE51bGwgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29u
c3RhbnQgcG9vbCBmb3IgbnVsbCwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhp
cyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9jb25zdGFu
dE51bGwgPSAwOyBtX2NvbnN0YW50TnVsbCA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3Rh
bnROdWxsKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TnVsbCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RNZS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE51bGwpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBBZGQgbnVsbCB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBh
bmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAgICAgICAg
QVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAg
ICAgICBhZGRDb25zdGFudChqc051bGwoKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBl
bmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6
ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudE51bGwgbXVzdCByZWZlciB0byBhbiBlbnRyeSBp
biB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUgdmFsdWUgJ251bGwn
LgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE51bGwpLmlzTnVsbCgpKTsKLSAgICAgICAgcmV0dXJu
IGdldEpTQ29uc3RhbnQobV9jb25zdGFudE51bGwpOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAxLgotICAgIE5vZGUq
IG9uZSgpCi0gICAgewotICAgICAgICAvLyBIYXMgbV9jb25zdGFudDEgYmVlbiBzZXQgdXAgeWV0
PwotICAgICAgICBpZiAobV9jb25zdGFudDEgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8v
IFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3IgdGhlIHZhbHVlIDEsIGlmIHdlIGZpbmQgaXQs
IHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNv
bnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7Ci0gICAg
ICAgICAgICBmb3IgKG1fY29uc3RhbnQxID0gMDsgbV9jb25zdGFudDEgPCBudW1iZXJPZkNvbnN0
YW50czsgKyttX2NvbnN0YW50MSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdGVzdE1lID0g
bV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9j
b25zdGFudDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0TWUuaXNJbnQzMigpICYmIHRlc3RN
ZS5hc0ludDMyKCkgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3Rh
bnQobV9jb25zdGFudDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgdGhl
IHZhbHVlIDEgdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3Bv
bmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50
cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAgICAgICAgYWRkQ29uc3RhbnQo
anNOdW1iZXIoMSkpOwotICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVj
b3JkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIG1fY29uc3RhbnQxIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydz
IGNvbnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIGludGVnZXIgdmFsdWUgMS4KLSAgICAgICAgQVNT
RVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCAr
IG1fY29uc3RhbnQxKS5pc0ludDMyKCkpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmFzSW50
MzIoKSA9PSAxKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudDEpOwot
ICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQg
d2l0aCB0aGUgdmFsdWUgTmFOLgotICAgIE5vZGUqIGNvbnN0YW50TmFOKCkKLSAgICB7Ci0gICAg
ICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhhcyBtX2Nv
bnN0YW50TmFOIGJlZW4gc2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnROYU4gPT0g
VUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3Ig
dGhlIHZhbHVlIE5hTiwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhpcyEKLSAg
ICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9jb25zdGFudE5hTiA9
IDA7IG1fY29uc3RhbnROYU4gPCBudW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50TmFOKSB7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKTsKLSAgICAgICAg
ICAgICAgICBpZiAoSlNWYWx1ZTo6ZW5jb2RlKHRlc3RNZSkgPT0gSlNWYWx1ZTo6ZW5jb2RlKG5h
bikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnRO
YU4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgdGhlIHZhbHVlIG5hbiB0
byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90
IGluIG1fY29uc3RhbnRzLgotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9
PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAgICAgICBhZGRDb25zdGFudChuYW4pOwotICAg
ICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAg
ICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25z
dGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1fY29uc3RhbnROYU4g
bXVzdCByZWZlciB0byBhbiBlbnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0
aGF0IGhhcyB0aGUgdmFsdWUgbmFuLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE5hTikuaXNEb3Vi
bGUoKSk7Ci0gICAgICAgIEFTU0VSVChzdGQ6OmlzbmFuKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnROYU4pLmFzRG91YmxlKCkp
KTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE5hTik7Ci0gICAgfQot
ICAgIAotICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCi0gICAgewotICAgICAg
ICBIYXNoTWFwPEpTQ2VsbCosIE5vZGUqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2VsbENvbnN0
YW50Tm9kZXMuYWRkKGNlbGwsIG51bGxwdHIpOwotICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50
cnkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghSGVhcDo6aXNab21iaWZpZWQoY2VsbCkpOwotICAg
ICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pTQ29uc3Rh
bnQsIE9wSW5mbyhjZWxsKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBpbmZlcnJlZENv
bnN0YW50KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkp
Ci0gICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAg
ICAgcmV0dXJuIGdldEpTQ29uc3RhbnRGb3JWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotICAgIAogICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKCkKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZTsKQEAgLTgzMSwxNCArNjY5LDE0
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNo
ZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAg
IE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKKyAgICAgICAgTm9kZSog
b2JqZWN0Tm9kZSA9IGpzQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFwaChDaGVj
a1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVyZSkpLCBv
YmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgfQogICAgIAogICAg
IE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sob2JqZWN0
LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudFdpdGhT
dHJ1Y3R1cmVDaGVjayhvYmplY3QsIG1fZ3JhcGguZnJlZXplKG9iamVjdCktPnN0cnVjdHVyZSgp
KTsKICAgICB9CiAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4
aXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTk5NywzNiArODM1LDExIEBAIHByaXZhdGU6
CiAgICAgLy8gVGhlIGJ5dGVjb2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGJl
aW5nIGdlbmVyYXRlZC4KICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKIAotICAgIC8vIFdl
IHVzZSB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIHRvIGF2b2lkIHRo
ZSBuZWVkIGZvcgotICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgd2UgbWFrZSBzdXJlIHRoZXkgYXJl
IGF2YWlsYWJsZSBhcyBjb25zdGFudHMgaW4gdGhlCi0gICAgLy8gQ29kZUJsb2NrJ3MgY29uc3Rh
bnQgcG9vbC4gVGhlc2UgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCB0bwotICAgIC8vIFVJTlRf
TUFYLCBhbmQgbGF6aWx5IHVwZGF0ZWQgdG8gaG9sZCBhbiBpbmRleCBpbnRvIHRoZSBDb2RlQmxv
Y2sncwotICAgIC8vIGNvbnN0YW50IHBvb2wsIGFzIG5lY2Vzc2FyeS4KLSAgICB1bnNpZ25lZCBt
X2NvbnN0YW50VW5kZWZpbmVkOwotICAgIHVuc2lnbmVkIG1fY29uc3RhbnROdWxsOwotICAgIHVu
c2lnbmVkIG1fY29uc3RhbnROYU47Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudDE7Ci0gICAgSGFz
aE1hcDxKU0NlbGwqLCB1bnNpZ25lZD4gbV9jZWxsQ29uc3RhbnRzOwotICAgIEhhc2hNYXA8SlND
ZWxsKiwgTm9kZSo+IG1fY2VsbENvbnN0YW50Tm9kZXM7Ci0KLSAgICAvLyBBIGNvbnN0YW50IGlu
IHRoZSBjb25zdGFudCBwb29sIG1heSBiZSByZXByZXNlbnRlZCBieSBtb3JlIHRoYW4gb25lCi0g
ICAgLy8gbm9kZSBpbiB0aGUgZ3JhcGgsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBpbiB3aGlj
aCBpdCBpcyBiZWluZyB1c2VkLgotICAgIHN0cnVjdCBDb25zdGFudFJlY29yZCB7Ci0gICAgICAg
IENvbnN0YW50UmVjb3JkKCkKLSAgICAgICAgICAgIDogYXNJbnQzMigwKQotICAgICAgICAgICAg
LCBhc051bWVyaWMoMCkKLSAgICAgICAgICAgICwgYXNKU1ZhbHVlKDApCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIE5vZGUqIGFzSW50MzI7Ci0gICAgICAgIE5vZGUqIGFzTnVtZXJp
YzsKLSAgICAgICAgTm9kZSogYXNKU1ZhbHVlOwotICAgIH07Ci0KLSAgICAvLyBUcmFjayB0aGUg
aW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRoZSBjdXJyZW50IHZhbHVlIGZvciBl
dmVyeQotICAgIC8vIHJlZ2lzdGVyIHZhbHVlIGluIHRoZSBieXRlY29kZSAtIGFyZ3VtZW50LCBs
b2NhbCwgYW5kIHRlbXBvcmFyeS4KLSAgICBWZWN0b3I8Q29uc3RhbnRSZWNvcmQsIDE2PiBtX2Nv
bnN0YW50czsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVmaW5lZDsKKyAgICBGcm96
ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnROYU47
CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRPbmU7CisgICAgVmVjdG9yPE5vZGUqLCAxNj4g
bV9jb25zdGFudHM7CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8g
dGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwpAQCAtMTA2MSw3ICs4
NzQsNiBAQCBwcml2YXRlOgogICAgICAgICAvLyAodGhlIG1hY2hpbmUgY29kZSBibG9jaywgd2hp
Y2ggaXMgdGhlIHRyYW5zaXRpdmUsIHRob3VnaCBub3QgbmVjZXNzYXJpbHkKICAgICAgICAgLy8g
ZGlyZWN0LCBjYWxsZXIpLgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1faWRlbnRpZmllclJl
bWFwOwotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRSZW1hcDsKICAgICAgICAg
VmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9zd2l0Y2hSZW1hcDsKICAgICAgICAgCkBAIC0xMTMyLDExICs5NDQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG9wZXJh
bmQuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3Vs
dCA9IFZpcnR1YWxSZWdpc3RlcihtX2NvbnN0YW50UmVtYXBbb3BlcmFuZC50b0NvbnN0YW50SW5k
ZXgoKV0pOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNDb25zdGFudCgpKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
QVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKICAgICAgICAgICAgIHJldHVybiBWaXJ0
dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCk7CiAgICAgICAgIH0KQEAgLTExNzAsMTEgKzk3OCw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzOwogICAgIC8vIE1hcHBpbmcgYmV0d2VlbiBpZGVudGlm
aWVyIG5hbWVzIGFuZCBudW1iZXJzLgogICAgIEJvcnJvd2VkSWRlbnRpZmllck1hcCBtX2lkZW50
aWZpZXJNYXA7Ci0gICAgLy8gTWFwcGluZyBiZXR3ZWVuIHZhbHVlcyBhbmQgY29uc3RhbnQgbnVt
YmVycy4KLSAgICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKLSAgICAvLyBJbmRleCBvZiB0aGUg
ZW1wdHkgdmFsdWUsIG9yIFVJTlRfTUFYIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcuIFRoaXMgaXMg
YSBob3JyaWJsZQotICAgIC8vIHdvcmstYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IEpTVmFsdWVN
YXAgY2FuJ3QgaGFuZGxlICJlbXB0eSIgdmFsdWVzLgotICAgIHVuc2lnbmVkIG1fZW1wdHlKU1Zh
bHVlSW5kZXg7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBtX2RmZ0NvZGVCbG9jazsKICAgICBDYWxs
TGlua1N0YXR1czo6Q29udGV4dE1hcCBtX2NhbGxDb250ZXh0TWFwOwpAQCAtMTIyMiwxMCArMTAy
NSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgQVNTRVJUKHJlZ2lz
dGVyT2Zmc2V0IDw9IDApOwogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRp
b25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2luZCk7CiAg
ICAgCi0gICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkgewotICAgICAgICBj
YWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAotICAgICAgICAgICAgbV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAgfQorICAg
IGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0YXR1cyA9
IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmNvbnN0YW50KCktPnZhbHVlKCkpLnNldElzUHJv
dmVkKHRydWUpOwogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkg
ewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4
ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2Fs
bHkKQEAgLTE1MzYsNyArMTMzNyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKE5vZGUKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3Bl
cmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKQogewogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAx
KSB7IC8vIE1hdGgubWluKCkKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgY29uc3RhbnROYU4oKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCkBAIC0xNTYxLDcgKzEzNjIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgc3dpdGNoIChp
bnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLmFicygpCi0gICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjb25zdGFudE5hTigpKTsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogCkBAIC0xNTg1LDcgKzEzODYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CiAgICAgY2FzZSBT
aW5JbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IDEpIHsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNv
bnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTczMiwxOSAr
MTUzMywxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIERGR1RydWVJbnRyaW5zaWM6IHsKLSAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9v
bGVhbih0cnVlKSkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LCBqc0NvbnN0YW50KGpzQm9vbGVhbih0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogewogICAgICAgICBhZGRU
b0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGNvbnN0YW50VW5kZWZpbmVkKCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0
YW50VW5kZWZpbmVkKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwKLSAgICAgICAgICAgIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShq
c0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2Rl
KSA6IHRydWUpKSk7CisgICAgICAgICAgICBqc0NvbnN0YW50KGpzQm9vbGVhbihPcHRpb25zOjp1
c2VGVExKSVQoKSA/IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTE4MzksNyArMTY0MCw3IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAgTm9kZSogcmVz
dWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzIDw9
IDEpCi0gICAgICAgICAgICByZXN1bHQgPSBjZWxsQ29uc3RhbnQobV92bS0+c21hbGxTdHJpbmdz
LmVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgcmVzdWx0ID0ganNDb25zdGFudChtX3ZtLT5z
bWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJl
c3VsdCA9IGFkZFRvR3JhcGgoVG9TdHJpbmcsIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgCkBAIC0xOTgwLDcgKzE3ODEsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIAogICAgIE5vZGUqIGxvYWRl
ZFZhbHVlOwogICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgbG9hZGVk
VmFsdWUgPSBjZWxsQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCkpOwor
ICAgICAgICBsb2FkZWRWYWx1ZSA9IGpzQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkp
OwogICAgIGVsc2UgewogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAog
ICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSwKQEAgLTIxNTQsOSArMTk1NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQoCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByZXBhcmVUb1BhcnNlQmxvY2soKQog
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXplKCk7ICsraSkK
LSAgICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29yZCgpOwotICAgIG1fY2VsbENv
bnN0YW50Tm9kZXMuY2xlYXIoKTsKKyAgICBtX2NvbnN0YW50cy5yZXNpemUoMCk7CiB9CiAKIE5v
ZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2lnbmVkIHNraXBD
b3VudCkKQEAgLTIyMzUsMTMgKzIwMzQsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogCiAgICAgICAgIC8vID09PSBGdW5jdGlvbiBlbnRyeSBvcGNvZGVzID09
PQogCi0gICAgICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAg
ICAgICAgICAgIE5vZGUqIHVuZGVmaW5lZCA9IGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZv
KG1fY29uc3RhbnRVbmRlZmluZWQpKTsKICAgICAgICAgICAgIC8vIEluaXRpYWxpemUgYWxsIGxv
Y2FscyB0byB1bmRlZmluZWQuCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5tX251bVZhcnM7ICsraSkKLSAgICAgICAgICAgICAg
ICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSksIGNvbnN0YW50VW5kZWZpbmVkKCksIElt
bWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9y
TG9jYWwoaSksIHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zcGVjaWFsaXphdGlvbktpbmQoKSA9PSBD
b2RlRm9yQ29uc3RydWN0KQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgwKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAg
ICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwKSwgdW5kZWZpbmVk
LCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7
CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5Ogog
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpCkBAIC0yMjczLDggKzIw
NzQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBpbnQgY2FsbGVlT3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CiAgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZU9w
ZXJhbmQpKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpIHsKLSAgICAgICAgICAg
ICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgpOworICAgICAgICAgICAg
aWYgKGNhbGxlZS0+b3AoKSA9PSBKU0NvbnN0YW50ICYmIGNhbGxlZS0+Y29uc3RhbnQoKS0+dmFs
dWUoKS5pc0NlbGwoKSkgeworICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IGNhbGxlZS0+
Y29uc3RhbnQoKS0+dmFsdWUoKS5hc0NlbGwoKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoY2Vs
bC0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNl
bGwpOwpAQCAtMjM1MSwxMCArMjE1MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkRnVuY3Rpb24pKSB7CiAgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKSk7CiAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiBmcm96ZW4gPSBtX2dy
YXBoLmZyZWV6ZShjYWNoZWRGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNhY2hl
ZEZ1bmN0aW9uLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKTsKICAgICAgICAgICAgICAg
ICBOb2RlKiBhY3R1YWxDYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxl
ZSkpOwotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGNh
Y2hlZEZ1bmN0aW9uKSwgYWN0dWFsQ2FsbGVlKTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKFdl
YWtKU0NvbnN0YW50LCBPcEluZm8oY2FjaGVkRnVuY3Rpb24pKSk7CisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZnJvemVuKSwgYWN0dWFsQ2FsbGVlKTsK
KyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfY2FsbGVlKTsKICAg
ICAgICAgfQpAQCAtMjQxOCw3ICsyMjIwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0VmlydHVh
bFJlZ2lzdGVyID0gVmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CiAgICAgICAgICAgICBOb2RlKiBv
cCA9IGdldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAgICAgc2V0KHNyY0RzdFZp
cnR1YWxSZWdpc3RlciwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aEFkZCwgb3AsIG9uZSgpKSkp
OworICAgICAgICAgICAgc2V0KHNyY0RzdFZpcnR1YWxSZWdpc3RlciwgbWFrZVNhZmUoYWRkVG9H
cmFwaChBcml0aEFkZCwgb3AsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnRPbmUpKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luYyk7CiAgICAgICAgIH0K
IApAQCAtMjQyNiw3ICsyMjI4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3JjRHN0VmlydHVhbFJlZ2lz
dGVyID0gVmlydHVhbFJlZ2lzdGVyKHNyY0RzdCk7CiAgICAgICAgICAgICBOb2RlKiBvcCA9IGdl
dChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIpOwotICAgICAgICAgICAgc2V0KHNyY0RzdFZpcnR1YWxS
ZWdpc3RlciwgbWFrZVNhZmUoYWRkVG9HcmFwaChBcml0aFN1Yiwgb3AsIG9uZSgpKSkpOworICAg
ICAgICAgICAgc2V0KHNyY0RzdFZpcnR1YWxSZWdpc3RlciwgbWFrZVNhZmUoYWRkVG9HcmFwaChB
cml0aFN1Yiwgb3AsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRPbmUp
KSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYyk7CiAgICAgICAgIH0KIApAQCAt
MjY0Myw3ICsyNDQ1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogCiAgICAgICAgIGNhc2Ugb3BfZXFfbnVsbDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsK
LSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCksIGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFudE51
bGwoKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGFk
ZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpKTsKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2VxX251bGwpOwogICAgICAgICB9CiAKQEAgLTI2NjMsNyArMjQ2
NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAg
ICBjYXNlIG9wX25lcV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwg
YWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1
ZSwgY29uc3RhbnROdWxsKCkpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFk
ZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQs
IE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
bmVxX251bGwpOwogICAgICAgICB9CiAKQEAgLTI3ODgsNyArMjU5MCw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9qZXFfbnVsbDog
ewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25z
dGFudE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9j
b25zdGFudE51bGwpKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJy
YW5jaERhdGEobV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCwgbV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2plcV9udWxsKSkpLCBjb25kaXRpb24pOwogICAgICAgICAgICAg
TEFTVF9PUENPREUob3BfamVxX251bGwpOwogICAgICAgICB9CkBAIC0yNzk2LDcgKzI1OTgsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ug
b3Bfam5lcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxhdGl2ZU9mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwot
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFu
dCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dyYXBoKEpTQ29uc3Rh
bnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJh
bmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3Bf
am5lcV9udWxsKSwgbV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpLCBjb25kaXRpb24p
OwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9udWxsKTsKICAgICAgICAgfQpAQCAt
Mjg4NSw3ICsyNjg3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsgdGFi
bGUuYnJhbmNoT2Zmc2V0c1tpXTsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEu
ZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0
ZWNvZGVJbmRleChqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5taW4gKyBpKSks
IHRhcmdldCkpOworICAgICAgICAgICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6
OndpdGhCeXRlY29kZUluZGV4KG1fZ3JhcGguZnJlZXplKGpzTnVtYmVyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KHRhYmxlLm1pbiArIGkpKSksIHRhcmdldCkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgZmx1c2hJZlRlcm1pbmFsKGRhdGEpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0
Y2gsIE9wSW5mbygmZGF0YSksIGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpKTsKQEAgLTMwNTUsNyArMjg1Nyw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6Ci0gICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQobV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CisgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5t
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6IHsKQEAgLTMwNjMsNyArMjg2NSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBpZiAoYWN0aXZh
dGlvbgogICAgICAgICAgICAgICAgICAgICAmJiBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpLT5t
X2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50LCBPcEluZm8oYWN0aXZhdGlv
bi0+c3ltYm9sVGFibGUoKSkpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksIGNlbGxDb25zdGFudChhY3RpdmF0aW9uKSk7CisgICAgICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoYWN0aXZhdGlvbikpOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLApAQCAtMzExMiw3ICsyOTE0LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBz
dGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAg
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9IHN0YXR1c1swXS5zcGVjaWZp
Y1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
Y2VsbENvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBqc0NvbnN0YW50KHNwZWNpZmljVmFsdWUuYXND
ZWxsKCkpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwg
aWRlbnRpZmllck51bWJlciwgb3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzEzMSw3ICsyOTMzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQo
c3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMzE0Nyw3
ICsyOTQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSB3YXRjaHBvaW50U2V0LT5p
bmZlcnJlZFZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIHNjb3BlTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENv
bnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0zMjQ4LDcgKzMwNTAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9w
X2luaXRfbGF6eV9yZWc6IHsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVl
KCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIGpzQ29uc3RhbnQoSlNWYWx1ZSgpKSk7CiAgICAgICAgICAgICBBU1NF
UlQob3BlcmFuZElzTG9jYWwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAg
ICAgICAgICAgbV9ncmFwaC5tX2xhenlWYXJzLnNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkudG9Mb2NhbCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2luaXRfbGF6eV9yZWcpOwpAQCAtMzQwMywxMyArMzIwNSw2IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk4KICAgICAKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAg
bV9pZGVudGlmaWVyTWFwLmFkZChtX2NvZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3Rh
bnRSZWdpc3RlcnMoKTsgKytpKSB7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAg
aWYgKCF2YWx1ZSkKLSAgICAgICAgICAgIG1fZW1wdHlKU1ZhbHVlSW5kZXggPSBpICsgRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fanNWYWx1
ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgaSArIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4KTsKLSAgICB9CiAgICAgCiAgICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7
CiB9CkBAIC0zNTA3LDcgKzMzMDIsNiBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6SW5saW5lCiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5idWlsZE9wZXJhbmRNYXBzSWZOZWNl
c3NhcnkoKTsKICAgICAgICAgCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2Rl
QmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZW1hcC5y
ZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBt
X2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1
ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dpdGNoUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVy
T2ZTd2l0Y2hKdW1wVGFibGVzKCkpOwogCkBAIC0zNTE4LDI0ICszMzEyLDYgQEAgQnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgICAgIGJ5dGVDb2Rl
UGFyc2VyLT5tX2dyYXBoLmlkZW50aWZpZXJzKCkuYWRkTGF6aWx5KHJlcCk7CiAgICAgICAgICAg
ICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAg
IH0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29u
c3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29k
ZUJsb2NrLT5nZXRDb25zdGFudChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkgewotICAgICAgICAgICAgICAgIGlmIChieXRlQ29kZVBhcnNl
ci0+bV9lbXB0eUpTVmFsdWVJbmRleCA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAgICAgICAg
ICBieXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRleCA9IGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5hZGRDb25z
dGFudChKU1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9j
b25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9lbXB0
eUpTVmFsdWVJbmRleDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEpTVmFsdWVNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNl
ci0+bV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBieXRlQ29kZVBhcnNl
ci0+bV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewot
ICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5hZGRDb25zdGFudCh2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJl
Y29yZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKTsgKytpKSB7
CiAgICAgICAgICAgICAvLyBJZiB3ZSBpbmxpbmUgdGhlIHNhbWUgY29kZSBibG9jayBtdWx0aXBs
ZSB0aW1lcywgd2UgZG9uJ3Qgd2FudCB0byBuZWVkbGVzc2x5CiAgICAgICAgICAgICAvLyBkdXBs
aWNhdGUgaXRzIGNvbnN0YW50IGJ1ZmZlcnMuCkBAIC0zNTY2LDEzICszMzQyLDEwIEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgbV9pbmxpbmVDYWxs
RnJhbWUgPSAwOwogCiAgICAgICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mSWRlbnRpZmllcnMoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUo
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0
YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMo
KSk7CiAgICAgICAgIG1fc3dpdGNoUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0
Y2hKdW1wVGFibGVzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJS
ZW1hcFtpXSA9IGk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRS
ZW1hcFtpXSA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsr
aSkKICAgICAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMo
KTsgKytpKQpAQCAtMzU4MCwxNCArMzM1MywxMyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3Rh
Y2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcg
PSBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvbnN0
YW50UmVtYXAuc2l6ZSgpOyArK2kpCi0gICAgICAgIEFTU0VSVChtX2NvbnN0YW50UmVtYXBbaV0g
Pj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSk7Ci0g
ICAgCiAgICAgYnl0ZUNvZGVQYXJzZXItPm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiB7CisgICAgcHJlcGFyZVRvUGFy
c2VCbG9jaygpOworICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2s7CiAgICAgCiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkg
ewpAQCAtMzY4NCw2ICszNDU2LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxv
Y2soKQogCiAgICAgLy8gU2hvdWxkIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBpbnN0cnVj
dGlvbnMuCiAgICAgQVNTRVJUKG1fY3VycmVudEluZGV4ID09IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuc2l6ZSgpKTsKKyAgICAKKyAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CiB9CiAKIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBvbiBjb25z
dGFudCAtPiBqZXR0aXNvbiBhbGwgb3RoZXIgdGFyZ2V0cyBhbmQgbWVyZ2UuCiAgICAgICAgICAg
ICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQoYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5j
b25zdGFudCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgVHJpU3RhdGUgZm91bmQgPSBGYWxz
ZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0Qmxv
Y2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+
Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRyaVN0YXRlICYmIGktLTspIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY4LDIyICsxNjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKG90aGVy
Tm9kZS0+b3AoKSAhPSBub2RlLT5vcCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudE51bWJlcigpICE9
IG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIHdlYWtDb25zdGFudENTRShOb2Rl
KiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJl
Q1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5vZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgIT0gV2Vha0pTQ29u
c3RhbnQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChvdGhlck5vZGUtPndlYWtDb25zdGFudCgpICE9IG5vZGUtPndlYWtDb25zdGFudCgp
KQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnQoKSAhPSBub2RlLT5jb25zdGFu
dCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICByZXR1cm4gb3RoZXJOb2RlOwpAQCAtNDIwLDcgKzQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpT
Q2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKKyAgICBib29sIGNoZWNrRnVuY3Rpb25FbGlt
aW5hdGlvbihGcm96ZW5WYWx1ZSogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwpAQCAtMTI3MCwxMyAr
MTI1NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChjb25zdGFudENT
RShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5h
dGlvbikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBoYXZl
IENTRSBmb3Igd2VhayBjb25zdGFudHMgYWdhaW5zdCBzdHJvbmcgY29uc3RhbnRzIGFuZCB2aWNl
LXZlcnNhLgotICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQod2Vha0NvbnN0YW50Q1NFKG5vZGUp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ29uc3Rh
bnRTdG9yYWdlUG9pbnRlcjoKICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWlu
YXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2
LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
SlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25z
dGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAg
Y2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBoYW50b206CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVj
a0Z1bmN0aW9uOiB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlvbigpKQorICAgICAgICAgICAgICAgIGlm
IChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS0+ZnVuY3Rp
b24oKS0+dmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQg
PSB0cnVlOwpAQCAtMjczLDggKzI3Myw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkgfHwgbV9zdGF0ZS5kaWRDbG9iYmVy
KCkgfHwgbm9kZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKTsK
LSAgICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogdmFsdWUg
PSBtX2dyYXBoLmZyZWV6ZShtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICBpZiAoISp2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbWVyZ2luZyB0aGUgYWJzdHJhY3QgdmFsdWUgb2Yg
dGhlIGNvbnN0YW50IGludG8gdGhlIGFic3RyYWN0IHZhbHVlCkBAIC0yODMsNyArMjgzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIC8vIHRoZW4gd2UgcmVmdXNlIHRvIGZvbGQuCiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIG9sZFZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOwogICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSBjb25zdGFudFZhbHVlOwotICAgICAgICAgICAgY29uc3Rh
bnRWYWx1ZS5zZXQobV9ncmFwaCwgdmFsdWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworICAgICAgICAgICAgY29uc3RhbnRWYWx1ZS5zZXQobV9ncmFwaCwgKnZhbHVlLCBtX3N0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUu
Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKG5vZGUpOwogICAgICAgICAgICAgaWYgKG9sZFZhbHVl
Lm1lcmdlKGNvbnN0YW50VmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzMw
LDcgKzMzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlLCB2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC00NTMsNyArNDUzLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29u
c3RhbnQsIG9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
c3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIEpTQ29uc3RhbnQsIG9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjZWxsKSkpOwogICAgICAgICAKICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1MSw3
ICs4NTEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
U3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgRWRn
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIE90aGVyVXNlKSk7CiAgICAgICAgICAgICAgICAgb2Jz
ZXJ2ZVVzZUtpbmRPbk5vZGU8T3RoZXJVc2U+KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0NvbnN0YW50KG1fZ3JhcGguZ2xvYmFsVGhp
c09iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKTsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KAorICAgICAgICAgICAgICAgICAgICBub2RlLCBtX2dyYXBo
Lmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTEwMzQsOCArMTAz
NSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjogewog
ICAgICAgICAgICAgTm9kZSogZ2xvYmFsT2JqZWN0Tm9kZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCi0gICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBXZWFrSlND
b25zdGFudCwgbm9kZS0+b3JpZ2luLCAKLSAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpOworICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgSlNDb25zdGFudCwgbm9kZS0+b3JpZ2luLCAKKyAg
ICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUobV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IHByb2JhYmx5IHNob3VsZG4ndCBoYXZlIGFuIHVuY29uZGl0aW9uYWwgYmFycmllci4KICAgICAg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMxMDQK
ICAgICAgICAgICAgIE5vZGUqIGJhcnJpZXJOb2RlID0gbV9ncmFwaC5hZGROb2RlKApAQCAtMTA2
Nyw3ICsxMDY4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNl
cyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3Ig
bmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKLSAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBHZXRM
b2NhbDoKICAgICAgICAgY2FzZSBHZXRDYWxsZWU6CiAgICAgICAgIGNhc2UgRmx1c2g6CkBAIC0x
MTkzLDkgKzExOTMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFlZGdlKQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKEtub3duU3RyaW5n
VXNlKTsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaC5pc0NvbnN0YW50KGVkZ2Uubm9kZSgpKSkK
KyAgICAgICAgICAgIGlmICghZWRnZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcq
PihtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKS5hc0NlbGwoKSk7CisgICAg
ICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4oZWRnZS0+Y29uc3Rh
bnQoKS0+dmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5ndGgoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTYxOSw3ICsxNjE5LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOwogICAgICAgICAK
ICAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOwotICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG9sZE5vZGUtPmNvbnN0YW50KCkudmFsdWUoKTsKICAgICAgICAgaWYgKHZh
bHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0xOTE1LDcg
KzE5MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KTsKICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwKLSAg
ICAgICAgICAgICAgICAgICAgT3BJbmZvKGVkZ2UtPmNvbnN0YW50TnVtYmVyKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKGVkZ2UtPmNvbnN0YW50KCkpKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitGcm96ZW5WYWx1ZSogRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCkKK3sKKyAgICBzdGF0
aWMgRnJvemVuVmFsdWUgZW1wdHk7CisgICAgcmV0dXJuICZlbXB0eTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zy
b3plblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
cm96ZW5WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGcm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRnJvemVu
VmFsdWVfaAorI2RlZmluZSBERkdGcm96ZW5WYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBGcm96ZW5WYWx1ZSB7CitwdWJsaWM6
CisgICAgRnJvemVuVmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAg
ICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBGcm96ZW5WYWx1
ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9z
dHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpOworICAgIH0KKyAg
ICAKKyAgICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVy
ZSkKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoISF2
YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgPT0gISFzdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQo
IXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkg
PT0gc3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMg
YSB1dGlsaXR5IG1ldGhvZCBmb3IgREZHOjpHcmFwaDo6ZnJlZXplKCkuIFlvdSBzaG91bGQgYWxt
b3N0IGFsd2F5cyBjYWxsCisgICAgLy8gR3JhcGg6OmZyZWV6ZSgpIGRpcmVjdGx5LiBDYWxsaW5n
IHRoaXMgaW5zdGVhZCBvZiBHcmFwaDo6ZnJlZXplKCkgY2FuIHJlc3VsdCBpbgorICAgIC8vIHRo
ZSBzYW1lIGNvbnN0YW50IGJlaW5nIHZpZXdlZCBhcyBoYXZpbmcgZGlmZmVyZW50IHN0cnVjdHVy
ZXMgZHVyaW5nIHRoZSBjb3Vyc2UKKyAgICAvLyBvZiBjb21waWxhdGlvbiwgd2hpY2ggY2FuIHNv
bWV0aW1lcyBjYXVzZSBiYWQgdGhpbmdzIHRvIGhhcHBlbi4gRm9yIGV4YW1wbGUsIHdlCisgICAg
Ly8gbWF5IG9ic2VydmUgdGhhdCBvbmUgdmVyc2lvbiBvZiB0aGUgY29uc3RhbnQgaGFzIGFuIHVu
d2F0Y2hhYmxlIHN0cnVjdHVyZSBidXQKKyAgICAvLyB0aGVuIGEgbGF0ZXIgdmVyc2lvbiBtYXkg
c3RhcnQgdG8gaGF2ZSBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUgZHVlIHRvIGEgdHJhbnNpdGlvbi4K
KyAgICAvLyBUaGUgcG9pbnQgb2YgZnJlZXppbmcgaXMgdG8gZW5zdXJlIHRoYXQgd2UgZ2VuZXJh
bGx5IG9ubHkgc2VlIG9uZSB2ZXJzaW9uIG9mCisgICAgLy8gY29uc3RhbnRzLCBidXQgdGhhdCBy
ZXF1aXJlcyBmcmVlemluZyB0aHJvdWdoIHRoZSBHcmFwaC4KKyAgICBzdGF0aWMgRnJvemVuVmFs
dWUgZnJlZXplKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gRnJvemVuVmFs
dWUoCisgICAgICAgICAgICB2YWx1ZSwgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpID8gdmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBGcm96ZW5WYWx1ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgCisgICAgdm9pZCBtYXJrU3Ryb25n
bHkoKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQor
ICAgICAgICAgICAgbV9zdHJvbmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Ry
b25nbHlNYXJrZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cm9uZzsgfQorICAgIAorICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJl
KG91dCwgY29udGV4dCwgbV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEpTVmFsdWUgbV92YWx1ZTsKKyAgICBTdHJ1Y3R1
cmUqIG1fc3RydWN0dXJlOworICAgIGJvb2wgbV9zdHJvbmc7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0Zyb3plblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEdyYXBoOjpHcmFwaChWTSYg
dm0sIFBsYW4mIHBsYW4sIExvbmdMaXYKICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxv
Y2suZ2V0KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZl
KCkpCiAgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikKLSAgICAs
IG1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxl
VmFsdWVzKQorICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0
SGFuZGxlVmFsdWVzKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX25leHRN
YWNoaW5lTG9jYWwoMCkKICAgICAsIG1fbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKQpAQCAtNzEsOCArNzEsOCBAQCBHcmFwaDo6R3JhcGgoVk0mIHZt
LCBQbGFuJiBwbGFuLCBMb25nTGl2CiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAg
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXMuc2l6
ZSgpOyBpLS07KQotICAgICAgICBtX211c3RIYW5kbGVBYnN0cmFjdFZhbHVlc1tpXS5zZXRNb3N0
U3BlY2lmaWMoKnRoaXMsIHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9tdXN0
SGFuZGxlVmFsdWVzW2ldID0gZnJlZXplKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CiB9CiAK
IEdyYXBoOjp+R3JhcGgoKQpAQCAtMTc4LDcgKzE3OCw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAvLyAoNSkgVGhlIGFyZ3VtZW50cyB0byB0aGUgb3Bl
cmF0aW9uLiBUaGUgbWF5IGJlIG9mIHRoZSBmb3JtOgogICAgIC8vICAgICAgICAgQCMgICAtIGEg
Tm9kZUluZGV4IHJlZmVyZW5jaW5nIGEgcHJpb3Igbm9kZSBpbiB0aGUgZ3JhcGguCiAgICAgLy8g
ICAgICAgICBhcmcjIC0gYW4gYXJndW1lbnQgbnVtYmVyLgotICAgIC8vICAgICAgICAgJCMgICAt
IHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBj
b25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBk
ZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhl
IENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBk
dW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8g
ICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1
c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KICAgICBvdXQucHJp
bnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlLT5pbmRleCgpLCBza2lwcGVkID8gIiAgc2tp
cHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291
bnQpOwpAQCAtMjI1LDggKzIyNCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChu
b2RlLT50cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24o
KSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5v
ZGUtPmZ1bmN0aW9uKCkpLCAiLCAiKTsKLSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmlu
aGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1
bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAg
aWYgKG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxsKCktPmluaGVyaXRzKEpTRnVuY3Rp
b246OmluZm8oKSkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0
PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAg
ICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIjxob3N0IGZ1bmN0aW9uPiIpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzA2LDcg
KzMwNSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CiAgICAgICAgIENvbW1h
UHJpbnRlciBhbm90aGVyQ29tbWE7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBu
b2RlLT5udW1Db25zdGFudHMoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJD
b21tYSwgaW5Db250ZXh0KG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENv
bnN0YW50KCkpW2ldLCBjb250ZXh0KSk7CisgICAgICAgICAgICBvdXQucHJpbnQoYW5vdGhlckNv
bW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChmcmVlemUobV9jb2RlQmxvY2stPmNvbnN0YW50QnVm
ZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSlbaV0pLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5w
cmludCgiXSIpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCkBAIC0z
MjMsMTMgKzMyMiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoSlNWYWx1ZShub2RlLT50eXBlZEFy
cmF5KCkpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAg
ICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigp
KSk7Ci0gICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkgewotICAgICAgICBvdXQucHJpbnQoY29t
bWEsICIkIiwgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAgb3V0LnByaW50KCIgPSAiLCBpbkNv
bnRleHQodmFsdWUsIGNvbnRleHQpKTsKLSAgICB9Ci0gICAgaWYgKG9wID09IFdlYWtKU0NvbnN0
YW50KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0
YW50KCkpLCAiICgiLCBpbkNvbnRleHQoKm5vZGUtPndlYWtDb25zdGFudCgpLT5zdHJ1Y3R1cmUo
KSwgY29udGV4dCksICIpIik7CisgICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwog
ICAgIGlmIChub2RlLT5pc0p1bXAoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCAq
bm9kZS0+dGFyZ2V0QmxvY2soKSk7CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCkBAIC03OTQs
NyArNzg4LDcgQEAgSlNBY3RpdmF0aW9uKiBHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbihObwogewog
ICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkp
OworICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KG5vZGUtPmNvbnN0YW50
KCktPnZhbHVlKCkpOwogfQogCiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5
R2V0UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCkBAIC04MTEsNyArODA1LDcgQEAgSlNBcnJheUJ1ZmZl
clZpZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZQogewogICAgIGlmICghbm9kZS0+aGFzQ29uc3Rh
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBq
c0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkp
OworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVm
ZmVyVmlldyo+KG5vZGUtPmNvbnN0YW50KCktPnZhbHVlKCkpOwogICAgIGlmICghdmlldykKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCF2aWV3LT5sZW5ndGgoKSkKQEAgLTgzMiw4ICs4MjYs
MjUgQEAgSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZQogICAgIHJldHVy
biB0cnlHZXRGb2xkYWJsZVZpZXcoY2hpbGQobm9kZSwgMCkubm9kZSgpLCBub2RlLT5hcnJheU1v
ZGUoKSk7CiB9CiAKK3ZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKK3sKKyAgICBt
X2NvZGVCbG9jay0+Y29uc3RhbnRzKCkucmVzaXplKDApOworICAgIGZvciAoRnJvemVuVmFsdWUq
IHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5pc1N0cm9uZ2x5
TWFya2VkKCkpCisgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnQodmFsdWUtPnZh
bHVlKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dmFsdWUoKS5pc0NlbGwoKSkKKyAgICAg
ICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodmFsdWUtPnZhbHVlKCkuYXND
ZWxsKCkpOworICAgIH0KKyAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2hyaW5rVG9GaXQo
KTsKK30KKwogdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
IHsKKyAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CisgICAg
ICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVZhbHVlKHZhbHVlLT52YWx1ZSgp
KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih2YWx1
ZS0+c3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkBA
IC04NDMsMTUgKzg1NCw2IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHYKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAg
ICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVZhbHVlKHZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5leGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwpAQCAtOTA5LDYgKzkxMSw0NiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2CiAgICAgfQogfQogCitGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShKU1Zh
bHVlIHZhbHVlKQoreworICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKQorICAgICAgICByZXR1cm4g
RnJvemVuVmFsdWU6OmVtcHR5U2luZ2xldG9uKCk7CisgICAgCisgICAgYXV0byByZXN1bHQgPSBt
X2Zyb3plblZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBudWxscHRyKTsKKyAg
ICBpZiAoTElLRUxZKCFyZXN1bHQuaXNOZXdFbnRyeSkpCisgICAgICAgIHJldHVybiByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlOworICAgIAorICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gbV9mcm96ZW5WYWx1ZXMuYWRkKEZyb3plblZhbHVlOjpmcmVlemUodmFsdWUpKTsKK30KKwor
RnJvemVuVmFsdWUqIEdyYXBoOjpmcmVlemVTdHJvbmdseShKU1ZhbHVlIHZhbHVlKQoreworICAg
IEZyb3plblZhbHVlKiByZXN1bHQgPSBmcmVlemUodmFsdWUpOworICAgIHJlc3VsdC0+bWFya1N0
cm9uZ2x5KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaDo6Y29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgRnJvemVuVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS0+c3RydWN0dXJlKCkpCisgICAgICAgIGFzc2VydElzV2F0Y2hlZCh2YWx1ZS0+c3RydWN0dXJl
KCkpOworICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQorICAgICAgICBkZXRocmVhZCgp
OworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEo
KnRoaXMpKTsKKyAgICBub2RlLT5jb252ZXJ0VG9Db25zdGFudCh2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGg6OmNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCit7Cisg
ICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgZnJlZXplKHZhbHVlKSk7Cit9CisKK3ZvaWQgR3Jh
cGg6OmNvbnZlcnRUb1N0cm9uZ0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCit7
CisgICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgZnJlZXplU3Ryb25nbHkodmFsdWUpKTsKK30K
Kwogdm9pZCBHcmFwaDo6YXNzZXJ0SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewog
ICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAj
aW5jbHVkZSAiREZHQXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2su
aCIKICNpbmNsdWRlICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUu
aCIKICNpbmNsdWRlICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05hdHVyYWxM
b29wcy5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKQEAgLTE0NCw0MyArMTQ1LDE1IEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KE5vZGUqIG5vZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQotICAgIHsKLSAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBkZXRocmVhZCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0
YSgqdGhpcykpOwotICAgICAgICBub2RlLT5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJl
cik7Ci0gICAgfQorICAgIEZyb3plblZhbHVlKiBmcmVlemUoSlNWYWx1ZSB2YWx1ZSk7CisgICAg
RnJvemVuVmFsdWUqIGZyZWV6ZVN0cm9uZ2x5KEpTVmFsdWUgdmFsdWUpOyAvLyBTaG9ydGhhbmQg
Zm9yIGZyZWV6ZSh2YWx1ZSktPm1hcmtTdHJvbmdseSgpLgogICAgIAotICAgIHVuc2lnbmVkIGNv
bnN0YW50UmVnaXN0ZXJGb3JDb25zdGFudChKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
dW5zaWduZWQgY29uc3RhbnRSZWdpc3RlcjsKLSAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+Zmlu
ZENvbnN0YW50KHZhbHVlLCBjb25zdGFudFJlZ2lzdGVyKSkgewotICAgICAgICAgICAgY29uc3Rh
bnRSZWdpc3RlciA9IG1fY29kZUJsb2NrLT5hZGRDb25zdGFudExhemlseSgpOwotICAgICAgICAg
ICAgaW5pdGlhbGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JDb25zdGFudCgKLSAgICAgICAgICAgICAg
ICBtX3BsYW4ud3JpdGVCYXJyaWVycywKLSAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+Y29u
c3RhbnRzKClbY29uc3RhbnRSZWdpc3Rlcl0sCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2ss
Ci0gICAgICAgICAgICAgICAgY29uc3RhbnRSZWdpc3RlciwKLSAgICAgICAgICAgICAgICBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAgICAgICAgICAgdmFsdWUpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBjb25zdGFudFJlZ2lzdGVyOwotICAgIH0KKyAgICB2b2lk
IGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlKiB2YWx1ZSk7CisgICAg
dm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKTsKKyAgICB2
b2lkIGNvbnZlcnRUb1N0cm9uZ0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpOwog
ICAgIAogICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAg
ICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUp
Ci0gICAgewotICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBhc3NlcnRJ
c1dhdGNoZWQodmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgaWYgKHZhbHVl
LmlzT2JqZWN0KCkpCi0gICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9XZWFrQ29uc3RhbnQodmFs
dWUuYXNDZWxsKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb252ZXJ0VG9Db25zdGFu
dChub2RlLCBjb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQodmFsdWUpKTsKLSAgICB9Ci0KICAg
ICAvLyBDb2RlQmxvY2sgaXMgb3B0aW9uYWwsIGJ1dCBtYXkgYWxsb3cgYWRkaXRpb25hbCBpbmZv
cm1hdGlvbiB0byBiZSBkdW1wZWQgKGUuZy4gSWRlbnRpZmllciBuYW1lcykuCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiA9IFdURjo6ZGF0YUZpbGUoKSwgRHVtcENvbnRleHQqID0gMCk7CiAg
ICAgZW51bSBQaGlOb2RlRHVtcE1vZGUgeyBEdW1wTGl2ZVBoaXNPbmx5LCBEdW1wQWxsUGhpcyB9
OwpAQCAtMTk0LDExICsxNjcsNiBAQCBwdWJsaWM6CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJl
dHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KICAgICBib29sIGR1bXBDb2RlT3Jp
Z2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUs
IE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCk7CiAKLSAgICBTcGVjdWxh
dGVkVHlwZSBnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24oTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21WYWx1ZShub2RlLT52YWx1ZU9mSlNDb25zdGFudCht
X2NvZGVCbG9jaykpOwotICAgIH0KLSAgICAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3Bl
Y3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50MzIsIGJv
b2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMikKICAgICB7CiAgICAgICAgIEFTU0VSVChhZGQt
Pm9wKCkgPT0gVmFsdWVBZGQgfHwgYWRkLT5vcCgpID09IEFyaXRoQWRkIHx8IGFkZC0+b3AoKSA9
PSBBcml0aFN1Yik7CkBAIC0zMDMsODggKzI3MSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pLT5hcmd1bWVudEluZGV4QWZ0ZXJDYXB0dXJl
KGFyZ3VtZW50KSk7CiAgICAgfQogICAgIAotICAgIC8vIEhlbHBlciBtZXRob2RzIHRvIGNoZWNr
IG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9v
bCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5o
YXNDb25zdGFudCgpOwotICAgIH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBub2Rl
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmlzSW50MzJDb25zdGFudChtX2NvZGVCbG9j
ayk7Ci0gICAgfQotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIG5vZGUtPmlzRG91YmxlQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAg
IH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBub2RlLT5pc051bWJlckNvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAg
Ym9vbCBpc0Jvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG5vZGUtPmlzQm9vbGVhbkNvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgYm9vbCBp
c0NlbGxDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3Rh
bnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIEpTVmFsdWUgdmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzQ2Vs
bCgpICYmICEhdmFsdWU7Ci0gICAgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFnZXRKU0Z1bmN0aW9uKHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGJvb2wgaXNJbnRlcm5hbEZ1bmN0aW9uQ29uc3RhbnQoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNDZWxsKCkgfHwgIXZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSB2YWx1ZS5hc0NlbGwo
KTsKLSAgICAgICAgaWYgKCFjZWxsLT5pbmhlcml0cyhJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgLy8gSGVscGVyIG1ldGhvZHMgZ2V0IGNvbnN0YW50IHZhbHVlcyBmcm9tIG5vZGVzLgot
ICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBub2RlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAgaWYgKCF2
YWx1ZS5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIlZhbHVlIGlzbid0IGludDMy
OiAiLCB2YWx1ZSwgIlxuIik7Ci0gICAgICAgICAgICBkdW1wKCk7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWx1
ZS5hc0ludDMyKCk7Ci0gICAgfQotICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5h
c051bWJlcigpOwotICAgIH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0Jv
b2xlYW4oKTsKLSAgICB9Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQo
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEpTQ2VsbCogZnVuY3Rpb24gPSBnZXRKU0Z1bmN0
aW9uKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uKTsK
LSAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pOwotICAgIH0KLQog
ICAgIHN0YXRpYyBjb25zdCBjaGFyICpvcE5hbWUoTm9kZVR5cGUpOwogICAgIAogICAgIFN0cnVj
dHVyZVNldCogYWRkU3RydWN0dXJlU2V0KGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KQpAQCAtODAyLDYgKzY4OCw4IEBAIHB1YmxpYzoKICAgICBKU0FycmF5QnVmZmVyVmlldyogdHJ5
R2V0Rm9sZGFibGVWaWV3KE5vZGUqLCBBcnJheU1vZGUpOwogICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB0cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEoTm9kZSopOwogICAgIAorICAgIHZvaWQgcmVn
aXN0ZXJGcm96ZW5WYWx1ZXMoKTsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogICAgIAogICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBoYW5kbGVBc3NlcnRpb25GYWlsdXJlKApAQCAtODE1LDEwICs3MDMsMTQgQEAgcHVi
bGljOgogICAgIAogICAgIE5vZGVBbGxvY2F0b3ImIG1fYWxsb2NhdG9yOwogCi0gICAgT3BlcmFu
ZHM8QWJzdHJhY3RWYWx1ZT4gbV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXM7CisgICAgT3BlcmFu
ZHM8RnJvemVuVmFsdWUqPiBtX211c3RIYW5kbGVWYWx1ZXM7CiAgICAgCiAgICAgVmVjdG9yPCBS
ZWZQdHI8QmFzaWNCbG9jaz4gLCA4PiBtX2Jsb2NrczsKICAgICBWZWN0b3I8RWRnZSwgMTY+IG1f
dmFyQXJnQ2hpbGRyZW47CisKKyAgICBIYXNoTWFwPEVuY29kZWRKU1ZhbHVlLCBGcm96ZW5WYWx1
ZSosIEVuY29kZWRKU1ZhbHVlSGFzaCwgRW5jb2RlZEpTVmFsdWVIYXNoVHJhaXRzPiBtX2Zyb3pl
blZhbHVlTWFwOworICAgIEJhZzxGcm96ZW5WYWx1ZT4gbV9mcm96ZW5WYWx1ZXM7CisgICAgCiAg
ICAgVmVjdG9yPFN0b3JhZ2VBY2Nlc3NEYXRhPiBtX3N0b3JhZ2VBY2Nlc3NEYXRhOwogICAgIFZl
Y3RvcjxOb2RlKiwgOD4gbV9hcmd1bWVudHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxl
QWNjZXNzRGF0YSwgMTY+IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwpAQCAtODYxLDcgKzc1Myw3IEBA
IHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFudCgp
KTsKICAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUt
PnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlh
dGVWYWx1ZSA9IGltbWVkaWF0ZS0+Y29uc3RhbnQoKS0+dmFsdWUoKTsKICAgICAgICAgaWYgKCFp
bW1lZGlhdGVWYWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIERvbnRTcGVjdWxh
dGVJbnQzMjsKICAgICAgICAgCkBAIC04ODMsNyArNzc1LDcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpbW1lZGlhdGUtPmhhc0NvbnN0YW50KCkpOwogICAgICAgICAKLSAgICAg
ICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS0+dmFsdWVPZkpTQ29uc3RhbnQo
bV9jb2RlQmxvY2spOworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRl
LT5jb25zdGFudCgpLT52YWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzSW50
MzIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSwxMiArMTUxLDEzIEBA
IHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIGlmIChibG9jay0+Ynl0ZWNvZGVCZWdpbiAhPSBtX2dyYXBoLm1fcGxh
bi5vc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0
SGFuZGxlQWJzdHJhY3RWYWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+dmFyaWFi
bGVzQXRIZWFkLm9wZXJhbmQob3BlcmFuZCk7CiAgICAgICAgICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0g
bV9ncmFwaC5tX211c3RIYW5kbGVBYnN0cmFjdFZhbHVlc1tpXTsKKyAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUgdmFsdWU7CisgICAgICAgICAgICB2YWx1ZS5zZXRNb3N0U3BlY2lmaWMobV9ncmFw
aCwgKm1fZ3JhcGgubV9tdXN0SGFuZGxlVmFsdWVzW2ldKTsKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIGFic3RyYWN0VmFsdWUgPSBibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQob3BlcmFu
ZCk7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJp
YWJsZS0+Zmx1c2hGb3JtYXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMjMgKzYyLDIx
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgTm9kZSogaW5zZXJ0Q29uc3RhbnQoCi0gICAg
ICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEpTVmFsdWUgdmFsdWUsCisgICAg
ICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwK
ICAgICAgICAgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQogICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgY29uc3RhbnRSZWcgPQotICAgICAgICAgICAgbV9ncmFwaC5jb25zdGFudFJlZ2lzdGVyRm9y
Q29uc3RhbnQodmFsdWUpOwogICAgICAgICByZXR1cm4gaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
IGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSksIG9wLCBvcmlnaW4sIE9wSW5mbyhj
b25zdGFudFJlZykpOworICAgICAgICAgICAgaW5kZXgsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZh
bHVlLT52YWx1ZSgpKSwgb3AsIG9yaWdpbiwgT3BJbmZvKHZhbHVlKSk7CiAgICAgfQogICAgIAog
ICAgIE5vZGUqIGluc2VydENvbnN0YW50KAotICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmln
aW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQpCisgICAg
ICAgIHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwg
Tm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQogICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydENv
bnN0YW50KGluZGV4LCBOb2RlT3JpZ2luKG9yaWdpbiksIHZhbHVlLCBvcCk7CiAgICAgfQogICAg
IAogICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2UoCi0gICAgICAgIHNpemVfdCBpbmRleCwg
Tm9kZU9yaWdpbiBvcmlnaW4sIEpTVmFsdWUgdmFsdWUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICAg
ICAgc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgRnJvemVuVmFsdWUqIHZhbHVlLCBV
c2VLaW5kIHVzZUtpbmQpCiAgICAgewogICAgICAgICBOb2RlVHlwZSBvcDsKICAgICAgICAgaWYg
KGlzRG91YmxlKHVzZUtpbmQpKQpAQCAtOTEsNyArODksMjcgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICBFZGdlIGluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICBzaXplX3QgaW5kZXgs
IENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAg
ICAgIHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwg
VXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9y
VXNlKGluZGV4LCBOb2RlT3JpZ2luKG9yaWdpbiksIHZhbHVlLCB1c2VLaW5kKTsKKyAgICB9CisK
KyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
LCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgsIG9yaWdpbiwgbV9ncmFwaC5mcmVlemUodmFs
dWUpLCBvcCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGluc2VydENvbnN0YW50KHNpemVfdCBp
bmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEpTVmFsdWUgdmFsdWUsIE5vZGVUeXBlIG9wID0gSlND
b25zdGFudCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudChpbmRleCwgb3Jp
Z2luLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSksIG9wKTsKKyAgICB9CisgICAgCisgICAgRWRnZSBp
bnNlcnRDb25zdGFudEZvclVzZShzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1Zh
bHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0
Q29uc3RhbnRGb3JVc2UoaW5kZXgsIG9yaWdpbiwgbV9ncmFwaC5mcmVlemUodmFsdWUpLCB1c2VL
aW5kKTsKKyAgICB9CisgICAgCisgICAgRWRnZSBpbnNlcnRDb25zdGFudEZvclVzZShzaXplX3Qg
aW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQp
CiAgICAgewogICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnRGb3JVc2UoaW5kZXgsIE5vZGVP
cmlnaW4ob3JpZ2luKSwgdmFsdWUsIHVzZUtpbmQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEx
LDExICszMTEsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChub2RlLT5hcml0aE1vZGUo
KSAhPSBBcml0aDo6Q2hlY2tPdmVyZmxvdwogICAgICAgICAgICAgICAgICYmIG5vZGUtPmFyaXRo
TW9kZSgpICE9IEFyaXRoOjpDaGVja092ZXJmbG93QW5kTmVnYXRpdmVaZXJvKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmlzSW50MzJDb25zdGFudChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKS0+
aXNJbnQzMkNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBy
ZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoCiAgICAgICAgICAgICAgICAgUmFuZ2VLZXk6OmFkZGl0
aW9uKG5vZGUtPmNoaWxkMSgpKSwKLSAgICAgICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOworICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkMigpLT5jb25zdGFudCgpLT52YWx1ZSgpLmFzSW50MzIoKSk7CiAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDaGVja0luQm91bmRzOiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5
NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExp
bmtCdWZmZXImIGxpbmtCCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBtX2ppdENvZGUtPmNv
bW1vbi5kb3VibGVDb25zdGFudHMgPSBzdGQ6Om1vdmUobV9ncmFwaC5tX2RvdWJsZUNvbnN0YW50
cyk7CiAjZW5kaWYKKyAgICAKKyAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWUoKTsKIAog
ICAgIEJpdFZlY3RvciB1c2VkSnVtcFRhYmxlczsKICAgICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6
aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRlcjsgKytp
dGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDcgKzM2LDcgQEAgSlNWYWx1ZSBMYXp5
SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAg
ICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICByZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAg
ICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsK
ICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKQEAgLTgxLDExICs4MSwxMSBAQCBUcmlTdGF0ZSBM
YXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgCiAgICAgY2FzZSBLbm93blZhbHVlOgogICAg
ICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIEtub3duVmFsdWU6Ci0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90aGVy
LnZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2
YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci52YWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgY2FzZSBT
aW5nbGVDaGFyYWN0ZXJTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxUb1NpbmdsZUNo
YXJhY3Rlcih2YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4g
ZXF1YWxUb1NpbmdsZUNoYXJhY3Rlcih2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIo
KSk7CiAgICAgICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICAgICAgcmV0dXJuIGVx
dWFsVG9TdHJpbmdJbXBsKHZhbHVlKCksIG90aGVyLnN0cmluZ0ltcGwoKSk7CisgICAgICAgICAg
ICByZXR1cm4gZXF1YWxUb1N0cmluZ0ltcGwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuc3RyaW5n
SW1wbCgpKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFNpbmdsZUNoYXJh
Y3RlclN0cmluZzoKQEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyCiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNlIEtub3du
VmFsdWU6Ci0gICAgICAgIHZhbHVlKCkuZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAg
ICAgICB2YWx1ZSgpLT5kdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CiAgICAgICAgIHJldHVy
bjsKICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgb3V0LnByaW50KCJM
YXp5OlNpbmdsZUNoYXJhY3RlclN0cmluZygiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisj
aW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBs
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ0LDEwICs0NCwxMCBA
QCBlbnVtIExhemluZXNzS2luZCB7CiAKIGNsYXNzIExhenlKU1ZhbHVlIHsKIHB1YmxpYzoKLSAg
ICBMYXp5SlNWYWx1ZShKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIExhenlKU1ZhbHVl
KEZyb3plblZhbHVlKiB2YWx1ZSA9IEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpKQogICAg
ICAgICA6IG1fa2luZChLbm93blZhbHVlKQogICAgIHsKLSAgICAgICAgdS52YWx1ZSA9IEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKICAgICB9CiAgICAg
CiAgICAgc3RhdGljIExhenlKU1ZhbHVlIHNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhciBjaGFy
YWN0ZXIpCkBAIC02NiwxOSArNjYsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHRyeUdldFZhbHVlKCkgY29uc3QKKyAgICBGcm96
ZW5WYWx1ZSogdHJ5R2V0VmFsdWUoR3JhcGgmKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1f
a2luZCA9PSBLbm93blZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7Ci0gICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAK
ICAgICBKU1ZhbHVlIGdldFZhbHVlKFZNJikgY29uc3Q7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1
ZSgpIGNvbnN0CisgICAgRnJvemVuVmFsdWUqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAg
IEFTU0VSVChtX2tpbmQgPT0gS25vd25WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpk
ZWNvZGUodS52YWx1ZSk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOwogICAgIH0KICAgICAKICAg
ICBVQ2hhciBjaGFyYWN0ZXIoKSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gZm9yIGEga2luZCBvZiB2YWx1ZSB0aGF0IGNhbid0LgogICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgewogICAgICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgICAgICByZXR1cm4g
dmFsdWUoKS5hc0ludDMyKCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUoKS0+dmFsdWUoKS5h
c0ludDMyKCk7CiAgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcigpOwogICAgICAgICBkZWZhdWx0OgpAQCAtMTE2LDcgKzExNiw3
IEBAIHB1YmxpYzoKICAgICAKIHByaXZhdGU6CiAgICAgdW5pb24gewotICAgICAgICBFbmNvZGVk
SlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlOwogICAgICAgICBVQ2hh
ciBjaGFyYWN0ZXI7CiAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGw7CiAgICAgfSB1OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAko
cmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmll
ZE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSw4ICszOSw4IEBAIE1pbmlm
aWVkTm9kZSBNaW5pZmllZE5vZGU6OmZyb21Ob2RlKE5vZGUKICAgICBNaW5pZmllZE5vZGUgcmVz
dWx0OwogICAgIHJlc3VsdC5tX2lkID0gTWluaWZpZWRJRChub2RlKTsKICAgICByZXN1bHQubV9v
cCA9IG5vZGUtPm9wKCk7Ci0gICAgaWYgKGhhc0NvbnN0YW50TnVtYmVyKG5vZGUtPm9wKCkpKQot
ICAgICAgICByZXN1bHQubV9pbmZvID0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKTsKKyAgICBpZiAo
aGFzQ29uc3RhbnQobm9kZS0+b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBKU1ZhbHVl
OjplbmNvZGUobm9kZS0+Y29uc3RhbnQoKS0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoaGFzV2Vh
a0NvbnN0YW50KG5vZGUtPm9wKCkpKQogICAgICAgICByZXN1bHQubV9pbmZvID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+d2Vha0NvbnN0YW50KCkpOwogICAgIGVsc2UgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAx
Njk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00Miw3ICs0Miw2IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVk
R3JhcGgoTm9kZVQKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50
OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAg
ICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CkBAIC01OSwyMiArNTgsMTEgQEAgcHVibGljOgogICAgIE1pbmlmaWVkSUQgaWQoKSBjb25z
dCB7IHJldHVybiBtX2lkOyB9CiAgICAgTm9kZVR5cGUgb3AoKSBjb25zdCB7IHJldHVybiBtX29w
OyB9CiAgICAgCi0gICAgYm9vbCBoYXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0
YW50TnVtYmVyKCkgfHwgaGFzV2Vha0NvbnN0YW50KCk7IH0KKyAgICBib29sIGhhc0NvbnN0YW50
KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnQobV9vcCk7IH0KICAgICAKLSAgICBib29sIGhh
c0NvbnN0YW50TnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIobV9vcCk7
IH0KLSAgICAKLSAgICB1bnNpZ25lZCBjb25zdGFudE51bWJlcigpIGNvbnN0CisgICAgSlNWYWx1
ZSBjb25zdGFudCgpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnROdW1i
ZXIobV9vcCkpOwotICAgICAgICByZXR1cm4gbV9pbmZvOwotICAgIH0KLSAgICAKLSAgICBib29s
IGhhc1dlYWtDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1dlYWtDb25zdGFudChtX29wKTsg
fQotICAgIAotICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChoYXNXZWFrQ29uc3RhbnQobV9vcCkpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEpTQ2VsbCo+KG1faW5mbyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUoYml0
d2lzZV9jYXN0PEVuY29kZWRKU1ZhbHVlPihtX2luZm8pKTsKICAgICB9CiAgICAgCiAgICAgc3Rh
dGljIE1pbmlmaWVkSUQgZ2V0SUQoTWluaWZpZWROb2RlKiBub2RlKSB7IHJldHVybiBub2RlLT5p
ZCgpOyB9CkBAIC04NCwxNyArNzIsMTMgQEAgcHVibGljOgogICAgIH0KICAgICAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoTm9kZVR5cGUgdHlwZSkKKyAgICBz
dGF0aWMgYm9vbCBoYXNDb25zdGFudChOb2RlVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIHR5cGUgPT0gSlNDb25zdGFudCB8fCB0eXBlID09IEludDUyQ29uc3RhbnQgfHwgdHlwZSA9
PSBEb3VibGVDb25zdGFudDsKICAgICB9Ci0gICAgc3RhdGljIGJvb2wgaGFzV2Vha0NvbnN0YW50
KE5vZGVUeXBlIHR5cGUpCi0gICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBXZWFrSlNDb25z
dGFudDsKLSAgICB9CiAgICAgCiAgICAgTWluaWZpZWRJRCBtX2lkOwotICAgIHVpbnRwdHJfdCBt
X2luZm87CisgICAgdWludDY0X3QgbV9pbmZvOwogICAgIE5vZGVUeXBlIG1fb3A7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY5NTg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
NiwxMSArNDA2LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAg
IGJvb2wgaXNXZWFrQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG9wKCkgPT0gV2Vh
a0pTQ29uc3RhbnQ7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaXNQaGFudG9tQXJndW1lbnRzKCkK
ICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IFBoYW50b21Bcmd1bWVudHM7CkBAIC00MjIs
NyArNDE3LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAg
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC00MzAsMTMg
KzQyNCwxNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB1bnNpZ25l
ZCBjb25zdGFudE51bWJlcigpCisgICAgRnJvemVuVmFsdWUqIGNvbnN0YW50KCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOwotICAgICAgICByZXR1cm4gbV9vcEluZm87Cisg
ICAgICAgIEFTU0VSVChoYXNDb25zdGFudCgpKTsKKyAgICAgICAgaWYgKG9wKCkgPT0gUGhhbnRv
bUFyZ3VtZW50cykKKyAgICAgICAgICAgIHJldHVybiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0
b24oKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudCh1bnNpZ25lZCBjb25z
dGFudE51bWJlcikKKyAgICAvLyBEb24ndCBjYWxsIHRoaXMgZGlyZWN0bHkgLSB1c2UgR3JhcGg6
OmNvbnZlcnRUb0NvbnN0YW50KCkgaW5zdGVhZCEKKyAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50
KEZyb3plblZhbHVlKiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGlmIChoYXNEb3VibGVSZXN1bHQo
KSkKICAgICAgICAgICAgIG1fb3AgPSBEb3VibGVDb25zdGFudDsKQEAgLTQ0NSwxNSArNDQyLDcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX29wID0gSlNDb25z
dGFudDsKICAgICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRD
bG9iYmVyIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICBtX29wSW5mbyA9IGNvbnN0YW50
TnVtYmVyOwotICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGNvbnZlcnRUb1dlYWtDb25zdGFudChKU0NlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBtX29w
ID0gV2Vha0pTQ29uc3RhbnQ7Ci0gICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZU1pZ2h0Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgbV9vcElu
Zm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihjZWxsKTsKKyAgICAgICAgbV9vcEluZm8gPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7
CiAgICAgfQogICAgIApAQCAtNTE4LDUyICs1MDcsMjQgQEAgc3RydWN0IE5vZGUgewogICAgICAg
ICBtX29wID0gVG9TdHJpbmc7CiAgICAgfQogICAgIAotICAgIEpTQ2VsbCogd2Vha0NvbnN0YW50
KCkKKyAgICBib29sIGlzSW50MzJDb25zdGFudCgpCiAgICAgewotICAgICAgICBBU1NFUlQob3Ao
KSA9PSBXZWFrSlNDb25zdGFudCk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxs
Kj4obV9vcEluZm8pOworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCkt
PnZhbHVlKCkuaXNJbnQzMigpOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0Nv
bnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudCgp
CiAgICAgewotICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAgY2FzZSBXZWFrSlNDb25z
dGFudDoKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKHdlYWtDb25zdGFudCgpKTsKLSAgICAg
ICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5jb25z
dGFudFJlZ2lzdGVyKEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnROdW1iZXIo
KSkuZ2V0KCk7Ci0gICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsgLy8gSGF2
ZSB0byByZXR1cm4gc29tZXRoaW5nIGluIHJlbGVhc2UgbW9kZS4KLSAgICAgICAgfQotICAgIH0K
LQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxv
Y2spLmlzSW50MzIoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpc0NvbnN0
YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0RvdWJsZSgpOwotICAgICAg
ICBpZiAocmVzdWx0KQotICAgICAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQoY29kZUJs
b2NrKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50
KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0RvdWJsZSgpOwogICAgIH0KICAgICAKLSAgICBi
b29sIGlzTnVtYmVyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgYm9vbCBpc051
bWJlckNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaXNDb25zdGFudCgp
ICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNOdW1iZXIoKTsKLSAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSAoaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jaykgfHwgaXNEb3VibGVDb25z
dGFudChjb2RlQmxvY2spKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc051bWJlcigpOwogICAgIH0K
ICAgICAKLSAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQor
ICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29u
c3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzQm9vbGVhbigpOworICAg
ICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNCb29sZWFu
KCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY29udGFpbnNNb3ZIaW50KCkKQEAgLTEwMTYsMTEg
Kzk3NywxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU0NlbGwq
IGZ1bmN0aW9uKCkKKyAgICBGcm96ZW5WYWx1ZSogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGhhc0Z1bmN0aW9uKCkpOwotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SlNGdW5jdGlvbio+KG1fb3BJbmZvKTsKLSAgICAgICAgQVNTRVJUKEpTVmFsdWUo
cmVzdWx0KS5pc0Z1bmN0aW9uKCkpOworICAgICAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKHJl
c3VsdC0+dmFsdWUoKS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIG1hY3JvKERvdWJsZUNvbnN0YW50LCBOb2RlUmVzdWx0RG91YmxlIHwg
Tm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oSW50NTJDb25zdGFudCwgTm9kZVJlc3VsdElu
dDUyIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAotICAgIC8qIEEgY29uc3RhbnQgbm90IGlu
IHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sLiBVc2VzIGdldCBwYXRjaGVkIHRvIGp1bXBz
IHRoYXQgZXhpdCB0aGUgKi9cCi0gICAgLyogY29kZSBibG9jay4gKi9cCi0gICAgbWFjcm8oV2Vh
a0pTQ29uc3RhbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVEb2VzTm90RXhpdCkgXAotICAgIFwKICAg
ICAvKiBNYXJrZXIgdG8gaW5kaWNhdGUgdGhhdCBhbiBvcGVyYXRpb24gd2FzIG9wdGltaXplZCBl
bnRpcmVseSBhbmQgYWxsIHRoYXQgaXMgbGVmdCAqL1wKICAgICAvKiBpcyB0byBtYWtlIG9uZSBu
b2RlIGFsaWFzIGFub3RoZXIuIENTRSB3aWxsIGxhdGVyIHVzdWFsbHkgZWxpbWluYXRlIHRoaXMg
bm9kZSwgKi9cCiAgICAgLyogdGhvdWdoIGl0IG1heSBjaG9vc2Ugbm90IHRvIGlmIGl0IHdvdWxk
IGNvcnJ1cHQgcHJlZGljdGlvbnMgKHZlcnkgcmFyZSkuICovXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDksNyArMTA5LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVU
eXBlJiBzdAogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50Ogog
ICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNh
c2UgSWRlbnRpdHk6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsMjkgKzU1Niw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzS25vd25Ob3ROdW1iZXIoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5v
ZGUobm9kZSkubV90eXBlICYgU3BlY0Z1bGxOdW1iZXIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90
Q2VsbChOb2RlKiBub2RlKSB7IHJldHVybiAhKG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUg
JiBTcGVjQ2VsbCk7IH0KICAgICAKLSAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFu
dCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0
LmdyYXBoKCkuaXNDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUq
IG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNKU0NvbnN0YW50KG5vZGUpOyB9Ci0gICAg
Ym9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5p
c0ludDMyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSog
bm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KG5vZGUpOyB9Ci0g
ICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNOdW1iZXJDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQo
Tm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Jvb2xlYW5Db25zdGFudChub2Rl
KTsgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgaW50MzJfdCB2YWx1
ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFu
dChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFu
dChub2RlKTsgfQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCogYWRkcmVzc09mRG91
YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29u
c3RhbnQobm9kZSk7IH0KLSNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9k
ZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KLSAgICBKU0Z1bmN0
aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5n
cmFwaCgpLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bGxD
b25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZSkuaXNOdWxsKCk7Ci0gICAgfQotCiAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmll
clVJRCh1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgp
LmlkZW50aWZpZXJzKClbaW5kZXhdOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExp
bmsuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIHZvaWQgbGluayhTdGF0
ZSYgc3RhdGUpCiAgICAgaWYgKCFncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZyYW1lcy0+aXNFbXB0
eSgpKQogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uaW5saW5lQ2FsbEZyYW1lcyA9IGdy
YXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzOwogICAgIAorICAgIG1fZ3JhcGgucmVnaXN0ZXJG
cm96ZW5WYWx1ZSgpOworCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQg
d2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAgLy8gZGVwZW5k
aW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAgICBDQ2FsbEhl
bHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkx
LDYgKzE5MSwxMyBAQCB2b2lkIEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAK
IHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKIHsKKyAgICBkdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUo
CisgICAgICAgIG91dCwgY29udGV4dCwgKCEhKnRoaXMgJiYgaXNDZWxsKCkpID8gYXNDZWxsKCkt
PnN0cnVjdHVyZSgpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4
dEFzc3VtaW5nU3RydWN0dXJlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKICAgICBpZiAoISp0aGlzKQog
ICAgICAgICBvdXQucHJpbnQoIjxKU1ZhbHVlKCk+Iik7CiAgICAgZWxzZSBpZiAoaXNJbnQzMigp
KQpAQCAtMjA3LDcgKzIxNCw3IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYKICAgICAgICAgb3V0LnByaW50ZigiRG91YmxlOiAlMDh4OiUwOHgsICVsZiIsIHUuYXNU
d29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91YmxlKCkpOwogI2VuZGlmCiAgICAg
fSBlbHNlIGlmIChpc0NlbGwoKSkgewotICAgICAgICBpZiAoYXNDZWxsKCktPmluaGVyaXRzKEpT
U3RyaW5nOjppbmZvKCkpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5p
c1N1YmNsYXNzT2YoSlNTdHJpbmc6OmluZm8oKSkpIHsKICAgICAgICAgICAgIEpTU3RyaW5nKiBz
dHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CiAgICAgICAgICAgICBvdXQucHJp
bnQoIlN0cmluZyIpOwogICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3BlKCkpCkBAIC0yMjMs
MTEgKzIzMCwxMSBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mCiAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAodW5yZXNvbHZl
ZCkiKTsKICAgICAgICAgICAgIG91dC5wcmludCgiOiAiLCBpbXBsKTsKLSAgICAgICAgfSBlbHNl
IGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoU3RydWN0dXJlOjppbmZvKCkpKQorICAgICAgICB9IGVs
c2UgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViY2xhc3NPZihTdHJ1Y3R1cmU6Omlu
Zm8oKSkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZTogIiwgaW5Db250ZXh0KCpq
c0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpLCBjb250ZXh0KSk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgb3V0LnByaW50KCJDZWxsOiAiLCBSYXdQb2ludGVyKGFzQ2VsbCgpKSk7Ci0g
ICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCphc0NlbGwoKS0+c3RydWN0dXJl
KCksIGNvbnRleHQpLCAiKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgKCIsIGluQ29udGV4
dCgqc3RydWN0dXJlLCBjb250ZXh0KSwgIikiKTsKICAgICAgICAgfQogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIG91dC5wcmludCgiLCBJRDogIiwgYXNDZWxsKCktPnN0cnVjdHVyZUlEKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2
aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIEpTU3RyaW5nOwogY2xh
c3MgUHJvcGVydHlOYW1lOwogY2xhc3MgUHJvcGVydHlTbG90OwogY2xhc3MgUHV0UHJvcGVydHlT
bG90OworY2xhc3MgU3RydWN0dXJlOwogI2lmIEVOQUJMRShERkdfSklUKQogbmFtZXNwYWNlIERG
RyB7CiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTI3Nyw2ICsyNzgsNyBAQCBwdWJsaWM6CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2
b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAg
IHZvaWQgZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqLCBTdHJ1Y3R1cmUqKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTT2Jq
ZWN0KiBzeW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232504</attachid>
            <date>2014-06-04 14:57:35 -0700</date>
            <delta_ts>2014-06-04 16:38:30 -0700</delta_ts>
            <desc>more!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109099</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBACiAJCTBGNjY2RUNEMTgzNkIz
N0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0Uw
MEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKKwkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcg
LyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQjkxODYxMjQ0QzAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjEzMSw2ICsyMTMzLDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0g
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zyb3plblZh
bHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5oOyBwYXRo
ID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpT
Q2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTIsNiArNDcxNiw4IEBACiAJCQkJMEY5RDMzOTUxN0ZGQzRF
NjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCiAJCQkJQTdEODlDRTkxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggKi8sCisJCQkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLywKKwkJCQkwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuaCAqLywKIAkJCQkyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovLAogCQkJCTJBODgwNjc3MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLApAQCAtNTU3Miw2ICs1NTc4LDcgQEAKIAkJ
CQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2OUNDODkxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0
MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02ODcyLDYgKzY4NzksNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYw
MDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0
MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xl
YW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VDMTFBMDAx
M0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NTEw
N0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBA
IHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0
cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBub2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShUIG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUp
OwogICAgIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIEZpbHRy
YXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7
CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRU
eXBlKTsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYs
IEpTVmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZh
bHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3Js
ZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKQEAgLTE2NSwxNCAr
MTY1LDE0IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1
bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsKICAgICAKLSAgICB2b2lkIHNldEJ1aWx0SW5Db25z
dGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIHZvaWQgc2V0QnVpbHRJbkNvbnN0
YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGFic3RyYWN0
VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KTsKICAgICAgICAgYWJzdHJhY3RWYWx1ZS5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obm9kZSk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB2b2lkIHNldENvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVl
KQogICAgIHsKICAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw4
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEpT
Q29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3Rh
bnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
IHsKLSAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsIG1fZ3JhcGgudmFsdWVPZkpTQ29u
c3RhbnQobm9kZSkpOworICAgICAgICBzZXRCdWlsdEluQ29uc3RhbnQobm9kZSwgKm5vZGUtPmNv
bnN0YW50KCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtODU1LDMyICs4
NTQsMzIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0g
anNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkKTsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsIHR5cGVTdHJpbmcpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGgu
ZnJlZXplKHR5cGVTdHJpbmcpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5t
X3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdz
Lm51bWJlclN0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBo
LmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRp
b24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0
YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygp
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYg
KGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcnJh
eVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0
aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmco
KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlm
IChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkp
OworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHZtLT5zbWFs
bFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENo
aWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0
cmluZ3MuYm9vbGVhblN0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICpt
X2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTQzMiw3ICsxNDMxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgU2tpcFNjb3BlOiB7CiAg
ICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwog
ICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFs
dWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpOworICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKEpTVmFsdWUoanNDYXN0PEpTU2Nv
cGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjT2JqZWN0T3RoZXIpOwpA
QCAtMTQ3OSw3ICsxNDc4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNb
MF0uc3BlY2lmaWNWYWx1ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAg
ICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQo
KSk7CkBAIC0xNzYzLDE0ICsxNzYyLDE0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlm
ICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBub2Rl
LT5mdW5jdGlvbigpLT52YWx1ZSgpKSB7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29u
c3RhbnRzKHRydWUpOwogICAgICAgICAgICAgQVNTRVJUKHZhbHVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUp
OyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUt
PmNoaWxkMSgpLCBub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgZmlsdGVyQnlWYWx1ZShub2Rl
LT5jaGlsZDEoKSwgKm5vZGUtPmZ1bmN0aW9uKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIApAQCAtMjEyNCw3ICsyMTIzLDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdElu
dGVycHJldGVyPEFicwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZp
bHRlckJ5VmFsdWUoCi0gICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBj
b25jcmV0ZVZhbHVlKQorICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0VmFsdWUsIEZyb3plblZh
bHVlIGNvbmNyZXRlVmFsdWUpCiB7CiAgICAgaWYgKGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1
ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0cmF0aW9uT0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0
aW9uT0s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCB2
b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogfQogCi12b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYg
Z3JhcGgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZp
YyhHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoISF2
YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS52
YWx1ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
c3RydWN0dXJlKCk7CiAgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0
dXJlKTsKICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKQEAgLTU5LDE3
ICs1OSwxNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgICAgICAKLSAgICBtX3R5cGUgPSBzcGVj
dWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSk7Ci0gICAgbV92YWx1ZSA9IHZhbHVlOworICAgIG1fdHlw
ZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWUgPSB2
YWx1ZS52YWx1ZSgpOwogICAgICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgYXNz
ZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgm
IGdyYXBoLCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRl
KQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1
ZSYgdmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjbG9iYmVyU3RhdGUpCiB7Ci0gICAgaWYg
KCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCEhdmFsdWUgJiYgdmFs
dWUudmFsdWUoKS5pc0NlbGwoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRl
cihzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBhc3N1
bWUgdGhhdCB0aGUgd2F0Y2hwb2ludCBmb3IgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIHNldC4KICAg
ICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4ndCBiZWNhdXNlIG91ciB2aWV3IG9mIHdoYXQgc3RydWN0
dXJlIGEgdmFsdWUgaGFzIGtlZXBzIGNoYW5naW5nLiBUaGF0J3MKQEAgLTkwLDggKzkwLDggQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKUwogICAgICAgICBtX2FycmF5
TW9kZXMgPSAwOwogICAgIH0KICAgICAKLSAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZSk7Ci0gICAgbV92YWx1ZSA9IHZhbHVlOworICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9u
RnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwog
ICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgp
OwpAQCAtMjIxLDExICsyMjEsMTEgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpm
aWx0ZXIoUwogICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KCk7CiB9CiAKLUZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnlWYWx1ZShKU1ZhbHVlIHZhbHVlKQorRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3plblZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IGZpbHRlcihzcGVjdWxh
dGlvbkZyb21WYWx1ZSh2YWx1ZSkpOworICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0gZmls
dGVyKHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpKTsKICAgICBpZiAobV90eXBl
KQotICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1
ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJyYXlQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZH
RmlsdHJhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
IgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIgpAQCAtMTczLDggKzE3NCw4
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgmLCBKU1ZhbHVlKTsKLSAgICB2
b2lkIHNldChHcmFwaCYsIEpTVmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CisgICAgdm9p
ZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgmLCBjb25zdCBGcm96ZW5WYWx1ZSYpOworICAgIHZvaWQg
c2V0KEdyYXBoJiwgY29uc3QgRnJvemVuVmFsdWUmLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwog
ICAgIHZvaWQgc2V0KEdyYXBoJiwgU3RydWN0dXJlKik7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKQEAgLTI2Miw3ICsyNjMsNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRl
ZFR5cGUgdHlwZSk7CiAgICAgCi0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEpT
VmFsdWUgdmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBG
cm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIAogICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1
ZSkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOCw4ICsyMDgsNyBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbml0X2xhenlfcmVnIHNpbmNlIGl0IHRy
ZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJlIGZpeGVkLCBidXQgaXQncyBlYXNpZXIg
dG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdvcmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgPT0gSlNDb25zdGFudAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3VyY2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UtPm9wKCkgPT0g
SlNDb25zdGFudCAmJiAhKnNvdXJjZS0+Y29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRvdGFsbHkgZGVhZCwgdGhlbiBpZ25vcmUg
aXQuCkBAIC01MTEsNyArNTEwLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkLCBvcmlnaW4p
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252
ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKG9y
aWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBtX2dyYXBoLmZyZWV6ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqc051bWJlcihvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1l
LT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKTsKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAg
LTUyOCwxMiArNTI4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFub2RlLT5pc0ludDMyQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbm9kZS0+Y2hpbGQxKCktPnZh
bHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCF2
YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCkt
Pmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVlLmFzSW50MzIoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW50MzJfdCBpbmRleCA9IG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAgICAgICAgICAgICAgICAgICAgICAgIHx8
IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+PQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5z
aXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY3LDE3ICs2NywxNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3Jh
cGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgaWYgKCFub2RlLT5pc051bWJlckNv
bnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1
ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOworICAgICAgICBkb3VibGUg
dmFsdWUgPSBub2RlLT5hc051bWJlcigpOwogICAgICAgICByZXR1cm4gKHZhbHVlIHx8IDEuMCAv
IHZhbHVlID4gMC4wKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBpc05vdFBvc1plcm8oTm9kZSog
bm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFwaC5pc051bWJlckNvbnN0YW50KG5vZGUp
KQorICAgICAgICBpZiAoIW5vZGUtPmlzTnVtYmVyQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVy
Q29uc3RhbnQobm9kZSk7CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IG5vZGUtPmFzTnVtYmVyKCk7
CiAgICAgICAgIHJldHVybiAodmFsdWUgfHwgMS4wIC8gdmFsdWUgPCAwLjApOwogICAgIH0KIApA
QCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPGludCBwb3dlcj4KICAgICBi
b29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50KE5vZGUqIG5vZGUpCiAgICAgewotICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKCkpOworICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9kZS0+YXNKU1Zh
bHVlKCk7CiAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZG91YmxlIGltbWVkaWF0ZSA9IGltbWVkaWF0ZVZh
bHVlLmFzTnVtYmVyKCk7CkBAIC0xMzAsNyArMTMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAgICAg
aWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9IEpTQ29uc3RhbnQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1v
dW50LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7CisgICAgICAgICAgICBKU1ZhbHVl
IGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAg
aWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0ZVZhbHVlLmFzSW50MzIoKSA+IDMyIC0g
cG93ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwxOCArMTMyLDE2
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVu
dEJsb2NrKDApCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKLSAgICAgICAgLCBtX2NvbnN0
YW50VW5kZWZpbmVkKFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnROdWxsKFVJTlRfTUFY
KQotICAgICAgICAsIG1fY29uc3RhbnROYU4oVUlOVF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFu
dDEoVUlOVF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFudHMobV9jb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRSZWdpc3RlcnMoKSkKKyAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKGdyYXBo
LmZyZWV6ZShqc1VuZGVmaW5lZCgpKSkKKyAgICAgICAgLCBtX2NvbnN0YW50TnVsbChncmFwaC5m
cmVlemUoanNOdWxsKCkpKQorICAgICAgICAsIG1fY29uc3RhbnROYU4oZ3JhcGguZnJlZXplKGpz
TnVtYmVyKFBOYU4pKSkKKyAgICAgICAgLCBtX2NvbnN0YW50T25lKGdyYXBoLmZyZWV6ZShqc051
bWJlcigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVudHMobV9jb2RlQmxvY2stPm51bVBhcmFt
ZXRlcnMoKSkKICAgICAgICAgLCBtX251bUxvY2FscyhtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJTbG90cygwKQogICAgICAgICAsIG1fbnVt
UGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1faW5saW5lU3RhY2tUb3AoMCkKICAgICAgICAg
LCBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKGZhbHNlKQotICAgICAgICAsIG1fZW1wdHlKU1ZhbHVl
SW5kZXgoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jdXJyZW50SW5zdHJ1Y3Rpb24oMCkKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwpAQCAtMjE3LDEyICsyMTUsNyBAQCBw
cml2YXRlOgogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJhbmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2Rl
IGluc3RydWN0aW9uLgogICAgIE5vZGUqIGdldERpcmVjdChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZCkKICAgICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYSBjb25zdGFudD8KLSAgICAgICAgaWYgKG9w
ZXJhbmQuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudCA9IG9w
ZXJhbmQudG9Db25zdGFudEluZGV4KCk7Ci0gICAgICAgICAgICBBU1NFUlQoY29uc3RhbnQgPCBt
X2NvbnN0YW50cy5zaXplKCkpOwotICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29u
c3RhbnQpOwotICAgICAgICB9CisgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkp
OwogCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1lbnQ/CiAgICAgICAgIGlmIChvcGVyYW5k
LmlzQXJndW1lbnQoKSkKQEAgLTIzNCwxMyArMjI3LDI1IEBAIHByaXZhdGU6CiAKICAgICBOb2Rl
KiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgeworICAgICAgICBpZiAob3BlcmFu
ZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBv
cGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOworICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXgg
Pj0gbV9jb25zdGFudHMuc2l6ZSgpIHx8IG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdKSB7Cisg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAo
Y29uc3RhbnRJbmRleCA+PSBtX2NvbnN0YW50cy5zaXplKCkpCisgICAgICAgICAgICAgICAgICAg
IG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCArIDEpOworICAgICAgICAgICAgICAgIG1f
Y29uc3RhbnRzW2NvbnN0YW50SW5kZXhdID0KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmdseSh2YWx1ZSkpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50c1tjb25zdGFudEluZGV4
XTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKSB7
CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpLT5pc0Nsb3N1cmVDYWxsKSB7CiAg
ICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lKCktPmNh
bGxlZUNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0g
SlNTdGFjazo6Q2FsbGVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50
KGNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0NvbnN0YW50KGNhbGxlZSk7
CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6U2NvcGVD
aGFpbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudChjYWxsZWUtPnNj
b3BlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNDb25zdGFudChjYWxsZWUtPnNj
b3BlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zmc2V0
KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0
Q2FsbGVlKTsKQEAgLTMwOSwxNCArMzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKG1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
VmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20gYW4gT1NSIGV4aXQgc3RhbmRwb2ludC4g
V2Ugd291bGRuJ3QgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gYWJsZSB0byBkbyB0aGlzIGZv
ciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUgYmVjYXVzZSB3ZSdyZSBkZWFsaW5nCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVzaGVkIGxvY2FsLiBGb3IgbW9zdCBsb2Nh
bHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExvY2FsCi0gICAgICAgICAgICAgICAgICAg
IC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUgdXNlcyBpbiBERkcgSVIgd2hlcmV2ZXIg
dGhlcmUgd291bGQgaGF2ZQotICAgICAgICAgICAgICAgICAgICAvLyBiZWVuIHVzZXMgaW4gYnl0
ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24gZG9lcyBub3QgZG8gdGhpcy4gQnV0Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5lLCBiZWNhdXNlIHdlIGRvbid0IG5lZWQg
dG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCi0gICAgICAgICAgICAgICAgICAgIC8vIGxv
Y2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkga2lja3MgaW4gZm9yIGNhcHR1cmVkIGxv
Y2Fscy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVkQ29uc3RhbnQodmFsdWUp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNDb25zdGFudCh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01NTQsMzIgKzU1MiwxNSBA
QCBwcml2YXRlOgogICAgICAgICBmbHVzaEZvclRlcm1pbmFsKCk7CiAgICAgfQogCi0gICAgLy8g
Tk9URTogT25seSB1c2UgdGhpcyB0byBjb25zdHJ1Y3QgY29uc3RhbnRzIHRoYXQgYXJpc2UgZnJv
bSBub24tc3BlY3VsYXRpdmUKLSAgICAvLyBjb25zdGFudCBmb2xkaW5nLiBJLmUuIGNyZWF0aW5n
IGNvbnN0YW50cyB1c2luZyB0aGlzIGlmIHdlIGhhZCBjb25zdGFudAotICAgIC8vIGZpZWxkIGlu
ZmVyZW5jZSB3b3VsZCBiZSBhIGJhZCBpZGVhLCBzaW5jZSB0aGUgYnl0ZWNvZGUgcGFyc2VyJ3Mg
Zm9sZGluZwotICAgIC8vIGRvZXNuJ3QgaGFuZGxlIGxpdmVuZXNzIHByZXNlcnZhdGlvbi4KLSAg
ICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQorICAg
IC8vIEFzc3VtZXMgdGhhdCB0aGUgY29uc3RhbnQgc2hvdWxkIGJlIHN0cm9uZ2x5IG1hcmtlZC4K
KyAgICBOb2RlKiBqc0NvbnN0YW50KEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXg7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZp
bmRDb25zdGFudChjb25zdGFudFZhbHVlLCBjb25zdGFudEluZGV4KSkgewotICAgICAgICAgICAg
YWRkQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBl
bmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VS
VChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFu
dEluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1f
Z3JhcGguZnJlZXplU3Ryb25nbHkoY29uc3RhbnRWYWx1ZSkpKTsKICAgICB9CiAKLSAgICBOb2Rl
KiBnZXRKU0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50KQorICAgIE5vZGUqIHdlYWtKU0NvbnN0
YW50KEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkKICAgICB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBt
X2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlOwotICAgICAgICBpZiAobm9kZSkKLSAgICAg
ICAgICAgIHJldHVybiBub2RlOwotCi0gICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgo
SlNDb25zdGFudCwgT3BJbmZvKGNvbnN0YW50KSk7Ci0gICAgICAgIG1fY29uc3RhbnRzW2NvbnN0
YW50XS5hc0pTVmFsdWUgPSByZXN1bHQ7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb25z
dGFudFZhbHVlKSkpOwogICAgIH0KIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdG8gZ2V0L3Nl
dCB0aGUgdGhpcyB2YWx1ZS4KQEAgLTU5MywxNDkgKzU3NCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IHNldChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+dGhpc1JlZ2lzdGVyKCksIHZhbHVl
KTsKICAgICB9CiAKLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBjaGVja2luZyBub2Rl
cyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbm9kZS0+b3AoKSA9PSBKU0NvbnN0YW50OwotICAgIH0KLSAgICBi
b29sIGlzSW50MzJDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
SlNDb25zdGFudChub2RlKSAmJiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0ludDMyKCk7Ci0g
ICAgfQotICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGdldHRpbmcgY29uc3RhbnQgdmFs
dWVzLgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+Y29u
c3RhbnROdW1iZXIoKSk7Ci0gICAgfQotICAgIGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQo
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkp
OwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNJbnQzMigpOwotICAg
IH0KLSAgICAKLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3aXRoIHRo
ZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICBOb2RlKiBjb25zdGFudFVuZGVmaW5lZCgpCi0gICAg
ewotICAgICAgICAvLyBIYXMgbV9jb25zdGFudFVuZGVmaW5lZCBiZWVuIHNldCB1cCB5ZXQ/Ci0g
ICAgICAgIGlmIChtX2NvbnN0YW50VW5kZWZpbmVkID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAg
ICAvLyBTZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIHVuZGVmaW5lZCwgaWYgd2UgZmluZCBp
dCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhpcyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Q29uc3RhbnRzID0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAg
ICAgICAgICAgIGZvciAobV9jb25zdGFudFVuZGVmaW5lZCA9IDA7IG1fY29uc3RhbnRVbmRlZmlu
ZWQgPCBudW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50VW5kZWZpbmVkKSB7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50VW5kZWZpbmVkKTsKLSAgICAgICAgICAg
ICAgICBpZiAodGVzdE1lLmlzVW5kZWZpbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnRVbmRlZmluZWQpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAvLyBBZGQgdW5kZWZpbmVkIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMs
IGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAg
ICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAg
ICAgICAgIGFkZENvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwotICAgICAgICAgICAgbV9jb25zdGFu
dHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3Rh
bnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIG1fY29uc3RhbnRVbmRlZmluZWQgbXVzdCByZWZlciB0
byBhbiBlbnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUg
dmFsdWUgJ3VuZGVmaW5lZCcuCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50VW5kZWZpbmVkKS5pc1Vu
ZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudFVuZGVm
aW5lZCk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIEpTQ29uc3RhbnQg
d2l0aCB0aGUgdmFsdWUgJ251bGwnLgotICAgIE5vZGUqIGNvbnN0YW50TnVsbCgpCi0gICAgewot
ICAgICAgICAvLyBIYXMgbV9jb25zdGFudE51bGwgYmVlbiBzZXQgdXAgeWV0PwotICAgICAgICBp
ZiAobV9jb25zdGFudE51bGwgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8vIFNlYXJjaCB0
aGUgY29uc3RhbnQgcG9vbCBmb3IgbnVsbCwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1
c2UgdGhpcyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9j
b25zdGFudE51bGwgPSAwOyBtX2NvbnN0YW50TnVsbCA8IG51bWJlck9mQ29uc3RhbnRzOyArK21f
Y29uc3RhbnROdWxsKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50
TnVsbCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RNZS5pc051bGwoKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE51bGwpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgbnVsbCB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3Rh
bnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAg
ICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0g
ICAgICAgICAgICBhZGRDb25zdGFudChqc051bGwoKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50
cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFu
dHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudE51bGwgbXVzdCByZWZlciB0byBhbiBl
bnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUgdmFsdWUg
J251bGwnLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE51bGwpLmlzTnVsbCgpKTsKLSAgICAgICAg
cmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE51bGwpOwotICAgIH0KLQotICAgIC8vIFRo
aXMgbWV0aG9kIHJldHVybnMgYSBEb3VibGVDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAxLgotICAg
IE5vZGUqIG9uZSgpCi0gICAgewotICAgICAgICAvLyBIYXMgbV9jb25zdGFudDEgYmVlbiBzZXQg
dXAgeWV0PwotICAgICAgICBpZiAobV9jb25zdGFudDEgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAg
ICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3IgdGhlIHZhbHVlIDEsIGlmIHdlIGZp
bmQgaXQsIHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICBmb3IgKG1fY29uc3RhbnQxID0gMDsgbV9jb25zdGFudDEgPCBudW1iZXJP
ZkNvbnN0YW50czsgKyttX2NvbnN0YW50MSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdGVz
dE1lID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4
ICsgbV9jb25zdGFudDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0TWUuaXNJbnQzMigpICYm
IHRlc3RNZS5hc0ludDMyKCkgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpT
Q29uc3RhbnQobV9jb25zdGFudDEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBB
ZGQgdGhlIHZhbHVlIDEgdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywgYW5kIGFkZCBhIGNv
cnJlc3BvbmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAgIEFTU0VSVChtX2Nv
bnN0YW50cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAgICAgICAgYWRkQ29u
c3RhbnQoanNOdW1iZXIoMSkpOwotICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKENvbnN0
YW50UmVjb3JkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIC8vIG1fY29uc3RhbnQxIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVC
bG9jaydzIGNvbnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIGludGVnZXIgdmFsdWUgMS4KLSAgICAg
ICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnQxKS5pc0ludDMyKCkpOwotICAgICAgICBBU1NFUlQobV9jb2RlQmxv
Y2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEp
LmFzSW50MzIoKSA9PSAxKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFu
dDEpOwotICAgIH0KLSAgICAKLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29u
c3RhbnQgd2l0aCB0aGUgdmFsdWUgTmFOLgotICAgIE5vZGUqIGNvbnN0YW50TmFOKCkKLSAgICB7
Ci0gICAgICAgIEpTVmFsdWUgbmFuID0ganNOYU4oKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEhh
cyBtX2NvbnN0YW50TmFOIGJlZW4gc2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnRO
YU4gPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9v
bCBmb3IgdGhlIHZhbHVlIE5hTiwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhp
cyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9jb25zdGFu
dE5hTiA9IDA7IG1fY29uc3RhbnROYU4gPCBudW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50
TmFOKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0
Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKTsKLSAg
ICAgICAgICAgICAgICBpZiAoSlNWYWx1ZTo6ZW5jb2RlKHRlc3RNZSkgPT0gSlNWYWx1ZTo6ZW5j
b2RlKG5hbikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29u
c3RhbnROYU4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBBZGQgdGhlIHZhbHVl
IG5hbiB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGlu
ZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNp
emUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAgICAgICBhZGRDb25zdGFudChuYW4p
OwotICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAg
ICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1fY29uc3Rh
bnROYU4gbXVzdCByZWZlciB0byBhbiBlbnRyeSBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQg
cG9vbCB0aGF0IGhhcyB0aGUgdmFsdWUgbmFuLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2st
PmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE5hTiku
aXNEb3VibGUoKSk7Ci0gICAgICAgIEFTU0VSVChzdGQ6OmlzbmFuKG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnROYU4pLmFzRG91
YmxlKCkpKTsKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudE5hTik7Ci0g
ICAgfQotICAgIAotICAgIE5vZGUqIGNlbGxDb25zdGFudChKU0NlbGwqIGNlbGwpCi0gICAgewot
ICAgICAgICBIYXNoTWFwPEpTQ2VsbCosIE5vZGUqPjo6QWRkUmVzdWx0IHJlc3VsdCA9IG1fY2Vs
bENvbnN0YW50Tm9kZXMuYWRkKGNlbGwsIG51bGxwdHIpOwotICAgICAgICBpZiAocmVzdWx0Lmlz
TmV3RW50cnkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghSGVhcDo6aXNab21iaWZpZWQoY2VsbCkp
OwotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkZFRvR3JhcGgoV2Vha0pT
Q29uc3RhbnQsIE9wSW5mbyhjZWxsKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBpbmZl
cnJlZENvbnN0YW50KEpTVmFsdWUgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAodmFsdWUuaXND
ZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsK
LSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnRGb3JWYWx1ZSh2YWx1ZSk7Ci0gICAgfQotICAg
IAogICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKCkKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZTsKQEAgLTgzMSwxNCAr
NjY5LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVj
dHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7Ci0g
ICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSBjZWxsQ29uc3RhbnQob2JqZWN0KTsKKyAgICAgICAg
Tm9kZSogb2JqZWN0Tm9kZSA9IGpzQ29uc3RhbnQob2JqZWN0KTsKICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHN0cnVjdHVy
ZSkpLCBvYmplY3ROb2RlKTsKICAgICAgICAgcmV0dXJuIG9iamVjdE5vZGU7CiAgICAgfQogICAg
IAogICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVj
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2so
b2JqZWN0LCBvYmplY3QtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayhvYmplY3QsIG1fZ3JhcGguZnJlZXplKG9iamVjdCktPnN0cnVj
dHVyZSgpKTsKICAgICB9CiAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91
dE9TUkV4aXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTk5NywzNiArODM1LDExIEBAIHBy
aXZhdGU6CiAgICAgLy8gVGhlIGJ5dGVjb2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0
aW9uIGJlaW5nIGdlbmVyYXRlZC4KICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKIAotICAg
IC8vIFdlIHVzZSB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIHRvIGF2
b2lkIHRoZSBuZWVkIGZvcgotICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgd2UgbWFrZSBzdXJlIHRo
ZXkgYXJlIGF2YWlsYWJsZSBhcyBjb25zdGFudHMgaW4gdGhlCi0gICAgLy8gQ29kZUJsb2NrJ3Mg
Y29uc3RhbnQgcG9vbC4gVGhlc2UgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCB0bwotICAgIC8v
IFVJTlRfTUFYLCBhbmQgbGF6aWx5IHVwZGF0ZWQgdG8gaG9sZCBhbiBpbmRleCBpbnRvIHRoZSBD
b2RlQmxvY2sncwotICAgIC8vIGNvbnN0YW50IHBvb2wsIGFzIG5lY2Vzc2FyeS4KLSAgICB1bnNp
Z25lZCBtX2NvbnN0YW50VW5kZWZpbmVkOwotICAgIHVuc2lnbmVkIG1fY29uc3RhbnROdWxsOwot
ICAgIHVuc2lnbmVkIG1fY29uc3RhbnROYU47Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudDE7Ci0g
ICAgSGFzaE1hcDxKU0NlbGwqLCB1bnNpZ25lZD4gbV9jZWxsQ29uc3RhbnRzOwotICAgIEhhc2hN
YXA8SlNDZWxsKiwgTm9kZSo+IG1fY2VsbENvbnN0YW50Tm9kZXM7Ci0KLSAgICAvLyBBIGNvbnN0
YW50IGluIHRoZSBjb25zdGFudCBwb29sIG1heSBiZSByZXByZXNlbnRlZCBieSBtb3JlIHRoYW4g
b25lCi0gICAgLy8gbm9kZSBpbiB0aGUgZ3JhcGgsIGRlcGVuZGluZyBvbiB0aGUgY29udGV4dCBp
biB3aGljaCBpdCBpcyBiZWluZyB1c2VkLgotICAgIHN0cnVjdCBDb25zdGFudFJlY29yZCB7Ci0g
ICAgICAgIENvbnN0YW50UmVjb3JkKCkKLSAgICAgICAgICAgIDogYXNJbnQzMigwKQotICAgICAg
ICAgICAgLCBhc051bWVyaWMoMCkKLSAgICAgICAgICAgICwgYXNKU1ZhbHVlKDApCi0gICAgICAg
IHsKLSAgICAgICAgfQotCi0gICAgICAgIE5vZGUqIGFzSW50MzI7Ci0gICAgICAgIE5vZGUqIGFz
TnVtZXJpYzsKLSAgICAgICAgTm9kZSogYXNKU1ZhbHVlOwotICAgIH07Ci0KLSAgICAvLyBUcmFj
ayB0aGUgaW5kZXggb2YgdGhlIG5vZGUgd2hvc2UgcmVzdWx0IGlzIHRoZSBjdXJyZW50IHZhbHVl
IGZvciBldmVyeQotICAgIC8vIHJlZ2lzdGVyIHZhbHVlIGluIHRoZSBieXRlY29kZSAtIGFyZ3Vt
ZW50LCBsb2NhbCwgYW5kIHRlbXBvcmFyeS4KLSAgICBWZWN0b3I8Q29uc3RhbnRSZWNvcmQsIDE2
PiBtX2NvbnN0YW50czsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVmaW5lZDsKKyAg
ICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3Rh
bnROYU47CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRPbmU7CisgICAgVmVjdG9yPE5vZGUq
LCAxNj4gbV9jb25zdGFudHM7CiAKICAgICAvLyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNz
ZWQgdG8gdGhlIGZ1bmN0aW9uLgogICAgIHVuc2lnbmVkIG1fbnVtQXJndW1lbnRzOwpAQCAtMTA2
MSw3ICs4NzQsNiBAQCBwcml2YXRlOgogICAgICAgICAvLyAodGhlIG1hY2hpbmUgY29kZSBibG9j
aywgd2hpY2ggaXMgdGhlIHRyYW5zaXRpdmUsIHRob3VnaCBub3QgbmVjZXNzYXJpbHkKICAgICAg
ICAgLy8gZGlyZWN0LCBjYWxsZXIpLgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1faWRlbnRp
ZmllclJlbWFwOwotICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRSZW1hcDsKICAg
ICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9zd2l0Y2hSZW1hcDsKICAgICAgICAgCkBAIC0xMTMyLDExICs5NDQs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2lubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlc3VsdCA9IFZpcnR1YWxSZWdpc3RlcihtX2NvbnN0YW50UmVtYXBbb3BlcmFuZC50b0NvbnN0
YW50SW5kZXgoKV0pOwotICAgICAgICAgICAgICAgIEFTU0VSVChyZXN1bHQuaXNDb25zdGFudCgp
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfQorICAgICAg
ICAgICAgQVNTRVJUKCFvcGVyYW5kLmlzQ29uc3RhbnQoKSk7CiAKICAgICAgICAgICAgIHJldHVy
biBWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZC5vZmZzZXQoKSArIG1faW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCk7CiAgICAgICAgIH0KQEAgLTExNzAsMTEgKzk3OCw2IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzOwogICAgIC8vIE1hcHBpbmcgYmV0d2VlbiBp
ZGVudGlmaWVyIG5hbWVzIGFuZCBudW1iZXJzLgogICAgIEJvcnJvd2VkSWRlbnRpZmllck1hcCBt
X2lkZW50aWZpZXJNYXA7Ci0gICAgLy8gTWFwcGluZyBiZXR3ZWVuIHZhbHVlcyBhbmQgY29uc3Rh
bnQgbnVtYmVycy4KLSAgICBKU1ZhbHVlTWFwIG1fanNWYWx1ZU1hcDsKLSAgICAvLyBJbmRleCBv
ZiB0aGUgZW1wdHkgdmFsdWUsIG9yIFVJTlRfTUFYIGlmIHRoZXJlIGlzIG5vIG1hcHBpbmcuIFRo
aXMgaXMgYSBob3JyaWJsZQotICAgIC8vIHdvcmstYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IEpT
VmFsdWVNYXAgY2FuJ3QgaGFuZGxlICJlbXB0eSIgdmFsdWVzLgotICAgIHVuc2lnbmVkIG1fZW1w
dHlKU1ZhbHVlSW5kZXg7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBtX2RmZ0NvZGVCbG9jazsKICAg
ICBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCBtX2NhbGxDb250ZXh0TWFwOwpAQCAtMTIyMiwx
MCArMTAyNSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgQVNTRVJU
KHJlZ2lzdGVyT2Zmc2V0IDw9IDApOwogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lh
bGl6YXRpb25LaW5kID0gSW5saW5lQ2FsbEZyYW1lOjpzcGVjaWFsaXphdGlvbktpbmRGb3Ioa2lu
ZCk7CiAgICAgCi0gICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkgewotICAg
ICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAotICAgICAgICAgICAgbV9ncmFw
aC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAg
fQorICAgIGlmIChjYWxsVGFyZ2V0LT5oYXNDb25zdGFudCgpKQorICAgICAgICBjYWxsTGlua1N0
YXR1cyA9IENhbGxMaW5rU3RhdHVzKGNhbGxUYXJnZXQtPmFzSlNWYWx1ZSgpKS5zZXRJc1Byb3Zl
ZCh0cnVlKTsKICAgICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsK
ICAgICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVj
dXRlZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5
CkBAIC0xNTM2LDcgKzEzMzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmlu
ZyhOb2RlCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJh
bmQsIE5vZGVUeXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcykKIHsKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkg
eyAvLyBNYXRoLm1pbigpCi0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGNvbnN0YW50TmFOKCkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgIApAQCAtMTU2MSw3ICsxMzYyLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIHN3aXRjaCAoaW50
cmluc2ljKSB7CiAgICAgY2FzZSBBYnNJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5hYnMoKQotICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CisgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KIApAQCAtMTU4NSw3ICsxMzg2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlSW50cmluc2ljKGludAogICAgIGNhc2UgQ29zSW50cmluc2ljOgogICAgIGNhc2UgU2lu
SW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAx
KSB7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjb25z
dGFudE5hTigpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE3MzIsMTkgKzE1
MzMsMTkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludAogICAgIH0K
ICAgICAgICAgCiAgICAgY2FzZSBERkdUcnVlSW50cmluc2ljOiB7Ci0gICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShqc0Jvb2xl
YW4odHJ1ZSkpKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
anNDb25zdGFudChqc0Jvb2xlYW4odHJ1ZSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIE9TUkV4aXRJbnRyaW5zaWM6IHsKICAgICAgICAgYWRkVG9H
cmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBjb25zdGFudFVuZGVmaW5lZCgpKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFu
dFVuZGVmaW5lZCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIElzRmluYWxUaWVySW50cmluc2ljOiB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksCi0gICAgICAgICAgICBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNC
b29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkg
OiB0cnVlKSkpOworICAgICAgICAgICAganNDb25zdGFudChqc0Jvb2xlYW4oT3B0aW9uczo6dXNl
RlRMSklUKCkgPyBpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSA6IHRydWUpKSk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0xODM5LDcgKzE2NDAsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIE5vZGUqIHJlc3Vs
dDsKICAgICAgICAgCiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8PSAx
KQotICAgICAgICAgICAgcmVzdWx0ID0gY2VsbENvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5ncy5l
bXB0eVN0cmluZygpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGpzQ29uc3RhbnQobV92bS0+c21h
bGxTdHJpbmdzLmVtcHR5U3RyaW5nKCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1
bHQgPSBhZGRUb0dyYXBoKFRvU3RyaW5nLCBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQo
MSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAgICAgICAgIApAQCAtMTk4MCw3ICsxNzgxLDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAKICAgICBOb2RlKiBsb2FkZWRW
YWx1ZTsKICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIGxvYWRlZFZh
bHVlID0gY2VsbENvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpKTsKKyAg
ICAgICAgbG9hZGVkVmFsdWUgPSBqc0NvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsK
ICAgICBlbHNlIHsKICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKICAg
ICAgICAgICAgIHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zm
c2V0KCksCkBAIC0yMTU0LDkgKzE5NTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQ
dXRCeUlkKAogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrKCkKIHsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jb25zdGFudHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIG1fY29uc3RhbnRzW2ldID0gQ29uc3RhbnRSZWNvcmQoKTsKLSAgICBtX2NlbGxDb25z
dGFudE5vZGVzLmNsZWFyKCk7CisgICAgbV9jb25zdGFudHMucmVzaXplKDApOwogfQogCiBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoYm9vbCBza2lwVG9wLCB1bnNpZ25lZCBza2lwQ291
bnQpCkBAIC0yMjM1LDEzICsyMDM0LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICAvLyA9PT0gRnVuY3Rpb24gZW50cnkgb3Bjb2RlcyA9PT0K
IAotICAgICAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBjYXNlIG9wX2VudGVyOiB7CisgICAg
ICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2Nh
bHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCi0gICAgICAgICAgICAgICAg
c2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVmaW5lZCgpLCBJbW1l
ZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCksIGNvbnN0YW50VW5kZWZpbmVkKCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAg
ICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCksIHVuZGVmaW5lZCwg
SW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50ZXIpOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAg
ICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUo
KS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKQpAQCAtMjI3MywxMSArMjA3
NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGludCBjYWxsZWVPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlT3Bl
cmFuZCkpOwogICAgICAgICAgICAgYm9vbCBhbHJlYWR5RW1pdHRlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgaWYgKGNhbGxlZS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICAgICAg
ICAgIEpTQ2VsbCogY2VsbCA9IGNhbGxlZS0+d2Vha0NvbnN0YW50KCk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKGNlbGwtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpT
RnVuY3Rpb24qPihjZWxsKTsKKyAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKSkgewogICAgICAgICAg
ICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZ1bmN0aW9uLT5hbGxvY2F0aW9uU3Ry
dWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChBbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQsIE9wSW5mbyhmdW5jdGlvbikpOwogICAgICAgICAgICAgICAgICAgICAv
LyBUaGUgY2FsbGVlIGlzIHN0aWxsIGxpdmUgdXAgdG8gdGhpcyBwb2ludC4KQEAgLTIzNTEsMTAg
KzIxNDgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZEZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldChWaXJ0
dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemUoY2FjaGVk
RnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIEFTU0VSVChjYWNoZWRGdW5jdGlvbi0+aW5oZXJp
dHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogYWN0dWFsQ2Fs
bGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhjYWNoZWRGdW5jdGlvbiksIGFj
dHVhbENhbGxlZSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJ
bmZvKGNhY2hlZEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tG
dW5jdGlvbiwgT3BJbmZvKGZyb3plbiksIGFjdHVhbENhbGxlZSk7CisgICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRk
VG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2NhbGxlZSk7CiAgICAgICAgIH0KQEAgLTI0MTgs
NyArMjIxNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwog
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdpc3RlciA9IFZpcnR1
YWxSZWdpc3RlcihzcmNEc3QpOwogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0Vmly
dHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1h
a2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIHNl
dChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9w
LCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9pbmMpOwogICAgICAgICB9CiAKQEAgLTI0MjYsNyArMjIy
NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdp
c3RlcihzcmNEc3QpOwogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0VmlydHVhbFJl
Z2lzdGVyKTsKLSAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZl
KGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIHNldChzcmNE
c3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAg
ICBORVhUX09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTI2NDMsNyArMjQ0MSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNl
IG9wX2VxX251bGw6IHsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKTsKKyAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dyYXBoKEpTQ29uc3Rh
bnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9lcV9udWxsKTsKICAgICAgICAgfQogCkBAIC0yNjYzLDcgKzI0NjEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVs
bDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTG9naWNh
bE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgp
KSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVF
cUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFu
dE51bGwpKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcV9udWxsKTsKICAgICAg
ICAgfQogCkBAIC0yNzg4LDcgKzI1ODYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAgICAgICAgICAgIHVu
c2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBh
ZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOworICAg
ICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwg
dmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpOwog
ICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChv
cF9qZXFfbnVsbCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2pl
cV9udWxsKTsKICAgICAgICAgfQpAQCAtMjc5Niw3ICsyNTk0LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogewog
ICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIE5vZGUq
IGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFu
dE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBh
cmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25z
dGFudE51bGwpKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5j
aERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfbnVsbCksIG1fY3Vy
cmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX2puZXFfbnVsbCk7CiAgICAgICAgIH0KQEAgLTI4ODUsNyArMjY4Myw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNb
aV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVj
b2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg
ICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoanNOdW1i
ZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpLCB0YXJnZXQpKTsKKyAgICAg
ICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRl
eChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5taW4g
KyBpKSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZsdXNoSWZUZXJt
aW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEp
LCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7
CkBAIC0zMDU1LDcgKzI4NTMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xv
YmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgY2FzZSBHbG9i
YWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KSwgd2Vha0pTQ29uc3RhbnQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENs
b3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOiB7CkBAIC0zMDYzLDcgKzI4NjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb24KICAgICAgICAgICAg
ICAgICAgICAgJiYgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRP
bmNlLmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVu
Y3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCkp
KTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29u
c3RhbnQoYWN0aXZhdGlvbikpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGFjdGl2YXRpb24pKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZHN0KSwKQEAgLTMxMTIsNyArMjkxMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENv
bnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVy
ZVNldCgpLm9ubHlTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGlmIChK
U1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQotICAgICAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVj
aWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwganNDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIs
IG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMxMzEsNyArMjkyOSw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJs
ZVdhdGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50
KHNwZWNpZmljVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTMxNDcsNyArMjk0NSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gd2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBzY29wZU5v
ZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRj
aHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFudCh2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vh
a0pTQ29uc3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzI0
OCw3ICszMDQ2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7
Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSgpKSk7CisgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBq
c0NvbnN0YW50KEpTVmFsdWUoKSkpOwogICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2Fs
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIG1fZ3JhcGgu
bV9sYXp5VmFycy5zZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2xhenlf
cmVnKTsKQEAgLTM0MDMsMTMgKzMyMDEsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9w
ZXJhbmRNYXBzSWZOCiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9j
ay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgIG1faWRlbnRpZmllck1hcC5h
ZGQobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgpLCBpKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsr
aSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGkg
KyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAg
ICAgICAgICBtX2VtcHR5SlNWYWx1ZUluZGV4ID0gaSArIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSksIGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgfQog
ICAgIAogICAgIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMgPSB0cnVlOwogfQpAQCAtMzUwNyw3ICsz
Mjk4LDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAg
ICBieXRlQ29kZVBhcnNlci0+YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAg
IAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZklk
ZW50aWZpZXJzKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJl
bWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOwogICAgICAg
ICBtX3N3aXRjaFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxl
cygpKTsKIApAQCAtMzUxOCwyNCArMzMwOCw2IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5p
ZGVudGlmaWVycygpLmFkZExhemlseShyZXApOwogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVt
YXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7
ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmICghdmFs
dWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1ZhbHVl
SW5kZXggPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXIt
Pm1fZW1wdHlKU1ZhbHVlSW5kZXggPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwotICAg
ICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+YWRkQ29uc3RhbnQoSlNWYWx1ZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChD
b25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9j
b25zdGFudFJlbWFwW2ldID0gYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1ZhbHVlSW5kZXg7Ci0g
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBKU1Zh
bHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5h
ZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAgICBi
eXRlQ29kZVBhcnNlci0+YWRkQ29uc3RhbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIGJ5dGVD
b2RlUGFyc2VyLT5tX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3It
PnZhbHVlOwotICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkgewogICAgICAgICAgICAgLy8g
SWYgd2UgaW5saW5lIHRoZSBzYW1lIGNvZGUgYmxvY2sgbXVsdGlwbGUgdGltZXMsIHdlIGRvbid0
IHdhbnQgdG8gbmVlZGxlc3NseQogICAgICAgICAgICAgLy8gZHVwbGljYXRlIGl0cyBjb25zdGFu
dCBidWZmZXJzLgpAQCAtMzU2NiwxMyArMzMzOCwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5l
U3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gMDsKIAogICAg
ICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZp
ZXJzKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJl
c2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOwogICAgICAgICBtX3N3
aXRjaFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpKTsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRp
ZmllcnMoKTsgKytpKQogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSBpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJl
Z2lzdGVycygpOyArK2kpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpICsgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpCiAgICAgICAgICAgICBt
X2NvbnN0YW50QnVmZmVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCk7ICsraSkKQEAgLTM1ODAs
MTQgKzMzNDksMTMgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQog
ICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQog
ICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb25zdGFudFJlbWFwLnNpemUoKTsg
KytpKQotICAgICAgICBBU1NFUlQobV9jb25zdGFudFJlbWFwW2ldID49IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwotICAgIAogICAgIGJ5dGVDb2Rl
UGFyc2VyLT5tX2lubGluZVN0YWNrVG9wID0gdGhpczsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VDb2RlQmxvY2soKQogeworICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKKyAgICAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
OwogICAgIAogICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKQEAgLTM2ODQsNiArMzQ1
Miw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgIC8vIFNo
b3VsZCBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VS
VChtX2N1cnJlbnRJbmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7Cisg
ICAgCisgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogfQogCiBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggb24gY29uc3RhbnQgLT4gamV0dGlzb24g
YWxsIG90aGVyIHRhcmdldHMgYW5kIG1lcmdlLgogICAgICAgICAgICAgICAgICAgICBpZiAoYmxv
Y2stPmxhc3QoKS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGJsb2NrLT5s
YXN0KCktPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5W
YWx1ZSogdmFsdWUgPSBibG9jay0+bGFzdCgpLT5jaGlsZDEoKS0+Y29uc3RhbnQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIFRyaVN0YXRlIGZvdW5kID0gRmFsc2VUcmlTdGF0ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gMDsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgZm91
bmQgPT0gRmFsc2VUcmlTdGF0ZSAmJiBpLS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMiAr
MTY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgIT0gbm9k
ZS0+b3AoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG90aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFudE51
bWJlcigpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICByZXR1cm4gb3RoZXJOb2RlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICAKLSAgICBOb2RlKiB3ZWFrQ29uc3RhbnRDU0UoTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBOb2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAg
ICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2Rl
LT53ZWFrQ29uc3RhbnQoKSAhPSBub2RlLT53ZWFrQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIGlm
IChvdGhlck5vZGUtPmNvbnN0YW50KCkgIT0gbm9kZS0+Y29uc3RhbnQoKSkKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9k
ZTsKQEAgLTQyMCw3ICs0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKLSAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9uLCBO
b2RlKiBjaGlsZDEpCisgICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFs
dWUqIGZ1bmN0aW9uLCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKQEAgLTEyNzAsMTMgKzEyNTUsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
LSAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaGF2ZSBDU0UgZm9yIHdlYWsgY29u
c3RhbnRzIGFnYWluc3Qgc3Ryb25nIGNvbnN0YW50cyBhbmQgdmljZS12ZXJzYS4KLSAgICAgICAg
ICAgIHNldFJlcGxhY2VtZW50KHdlYWtDb25zdGFudENTRShub2RlKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6
CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQogICAgICAgICAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw2IEBAIHZvaWQgY2xvYmJl
cml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgY2FzZSBX
ZWFrSlNDb25zdGFudDoKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAg
ICBjYXNlIEhhcmRQaGFudG9tOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCkg
IT0gbm9kZS0+ZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKQEAgLTI3Myw4
ICsyNzMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUtPmhhc0Nv
bnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAo
IXZhbHVlKQorICAgICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gbV9ncmFwaC5mcmVlemUo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKCEqdmFsdWUp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8v
IENoZWNrIGlmIG1lcmdpbmcgdGhlIGFic3RyYWN0IHZhbHVlIG9mIHRoZSBjb25zdGFudCBpbnRv
IHRoZSBhYnN0cmFjdCB2YWx1ZQpAQCAtMjgzLDcgKzI4Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAvLyB0aGVuIHdlIHJlZnVzZSB0byBmb2xkLgogICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSBvbGRWYWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgY29uc3RhbnRWYWx1ZTsKLSAgICAgICAgICAgIGNvbnN0YW50VmFsdWUuc2V0KG1fZ3Jh
cGgsIHZhbHVlLCBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAg
IGNvbnN0YW50VmFsdWUuc2V0KG1fZ3JhcGgsICp2YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUoKSk7CiAgICAgICAgICAgICBjb25zdGFudFZhbHVlLmZpeFR5cGVGb3JSZXByZXNl
bnRhdGlvbihub2RlKTsKICAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5tZXJnZShjb25zdGFudFZh
bHVlKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTMzMCw3ICszMzAsNyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1Zh
bHVlKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25z
dGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDUzLDcgKzQ1Myw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgTm9kZSogd2Vha0NvbnN0
YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4sIE9w
SW5mbyhjZWxsKSk7CisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKGNlbGwpLCBKU0NvbnN0YW50LCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFw
aC5mcmVlemUoY2VsbCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgb3JpZ2luLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9t
LCBub2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCku
bm9kZSgpLCBPdGhlclVzZSkpOwogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2Rl
PE90aGVyVXNlPihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1dlYWtDb25zdGFudChtX2dyYXBoLmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25z
dGFudCgKKyAgICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5nbG9iYWxUaGlzT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMDM0LDggKzEwMzUsOCBAQCBwcml2YXRlOgog
ICAgICAgICAKICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgICAgIE5vZGUq
IGdsb2JhbE9iamVjdE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9y
aWdpbiwgCi0gICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywg
U3BlY05vbmUsIEpTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCisgICAgICAgICAgICAgICAgT3BJ
bmZvKG1fZ3JhcGguZnJlZXplKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRu
J3QgaGF2ZSBhbiB1bmNvbmRpdGlvbmFsIGJhcnJpZXIuCiAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTA0CiAgICAgICAgICAgICBOb2Rl
KiBiYXJyaWVyTm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwNjcsNyArMTA2OCw2IEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUg
dGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAg
IGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNh
c2UgR2V0Q2FsbGVlOgogICAgICAgICBjYXNlIEZsdXNoOgpAQCAtMTE5Myw5ICsxMTkzLDkgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgICAg
ICBpZiAoIW1fZ3JhcGguaXNDb25zdGFudChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICBKU1N0
cmluZyogc3RyaW5nID0gZWRnZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCk7Cisg
ICAgICAgICAgICBpZiAoIXN0cmluZykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICBpZiAoc3Ry
aW5nLT5sZW5ndGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApA
QCAtMTYxOCw4ICsxNjE4LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIG9sZE5v
ZGUgPSBlZGdlLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvbGROb2RlLT5oYXND
b25zdGFudCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29u
c3RhbnQob2xkTm9kZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvbGROb2RlLT5hc0pTVmFs
dWUoKTsKICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgCkBAIC0xNzQxLDcgKzE3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgTm9kZSogc2hpZnRBbW91bnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQzMiwgSlNDb25zdGFudCwgbm9kZS0+b3JpZ2lu
LAotICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50
KGpzTnVtYmVyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKKyAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLmZyZWV6ZShqc051bWJlcihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CiAgICAgICAg
IAogICAgICAgICAvLyBXZSBjYW4gdXNlIGEgQml0TFNoaWZ0IGhlcmUgYmVjYXVzZSB0eXBlZCBh
cnJheXMgd2lsbCBuZXZlciBoYXZlIGEgYnl0ZUxlbmd0aAogICAgICAgICAvLyB0aGF0IG92ZXJm
bG93cyBpbnQzMi4KQEAgLTE5MTUsNyArMTkxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25z
dGFudCwgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29u
c3RhbnROdW1iZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3Rh
bnQoKSkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiREZHRnJvemVuVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlT
aW5nbGV0b24oKQoreworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1cm4g
JmVtcHR5OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdGcm96ZW5WYWx1ZV9oCisjZGVmaW5lIERGR0Zyb3plblZhbHVlX2gK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCitjbGFzcyBGcm96ZW5WYWx1ZSB7Citw
dWJsaWM6CisgICAgRnJvemVuVmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIp
CisgICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBGcm96
ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAg
ICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpOworICAg
IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3RydWN0dXJlKHN0
cnVjdHVyZSkKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgPT0gISFzdHJ1Y3R1cmUpOworICAgICAgICBB
U1NFUlQoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJ
bmZvKCkgPT0gc3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBGcm96ZW5WYWx1ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgCisgICAgdm9pZCBtYXJrU3Ryb25nbHko
KQorICAgIHsKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICAgICAgbV9zdHJvbmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Ryb25n
bHlNYXJrZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cm9uZzsgfQorICAgIAorICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QK
KyAgICB7CisgICAgICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKG91
dCwgY29udGV4dCwgbV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaDsKKyAgICAKKyAgICAv
LyBUaGlzIGlzIGEgdXRpbGl0eSBtZXRob2QgZm9yIERGRzo6R3JhcGg6OmZyZWV6ZSgpLiBZb3Ug
c2hvdWxkIGFsbW9zdCBhbHdheXMgY2FsbAorICAgIC8vIEdyYXBoOjpmcmVlemUoKSBkaXJlY3Rs
eS4gQ2FsbGluZyB0aGlzIGluc3RlYWQgb2YgR3JhcGg6OmZyZWV6ZSgpIGNhbiByZXN1bHQgaW4K
KyAgICAvLyB0aGUgc2FtZSBjb25zdGFudCBiZWluZyB2aWV3ZWQgYXMgaGF2aW5nIGRpZmZlcmVu
dCBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgY291cnNlCisgICAgLy8gb2YgY29tcGlsYXRpb24sIHdo
aWNoIGNhbiBzb21ldGltZXMgY2F1c2UgYmFkIHRoaW5ncyB0byBoYXBwZW4uIEZvciBleGFtcGxl
LCB3ZQorICAgIC8vIG1heSBvYnNlcnZlIHRoYXQgb25lIHZlcnNpb24gb2YgdGhlIGNvbnN0YW50
IGhhcyBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgYnV0CisgICAgLy8gdGhlbiBhIGxhdGVyIHZl
cnNpb24gbWF5IHN0YXJ0IHRvIGhhdmUgYSB3YXRjaGFibGUgc3RydWN0dXJlIGR1ZSB0byBhIHRy
YW5zaXRpb24uCisgICAgLy8gVGhlIHBvaW50IG9mIGZyZWV6aW5nIGlzIHRvIGVuc3VyZSB0aGF0
IHdlIGdlbmVyYWxseSBvbmx5IHNlZSBvbmUgdmVyc2lvbiBvZgorICAgIC8vIGNvbnN0YW50cywg
YnV0IHRoYXQgcmVxdWlyZXMgZnJlZXppbmcgdGhyb3VnaCB0aGUgR3JhcGguCisgICAgc3RhdGlj
IEZyb3plblZhbHVlIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IEZyb3plblZhbHVlKAorICAgICAgICAgICAgdmFsdWUsICghIXZhbHVlICYmIHZhbHVlLmlzQ2Vs
bCgpKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0KKwor
ICAgIEpTVmFsdWUgbV92YWx1ZTsKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIGJv
b2wgbV9zdHJvbmc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3plblZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw3ICs2MCw3IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYK
ICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpCiAgICAgLCBtX3Byb2Zp
bGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRvcihs
b25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikKLSAgICAsIG1fbXVzdEhhbmRsZUFic3RyYWN0VmFs
dWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzKQorICAgICwgbV9tdXN0SGFu
ZGxlVmFsdWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9o
YXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwoMCkKICAgICAsIG1f
bWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQpAQCAt
NzEsOCArNzEsOCBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiB7
CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX211
c3RIYW5kbGVBYnN0cmFjdFZhbHVlc1tpXS5zZXRNb3N0U3BlY2lmaWMoKnRoaXMsIHBsYW4ubXVz
dEhhbmRsZVZhbHVlc1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFs
dWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXpl
KHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CiB9CiAKIEdyYXBoOjp+R3JhcGgoKQpAQCAtMTc4
LDcgKzE3OCw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAg
ICAvLyAoNSkgVGhlIGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLiBUaGUgbWF5IGJlIG9mIHRo
ZSBmb3JtOgogICAgIC8vICAgICAgICAgQCMgICAtIGEgTm9kZUluZGV4IHJlZmVyZW5jaW5nIGEg
cHJpb3Igbm9kZSBpbiB0aGUgZ3JhcGguCiAgICAgLy8gICAgICAgICBhcmcjIC0gYW4gYXJndW1l
bnQgbnVtYmVyLgotICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJs
b2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRp
c3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAv
LyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlm
aWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4
IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRH
bG9iYWxWYXIgb3BlcmF0aW9ucy4KICAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGlu
dClub2RlLT5pbmRleCgpLCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIs
IG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwpAQCAtMjI1LDggKzIyNCw4IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT50cmFuc2l0aW9uKCksIGNvbnRl
eHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiKTsK
LSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8o
KSkpIHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rp
b24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPnZh
bHVlKCkuYXNDZWxsKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKKyAgICAgICAg
ICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5j
dGlvbigpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNI
b3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxob3N0IGZ1bmN0aW9u
PiIpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzA2LDcgKzMwNSw3IEBAIHZvaWQgR3JhcGg6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0
Q29uc3RhbnQoKSwgIjpbIik7CiAgICAgICAgIENvbW1hUHJpbnRlciBhbm90aGVyQ29tbWE7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1Db25zdGFudHMoKTsgKytp
KQotICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgaW5Db250ZXh0KG1fY29kZUJs
b2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpW2ldLCBjb250ZXh0KSk7
CisgICAgICAgICAgICBvdXQucHJpbnQoYW5vdGhlckNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4
dChmcmVlemUobV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQo
KSlbaV0pLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiXSIpOwogICAgIH0KICAgICBp
ZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCkBAIC0zMjMsMTMgKzMyMiw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBpbkNvbnRleHQoSlNWYWx1ZShub2RlLT50eXBlZEFycmF5KCkpLCBjb250ZXh0KSk7CiAgICAg
aWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwg
UmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmlzQ29u
c3RhbnQoKSkgewotICAgICAgICBvdXQucHJpbnQoY29tbWEsICIkIiwgbm9kZS0+Y29uc3RhbnRO
dW1iZXIoKSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2Rl
KTsKLSAgICAgICAgb3V0LnByaW50KCIgPSAiLCBpbkNvbnRleHQodmFsdWUsIGNvbnRleHQpKTsK
LSAgICB9Ci0gICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KQotICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpLCAiICgiLCBpbkNvbnRleHQo
Km5vZGUtPndlYWtDb25zdGFudCgpLT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7CisgICAg
aWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVy
RHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUt
PmlzSnVtcCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsICpub2RlLT50YXJnZXRC
bG9jaygpKTsKICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSkKQEAgLTc5Miw5ICs3ODYsNyBAQCB1
bnNpZ25lZCBHcmFwaDo6cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yCiAKIEpTQWN0aXZhdGlvbiog
R3JhcGg6OnRyeUdldEFjdGl2YXRpb24oTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmhh
c0NvbnN0YW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0
PEpTQWN0aXZhdGlvbio+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICByZXR1cm4gbm9k
ZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0FjdGl2YXRpb24qPigpOwogfQogCiBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCkBAIC04
MDksMTMgKzgwMSwxMSBAQCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0
CiAKIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6dHJ5R2V0Rm9sZGFibGVWaWV3KE5vZGUqIG5v
ZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5oYXNDb25zdGFudCgpKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZl
clZpZXcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcq
IHZpZXcgPSBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTQXJyYXlCdWZmZXJWaWV3Kj4oKTsK
ICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICBpZiAoIXZpZXctPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgcmV0dXJuIHZp
ZXc7CiB9CkBAIC04MzIsOCArODIyLDI1IEBAIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6dHJ5
R2V0Rm9sZGFibGUKICAgICByZXR1cm4gdHJ5R2V0Rm9sZGFibGVWaWV3KGNoaWxkKG5vZGUsIDAp
Lm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogfQogCit2b2lkIEdyYXBoOjpyZWdpc3RlckZy
b3plblZhbHVlcygpCit7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnJlc2l6ZSgwKTsK
KyAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CisgICAgICAg
IGlmICh2YWx1ZS0+aXNTdHJvbmdseU1hcmtlZCgpKQorICAgICAgICAgICAgbV9jb2RlQmxvY2st
PmFkZENvbnN0YW50KHZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPnZh
bHVlKCkuaXNDZWxsKCkpCisgICAgICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6
aWx5KHZhbHVlLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICB9CisgICAgbV9jb2RlQmxvY2stPmNv
bnN0YW50cygpLnNocmlua1RvRml0KCk7Cit9CisKIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBt
X2Zyb3plblZhbHVlcykgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9u
bHlWYWx1ZSh2YWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVBvaW50ZXIodmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICB9CisgICAgCiAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
ewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOwog
ICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODQzLDE1ICs4NTAsNiBAQCB2b2lkIEdyYXBoOjp2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICAgICAgY2FzZSBX
ZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
UmVhZE9ubHlWYWx1ZSh2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246
Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihub2RlLT5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgogICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIobm9kZS0+ZXhlY3V0YWJs
ZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwOSw2ICs5MDcsNDYgQEAgdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgIH0KIH0KIAorRnJvemVuVmFs
dWUqIEdyYXBoOjpmcmVlemUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIXZh
bHVlKSkKKyAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOworICAg
IAorICAgIGF1dG8gcmVzdWx0ID0gbV9mcm96ZW5WYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSwgbnVsbHB0cik7CisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzTmV3RW50cnkpKQor
ICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAKKyAgICByZXR1cm4g
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fZnJvemVuVmFsdWVzLmFkZChGcm96ZW5WYWx1ZTo6
ZnJlZXplKHZhbHVlKSk7Cit9CisKK0Zyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25nbHko
SlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gZnJlZXplKHZhbHVl
KTsKKyAgICByZXN1bHQtPm1hcmtTdHJvbmdseSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgR3JhcGg6OmNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpKQorICAgICAgICBhc3NlcnRJc1dh
dGNoZWQodmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2Nh
bCkKKyAgICAgICAgZGV0aHJlYWQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVCghbm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSk7CisgICAgbm9kZS0+Y29udmVydFRvQ29uc3Rh
bnQodmFsdWUpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2Rl
LCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIGZyZWV6ZSh2
YWx1ZSkpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIGZyZWV6
ZVN0cm9uZ2x5KHZhbHVlKSk7Cit9CisKIHZvaWQgR3JhcGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2go
KSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2OTU4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0FyZ3VtZW50UG9zaXRpb24uaCIKICNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2lu
Y2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIK
ICNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC0x
NDQsNDMgKzE0NSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCi0g
ICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1bnNpZ25lZCBjb25zdGFudE51
bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAg
ICAgICAgZGV0aHJlYWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKCFub2Rl
LT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKTsKLSAgICAgICAgbm9kZS0+Y29udmVydFRv
Q29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwotICAgIH0KKyAgICBGcm96ZW5WYWx1ZSogZnJlZXpl
KEpTVmFsdWUgdmFsdWUpOworICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmdseShKU1ZhbHVl
IHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUpLT5tYXJrU3Ryb25nbHkoKS4K
ICAgICAKLSAgICB1bnNpZ25lZCBjb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQoSlNWYWx1ZSB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50UmVnaXN0ZXI7Ci0gICAgICAg
IGlmICghbV9jb2RlQmxvY2stPmZpbmRDb25zdGFudCh2YWx1ZSwgY29uc3RhbnRSZWdpc3Rlcikp
IHsKLSAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBtX2NvZGVCbG9jay0+YWRkQ29uc3Rh
bnRMYXppbHkoKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29u
c3RhbnQoCi0gICAgICAgICAgICAgICAgbV9wbGFuLndyaXRlQmFycmllcnMsCi0gICAgICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50UmVnaXN0ZXJdLAotICAgICAg
ICAgICAgICAgIG1fY29kZUJsb2NrLAotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIs
Ci0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAg
ICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY29uc3RhbnRSZWdp
c3RlcjsKLSAgICB9CisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96
ZW5WYWx1ZSogdmFsdWUpOworICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwg
SlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKTsKICAgICAKICAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2Rl
KiBub2RlLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvV2Vha0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50
KHZhbHVlKSk7Ci0gICAgfQotCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5
IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZp
ZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCks
IER1bXBDb250ZXh0KiA9IDApOwogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQ
aGlzT25seSwgRHVtcEFsbFBoaXMgfTsKQEAgLTE5NCwxMSArMTY3LDYgQEAgcHVibGljOgogICAg
IC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQu
CiAgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNv
bnRleHQpOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5v
ZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9k
ZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKLSAgICB9Ci0gICAgCiAgICAgQWRk
U3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNo
b3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIpCiAgICAg
ewogICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBB
cml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwpAQCAtMzAzLDg4ICsyNzEsNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+YXJn
dW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCkpOwogICAgIH0KICAgICAKLSAgICAvLyBI
ZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXND
b25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0
YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0lu
dDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0lu
dDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3Rh
bnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0RvdWJsZUNvbnN0
YW50KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2Nv
ZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9j
ayk7Ci0gICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0g
ICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwotICAgIH0KLSAgICBib29sIGlz
RnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29u
c3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0
SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxG
dW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlzSlNDb25z
dGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2
YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICBpZiAoIXZhbHVlLmlzQ2Vs
bCgpIHx8ICF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDZWxs
KiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmICghY2VsbC0+aW5oZXJpdHMoSW50
ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFu
dCB2YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9j
b2RlQmxvY2spOwotICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBkYXRh
TG9nKCJWYWx1ZSBpc24ndCBpbnQzMjogIiwgdmFsdWUsICJcbiIpOwotICAgICAgICAgICAgZHVt
cCgpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotICAgIH0KLSAgICBkb3VibGUgdmFs
dWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKLSAgICB9Ci0gICAgYm9vbCB2YWx1ZU9m
Qm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkuYXNCb29sZWFuKCk7Ci0gICAgfQotICAgIEpTRnVuY3Rpb24qIHZh
bHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBKU0NlbGwq
IGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAg
ICAgIEFTU0VSVChmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGZ1bmN0aW9uKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVU
eXBlKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVjdHVyZVNldChjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKQEAgLTgwMiw2ICs2ODgsOCBAQCBwdWJsaWM6CiAgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2RlKiwgQXJyYXlNb2RlKTsK
ICAgICBKU0FycmF5QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKE5vZGUq
KTsKICAgICAKKyAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CisgICAgCiAgICAgdmly
dHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICAKICAg
ICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKQEAg
LTgxNSwxMCArNzAzLDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBOb2RlQWxsb2NhdG9yJiBtX2Fs
bG9jYXRvcjsKIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fbXVzdEhhbmRsZUFic3Ry
YWN0VmFsdWVzOworICAgIE9wZXJhbmRzPEZyb3plblZhbHVlKj4gbV9tdXN0SGFuZGxlVmFsdWVz
OwogICAgIAogICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAg
ICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOworCisgICAgSGFzaE1hcDxFbmNv
ZGVkSlNWYWx1ZSwgRnJvemVuVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1Zh
bHVlSGFzaFRyYWl0cz4gbV9mcm96ZW5WYWx1ZU1hcDsKKyAgICBCYWc8RnJvemVuVmFsdWU+IG1f
ZnJvemVuVmFsdWVzOworICAgIAogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9y
YWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIFNl
Z21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0
YTsKQEAgLTg2MSw3ICs3NTMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKGlt
bWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVk
aWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7Cisg
ICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPmFzSlNWYWx1ZSgpOwog
ICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gRG9udFNwZWN1bGF0ZUludDMyOwogICAgICAgICAKQEAgLTg3OCwzMCArNzcwLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBieXRlY29kZUNhblRydW5jYXRlSW50ZWdl
cihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50MzJBbmRUcnVuY2F0ZUNvbnN0
YW50cyA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBtdWxJbW1l
ZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2Rl
KiBpbW1lZGlhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFu
dCgpKTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlh
dGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlh
dGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAot
ICAgICAgICBpZiAoIXZhcmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFyaXRobWV0aWMo
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGludDMyX3Qg
aW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwotICAgICAgICAvLyBEb3Vi
bGVzIGhhdmUgYSA1MyBiaXQgbWFudGlzc2Egc28gd2UgZXhwZWN0IGEgbXVsdGlwbGljYXRpb24g
b2YgMl4zMSAodGhlIGhpZ2hlc3QKLSAgICAgICAgLy8gbWFnbml0dWRlIHBvc3NpYmxlIGludDMy
IHZhbHVlKSBhbmQgYW55IHZhbHVlIGxlc3MgdGhhbiAyXjIyIHRvIG5vdCByZXN1bHQgaW4gYW55
Ci0gICAgICAgIC8vIHJvdW5kaW5nIGluIGEgZG91YmxlIG11bHRpcGxpY2F0aW9uIC0gaGVuY2Ug
aXQgd2lsbCBiZSBlcXVpdmFsZW50IHRvIGFuIGludGVnZXIKLSAgICAgICAgLy8gbXVsdGlwbGlj
YXRpb24sIGlmIHdlIGFyZSBkb2luZyBpbnQzMiB0cnVuY2F0aW9uIGFmdGVyd2FyZHMgKHdoaWNo
IGlzIHdoYXQKLSAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50MzIoKSBpbXBsaWVzKS4KLSAgICAg
ICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKLSAgICAgICAgaWYgKGludElt
bWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAg
ICAgICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCkgJiYgIW5vZGVNYXlPdmVy
ZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwotCi0gICAgICAgIHJldHVybiBtdWwtPmNhblNw
ZWN1bGF0ZUludDMyKCk7Ci0gICAgfQogfTsKIAogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElM
RFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTIgKzE1MSwx
MyBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5t
X3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVBYnN0cmFjdFZh
bHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1f
bXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVl
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2RlKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1
ZSA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXNbaV07CisgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKG1f
Z3JhcGgsICptX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9w
ZXJhbmQpOwogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0g
dmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDIzICs2
MiwyMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIE5vZGUqIGluc2VydENvbnN0YW50KAot
ICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLAor
ICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFs
dWUsCiAgICAgICAgIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKICAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50UmVnID0KLSAgICAgICAgICAgIG1fZ3JhcGguY29uc3RhbnRSZWdpc3Rl
ckZvckNvbnN0YW50KHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUoCi0gICAgICAg
ICAgICBpbmRleCwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpLCBvcCwgb3JpZ2luLCBPcElu
Zm8oY29uc3RhbnRSZWcpKTsKKyAgICAgICAgICAgIGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZS0+dmFsdWUoKSksIG9wLCBvcmlnaW4sIE9wSW5mbyh2YWx1ZSkpOwogICAgIH0KICAg
ICAKICAgICBOb2RlKiBpbnNlcnRDb25zdGFudCgKLSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2Rl
T3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQor
ICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFs
dWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNl
cnRDb25zdGFudChpbmRleCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgb3ApOwogICAgIH0K
ICAgICAKICAgICBFZGdlIGluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICBzaXplX3QgaW5k
ZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisg
ICAgICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1
ZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3A7CiAgICAgICAg
IGlmIChpc0RvdWJsZSh1c2VLaW5kKSkKQEAgLTkxLDcgKzg5LDI3IEBAIHB1YmxpYzoKICAgICB9
CiAgICAgCiAgICAgRWRnZSBpbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgc2l6ZV90IGlu
ZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQor
ICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFs
dWUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFu
dEZvclVzZShpbmRleCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgdXNlS2luZCk7CisgICAg
fQorCisgICAgTm9kZSogaW5zZXJ0Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9y
aWdpbiwgSlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50KGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXpl
KHZhbHVlKSwgb3ApOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXpl
X3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBvcCA9
IEpTQ29uc3RhbnQpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgs
IG9yaWdpbiwgbV9ncmFwaC5mcmVlemUodmFsdWUpLCBvcCk7CisgICAgfQorICAgIAorICAgIEVk
Z2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwg
SlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
c2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwg
dXNlS2luZCk7CisgICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2Uoc2l6
ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VL
aW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBO
b2RlT3JpZ2luKG9yaWdpbiksIHZhbHVlLCB1c2VLaW5kKTsKICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJp
bmluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxMSwxMSArMzExLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhN
b2RlKCkgIT0gQXJpdGg6OkNoZWNrT3ZlcmZsb3cKICAgICAgICAgICAgICAgICAmJiBub2RlLT5h
cml0aE1vZGUoKSAhPSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybykKICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaC5pc0ludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCktPmlzSW50MzJDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKAogICAgICAgICAgICAgICAgIFJhbmdlS2V5Ojph
ZGRpdGlvbihub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpKTsKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6IHsKQEAgLTMyNSwxNSArMzI1LDE1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVkZ2UgaW5kZXggPSBub2RlLT5jaGlsZDEo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50
KGluZGV4Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChpbmRleC0+aXNJbnQzMkNvbnN0YW50
KCkpIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAg
YWRkZW5kID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChpbmRleC5ub2RlKCkpOworICAg
ICAgICAgICAgICAgIGFkZGVuZCA9IGluZGV4LT5hc0ludDMyKCk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKAogICAgICAgICAgICAgICAgIGluZGV4LT5vcCgpID09IEFyaXRoQWRkCiAgICAgICAg
ICAgICAgICAgJiYgaW5kZXgtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKLSAgICAgICAgICAg
ICAgICAmJiBtX2dyYXBoLmlzSW50MzJDb25zdGFudChpbmRleC0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgICAgIHNvdXJjZSA9IGluZGV4LT5jaGlsZDEoKTsKLSAgICAgICAgICAg
ICAgICBhZGRlbmQgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGluZGV4LT5jaGlsZDIo
KS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGFkZGVuZCA9IGluZGV4LT5jaGlsZDIoKS0+YXNJ
bnQzMigpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBp
bmRleDsKICAgICAgICAgICAgICAgICBhZGRlbmQgPSAwOwpAQCAtMzQxLDcgKzM0MSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVu
ZChSYW5nZUtleTo6YXJyYXlCb3VuZHMoc291cmNlLCBrZXkpLCBhZGRlbmQpOwogICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2
ICsxNjIsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAjaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBtX2ppdENvZGUtPmNvbW1vbi5kb3VibGVDb25zdGFudHMg
PSBzdGQ6Om1vdmUobV9ncmFwaC5tX2RvdWJsZUNvbnN0YW50cyk7CiAjZW5kaWYKKyAgICAKKyAg
ICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1
bXBUYWJsZXM7CiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dy
YXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNiwxNCArMzYsMTQgQEAgSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUo
Vk0mIHZtKSBjbwogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBLbm93blZhbHVl
OgotICAgICAgICByZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVl
KCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNlIEtub3duU3Ry
aW5nSW1wbDoKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdS5zdHJpbmdJbXBsKTsKICAg
ICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdmFsdWUo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZSgpOwogfQogCiBzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1Np
bmdsZUNoYXJhY3RlcihKU1ZhbHVlIHZhbHVlLCBVQ2hhciBjaGFyYWN0ZXIpCkBAIC04MSwxMSAr
ODEsMTEgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgIGNh
c2UgS25vd25WYWx1ZToKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAg
Y2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RF
cXVhbCh2YWx1ZSgpLCBvdGhlci52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjpwdXJlU3RyaWN0RXF1YWwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIudmFsdWUoKS0+dmFsdWUo
KSk7CiAgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgotICAgICAgICAgICAgcmV0
dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKSwgb3RoZXIuY2hhcmFjdGVyKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKS0+dmFsdWUo
KSwgb3RoZXIuY2hhcmFjdGVyKCkpOwogICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKLSAg
ICAgICAgICAgIHJldHVybiBlcXVhbFRvU3RyaW5nSW1wbCh2YWx1ZSgpLCBvdGhlci5zdHJpbmdJ
bXBsKCkpOworICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJpbmdJbXBsKHZhbHVlKCktPnZh
bHVlKCksIG90aGVyLnN0cmluZ0ltcGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBM
YXp5SlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cgogewogICAgIHN3aXRjaCAobV9raW5k
KSB7CiAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICB2YWx1ZSgpLmR1bXBJbkNvbnRleHQo
b3V0LCBjb250ZXh0KTsKKyAgICAgICAgdmFsdWUoKS0+ZHVtcEluQ29udGV4dChvdXQsIGNvbnRl
eHQpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAg
ICAgICAgIG91dC5wcmludCgiTGF6eTpTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoIik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCShyZXZpc2lvbiAxNjk1
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CkBAIC00NCwxMCArNDQsMTAgQEAgZW51bSBMYXppbmVzc0tpbmQgewogCiBjbGFzcyBMYXp5SlNW
YWx1ZSB7CiBwdWJsaWM6Ci0gICAgTGF6eUpTVmFsdWUoSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUo
KSkKKyAgICBMYXp5SlNWYWx1ZShGcm96ZW5WYWx1ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1w
dHlTaW5nbGV0b24oKSkKICAgICAgICAgOiBtX2tpbmQoS25vd25WYWx1ZSkKICAgICB7Ci0gICAg
ICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICB1LnZhbHVlID0g
dmFsdWU7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBzaW5nbGVDaGFyYWN0
ZXJTdHJpbmcoVUNoYXIgY2hhcmFjdGVyKQpAQCAtNjYsMTkgKzY2LDE5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSB0cnlHZXRWYWx1
ZSgpIGNvbnN0CisgICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdyYXBoJikgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChtX2tpbmQgPT0gS25vd25WYWx1ZSkKICAgICAgICAgICAgIHJldHVy
biB2YWx1ZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShWTSYpIGNvbnN0OwogICAg
IAotICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdAorICAgIEZyb3plblZhbHVlKiB2YWx1ZSgpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IEtub3duVmFsdWUpOwotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUudmFsdWUpOworICAgICAgICByZXR1cm4gdS52YWx1
ZTsKICAgICB9CiAgICAgCiAgICAgVUNoYXIgY2hhcmFjdGVyKCkgY29uc3QKQEAgLTEwMiw3ICsx
MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGZvciBhIGtpbmQgb2YgdmFsdWUgdGhhdCBjYW4n
dC4KICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVlOgot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCkuYXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJu
IHZhbHVlKCktPnZhbHVlKCkuYXNJbnQzMigpOwogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3Rl
clN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIoKTsKICAgICAgICAgZGVmYXVs
dDoKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHVuaW9u
IHsKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIEZyb3plblZhbHVlKiB2
YWx1ZTsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyOwogICAgICAgICBTdHJpbmdJbXBsKiBzdHJp
bmdJbXBsOwogICAgIH0gdTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWlu
aWZpZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzksMTAgKzM5LDggQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUoTm9kZQog
ICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1faWQgPSBNaW5pZmllZElEKG5v
ZGUpOwogICAgIHJlc3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAgICBpZiAoaGFzQ29uc3RhbnRO
dW1iZXIobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFu
dE51bWJlcigpOwotICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAg
ICAgICAgcmVzdWx0Lm1faW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtD
b25zdGFudCgpKTsKKyAgICBpZiAoaGFzQ29uc3RhbnQobm9kZS0+b3AoKSkpCisgICAgICAgIHJl
c3VsdC5tX2luZm8gPSBKU1ZhbHVlOjplbmNvZGUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAgIGVs
c2UgewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKTsKICAg
ICAgICAgcmVzdWx0Lm1faW5mbyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDYg
QEAgaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgSlND
b25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFu
dDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTU5LDIyICs1OCwxMSBAQCBw
dWJsaWM6CiAgICAgTWluaWZpZWRJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBO
b2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICAKLSAgICBib29sIGhhc0Nv
bnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8fCBoYXNXZWFrQ29u
c3RhbnQoKTsgfQorICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25z
dGFudChtX29wKTsgfQogICAgIAotICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoKSBjb25zdCB7
IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGNv
bnN0YW50TnVtYmVyKCkgY29uc3QKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKICAgICB7
Ci0gICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7Ci0gICAgICAgIHJldHVy
biBtX2luZm87Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzV2Vha0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gaGFzV2Vha0NvbnN0YW50KG1fb3ApOyB9Ci0gICAgCi0gICAgSlNDZWxsKiB3ZWFr
Q29uc3RhbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25zdGFudCht
X29wKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZvKTsKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+
KG1faW5mbykpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgTWluaWZpZWRJRCBnZXRJRChNaW5p
ZmllZE5vZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUtPmlkKCk7IH0KQEAgLTg0LDE3ICs3MiwxMyBA
QCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDb25z
dGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQorICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50KE5v
ZGVUeXBlIHR5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50IHx8
IHR5cGUgPT0gSW50NTJDb25zdGFudCB8fCB0eXBlID09IERvdWJsZUNvbnN0YW50OwogICAgIH0K
LSAgICBzdGF0aWMgYm9vbCBoYXNXZWFrQ29uc3RhbnQoTm9kZVR5cGUgdHlwZSkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0eXBlID09IFdlYWtKU0NvbnN0YW50OwotICAgIH0KICAgICAKICAgICBN
aW5pZmllZElEIG1faWQ7Ci0gICAgdWludHB0cl90IG1faW5mbzsKKyAgICB1aW50NjRfdCBtX2lu
Zm87CiAgICAgTm9kZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDExICs0MDYsNiBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dlYWtDb25zdGFudCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBXZWFrSlNDb25zdGFudDsKLSAgICB9Ci0gICAg
CiAgICAgYm9vbCBpc1BoYW50b21Bcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9w
KCkgPT0gUGhhbnRvbUFyZ3VtZW50czsKQEAgLTQyMiw3ICs0MTcsNiBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoK
ICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQzMCwxMyArNDI0LDE2IEBAIHN0cnVjdCBOb2RlIHsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkKKyAgICBG
cm96ZW5WYWx1ZSogY29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQo
KSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50
KCkpOworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQorICAgICAgICAgICAg
cmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEZyb3plblZhbHVlKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICB2b2lk
IGNvbnZlcnRUb0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIC8vIERvbid0
IGNhbGwgdGhpcyBkaXJlY3RseSAtIHVzZSBHcmFwaDo6Y29udmVydFRvQ29uc3RhbnQoKSBpbnN0
ZWFkIQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgaWYgKGhhc0RvdWJsZVJlc3VsdCgpKQogICAgICAgICAgICAgbV9vcCA9IERv
dWJsZUNvbnN0YW50OwpAQCAtNDQ1LDE1ICs0NDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBtX2ZsYWdzICY9
IH4oTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCk7Ci0gICAgICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7Ci0gICAgICAgIGNoaWxkcmVu
LnJlc2V0KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29udmVydFRvV2Vha0NvbnN0YW50KEpT
Q2VsbCogY2VsbCkKLSAgICB7Ci0gICAgICAgIG1fb3AgPSBXZWFrSlNDb25zdGFudDsKLSAgICAg
ICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9k
ZUNsb2JiZXJzV29ybGQpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KGNlbGwpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZh
bHVlKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCkBAIC01MTgsNTIg
KzUwNyw2MiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3AgPSBUb1N0cmluZzsKICAgICB9
CiAgICAgCi0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQorICAgIEpTVmFsdWUgYXNKU1ZhbHVl
KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsKLSAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVy
biBjb25zdGFudCgpLT52YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZK
U0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50
KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUod2Vha0NvbnN0YW50KCkpOwotICAg
ICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAg
ICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNv
bnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJl
cigpKS5nZXQoKTsKLSAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOyAvLyBI
YXZlIHRvIHJldHVybiBzb21ldGhpbmcgaW4gcmVsZWFzZSBtb2RlLgotICAgICAgICB9CisgICAg
ICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0ludDMyKCk7
CiAgICAgfQotCi0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgCisgICAgaW50MzJfdCBhc0ludDMyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0Nv
bnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0ludDMyKCk7CisgICAg
ICAgIHJldHVybiBhc0pTVmFsdWUoKS5hc0ludDMyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBib29sIGlzRG91Ymxl
Q29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgYm9vbCByZXN1bHQgPSBpc0NvbnN0YW50KCkgJiYg
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0RvdWJsZSgpOwotICAgICAgICBpZiAocmVz
dWx0KQotICAgICAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQoY29kZUJsb2NrKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29u
c3RhbnQoKS0+dmFsdWUoKS5pc0RvdWJsZSgpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTnVt
YmVyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgYm9vbCBpc051bWJlckNvbnN0
YW50KCkKICAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gaXNDb25zdGFudCgpICYmIHZhbHVl
T2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNOdW1iZXIoKTsKLSAgICAgICAgQVNTRVJUKHJlc3Vs
dCA9PSAoaXNJbnQzMkNvbnN0YW50KGNvZGVCbG9jaykgfHwgaXNEb3VibGVDb25zdGFudChjb2Rl
QmxvY2spKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc051bWJlcigpOworICAgIH0KKyAgICAKKyAg
ICBkb3VibGUgYXNOdW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzSlNWYWx1ZSgpLmFz
TnVtYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlz
Qm9vbGVhbigpOworICAgIH0KKyAgICAKKyAgICBib29sIGFzQm9vbGVhbigpCisgICAgeworICAg
ICAgICByZXR1cm4gY29uc3RhbnQoKS0+dmFsdWUoKS5hc0Jvb2xlYW4oKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25z
dGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNDZWxsKCk7CisgICAgfQorICAgIAorICAg
IEpTQ2VsbCogYXNDZWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1
ZSgpLmFzQ2VsbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBkeW5h
bWljQ2FzdENvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYg
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgaWYgKCFp
c0NlbGxDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBj
b250YWluc01vdkhpbnQoKQpAQCAtMTAxNiwxMSArMTAxNSwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBKU0NlbGwqIGZ1bmN0aW9uKCkKKyAgICBGcm96ZW5WYWx1
ZSogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0Z1bmN0aW9uKCkpOwotICAg
ICAgICBKU0NlbGwqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGdW5jdGlvbio+KG1fb3BJ
bmZvKTsKLSAgICAgICAgQVNTRVJUKEpTVmFsdWUocmVzdWx0KS5pc0Z1bmN0aW9uKCkpOworICAg
ICAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+
KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC0+dmFsdWUoKS5pc0Z1bmN0aW9uKCkp
OwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAg
KzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKERvdWJs
ZUNvbnN0YW50LCBOb2RlUmVzdWx0RG91YmxlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFj
cm8oSW50NTJDb25zdGFudCwgTm9kZVJlc3VsdEludDUyIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAg
ICAgXAotICAgIC8qIEEgY29uc3RhbnQgbm90IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBw
b29sLiBVc2VzIGdldCBwYXRjaGVkIHRvIGp1bXBzIHRoYXQgZXhpdCB0aGUgKi9cCi0gICAgLyog
Y29kZSBibG9jay4gKi9cCi0gICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1bHRKUyB8
IE5vZGVEb2VzTm90RXhpdCkgXAotICAgIFwKICAgICAvKiBNYXJrZXIgdG8gaW5kaWNhdGUgdGhh
dCBhbiBvcGVyYXRpb24gd2FzIG9wdGltaXplZCBlbnRpcmVseSBhbmQgYWxsIHRoYXQgaXMgbGVm
dCAqL1wKICAgICAvKiBpcyB0byBtYWtlIG9uZSBub2RlIGFsaWFzIGFub3RoZXIuIENTRSB3aWxs
IGxhdGVyIHVzdWFsbHkgZWxpbWluYXRlIHRoaXMgbm9kZSwgKi9cCiAgICAgLyogdGhvdWdoIGl0
IG1heSBjaG9vc2Ugbm90IHRvIGlmIGl0IHdvdWxkIGNvcnJ1cHQgcHJlZGljdGlvbnMgKHZlcnkg
cmFyZSkuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAgYm9v
bCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSlNDb25zdGFu
dDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAg
ICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBUb1Ro
aXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NTYsMjkgKzU1Niw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzS25vd25Ob3ROdW1iZXIoTm9kZSog
bm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlICYgU3BlY0Z1bGxO
dW1iZXIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlKiBub2RlKSB7IHJldHVybiAh
KG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiBTcGVjQ2VsbCk7IH0KICAgICAKLSAgICAv
LyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNKU0NvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSog
bm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQobm9kZSk7IH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgo
KS5pc0RvdWJsZUNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5v
ZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNOdW1iZXJDb25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS5pc0Jvb2xlYW5Db25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNv
bnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0
YW50KG5vZGUpOyB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2Rl
KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9Ci0g
ICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgdm9pZCogYWRkcmVzc09mRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSk7IH0KLSNlbmRpZgotICAg
IEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZCb29sZWFu
Q29uc3RhbnQobm9kZSk7IH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFu
dChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXNOdWxsKCk7Ci0gICAg
fQotCiAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllclVJRCh1bnNpZ25lZCBpbmRleCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLmlkZW50aWZpZXJzKClbaW5kZXhdOwpAQCAt
NjE5LDkgKzU5Niw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUqIG5v
ZGUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFz
SW1tNjQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG5vZGUtPmFzSlNW
YWx1ZSgpKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTk1Nyw3ICs5MzQsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSB8fCBpc051bWJlckNvbnN0YW50KG5vZGUp
IHx8IGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNDb25zdGFu
dCgpKTsKICAgICAgICAgZ2VuZXJhdGlvbkluZm8obm9kZSkuaW5pdENvbnN0YW50KG5vZGUsIG5v
ZGUtPnJlZkNvdW50KCkpOwogICAgIH0KICAgICAKQEAgLTE5ODMsMTcgKzE5NjAsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogbGFiZWwgPSAwKTsKIAotICAgIGJvb2wg
aXNJbnRlZ2VyKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1
cm4gZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNKU0ludDMyKCk7Ci0gICAgfQotICAgIAogICAgIGJv
b2wgYmV0dGVyVXNlU3RyaWN0SW50NTIoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVy
biAhZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNJbnQ1MigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExpbmsuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIHZv
aWQgbGluayhTdGF0ZSYgc3RhdGUpCiAgICAgaWYgKCFncmFwaC5tX3BsYW4uaW5saW5lQ2FsbEZy
YW1lcy0+aXNFbXB0eSgpKQogICAgICAgICBzdGF0ZS5qaXRDb2RlLT5jb21tb24uaW5saW5lQ2Fs
bEZyYW1lcyA9IGdyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzOwogICAgIAorICAgIG1fZ3Jh
cGgucmVnaXN0ZXJGcm96ZW5WYWx1ZSgpOworCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50
LiBOb3RlIHRoYXQgd2UgdXNlIHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAg
ICAgLy8gZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4K
ICAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDYgKzE5MSwxMyBAQCB2b2lkIEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uCiAKIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKKyAgICBkdW1wSW5Db250ZXh0QXNzdW1p
bmdTdHJ1Y3R1cmUoCisgICAgICAgIG91dCwgY29udGV4dCwgKCEhKnRoaXMgJiYgaXNDZWxsKCkp
ID8gYXNDZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgSlNWYWx1ZTo6
ZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKICAgICBp
ZiAoISp0aGlzKQogICAgICAgICBvdXQucHJpbnQoIjxKU1ZhbHVlKCk+Iik7CiAgICAgZWxzZSBp
ZiAoaXNJbnQzMigpKQpAQCAtMjA3LDcgKzIxNCw3IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnByaW50ZigiRG91YmxlOiAlMDh4OiUwOHgs
ICVsZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91YmxlKCkpOwog
I2VuZGlmCiAgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgewotICAgICAgICBpZiAoYXNDZWxsKCkt
PmluaGVyaXRzKEpTU3RyaW5nOjppbmZvKCkpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNs
YXNzSW5mbygpLT5pc1N1YmNsYXNzT2YoSlNTdHJpbmc6OmluZm8oKSkpIHsKICAgICAgICAgICAg
IEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIlN0cmluZyIpOwogICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3Bl
KCkpCkBAIC0yMjMsMTEgKzIzMCwxMSBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJp
bnRTdHJlYW0mCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAodW5yZXNvbHZlZCkiKTsKICAgICAgICAgICAgIG91dC5wcmludCgiOiAiLCBpbXBsKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoU3RydWN0dXJlOjppbmZvKCkpKQor
ICAgICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViY2xhc3NPZihT
dHJ1Y3R1cmU6OmluZm8oKSkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZTogIiwg
aW5Db250ZXh0KCpqc0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpLCBjb250ZXh0KSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgb3V0LnByaW50KCJDZWxsOiAiLCBSYXdQb2ludGVyKGFz
Q2VsbCgpKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCphc0NlbGwo
KS0+c3RydWN0dXJlKCksIGNvbnRleHQpLCAiKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCIg
KCIsIGluQ29udGV4dCgqc3RydWN0dXJlLCBjb250ZXh0KSwgIikiKTsKICAgICAgICAgfQogI2lm
IFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIG91dC5wcmludCgiLCBJRDogIiwgYXNDZWxsKCktPnN0
cnVjdHVyZUlEKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIEpT
U3RyaW5nOwogY2xhc3MgUHJvcGVydHlOYW1lOwogY2xhc3MgUHJvcGVydHlTbG90OwogY2xhc3Mg
UHV0UHJvcGVydHlTbG90OworY2xhc3MgU3RydWN0dXJlOwogI2lmIEVOQUJMRShERkdfSklUKQog
bmFtZXNwYWNlIERGRyB7CiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTI3Nyw2ICsyNzgsNyBAQCBw
dWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqLCBTdHJ1Y3R1cmUqKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEpTT2JqZWN0KiBzeW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSopIGNvbnN0Owog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232508</attachid>
            <date>2014-06-04 16:38:30 -0700</date>
            <delta_ts>2014-06-06 21:54:12 -0700</delta_ts>
            <desc>just a tiny bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>144835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBACiAJCTBGNjY2RUNEMTgzNkIz
N0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0Uw
MEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKKwkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcg
LyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQjkxODYxMjQ0QzAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjEzMSw2ICsyMTMzLDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0g
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zyb3plblZh
bHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5oOyBwYXRo
ID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpT
Q2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTIsNiArNDcxNiw4IEBACiAJCQkJMEY5RDMzOTUxN0ZGQzRF
NjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCiAJCQkJQTdEODlDRTkxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggKi8sCisJCQkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLywKKwkJCQkwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuaCAqLywKIAkJCQkyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovLAogCQkJCTJBODgwNjc3MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLApAQCAtNTU3Miw2ICs1NTc4LDcgQEAKIAkJ
CQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2OUNDODkxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0
MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02ODcyLDYgKzY4NzksNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYw
MDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0
MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xl
YW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VDMTFBMDAx
M0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NTEw
N0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw2IEBAIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGEKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBleGl0U2l0ZURhdGEubV90YWtlc1Nsb3dQYXRoID0KICAgICAgICAgcHJvZmlsZWRC
bG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJ
bmRleCwgQmFkQ2FjaGUsIGV4aXRpbmdKSVRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9j
ay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRl
eCwgQmFkQ2FjaGVXYXRjaHBvaW50LCBleGl0aW5nSklUVHlwZSkpCiAgICAgICAgIHx8IHByb2Zp
bGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVj
b2RlSW5kZXgsIEJhZEV4ZWN1dGFibGUsIGV4aXRpbmdKSVRUeXBlKSk7CiAgICAgZXhpdFNpdGVE
YXRhLm1fYmFkRnVuY3Rpb24gPQogICAgICAgICBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShs
b2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbiwg
ZXhpdGluZ0pJVFR5cGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDggQEAg
Y29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQogICAgICAgICByZXR1cm4g
IkJhZEV4ZWN1dGFibGUiOwogICAgIGNhc2UgQmFkQ2FjaGU6CiAgICAgICAgIHJldHVybiAiQmFk
Q2FjaGUiOwotICAgIGNhc2UgQmFkQ2FjaGVXYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gIkJh
ZENhY2hlV2F0Y2hwb2ludCI7CiAgICAgY2FzZSBCYWRXZWFrQ29uc3RhbnRDYWNoZToKICAgICAg
ICAgcmV0dXJuICJCYWRXZWFrQ29uc3RhbnRDYWNoZSI7Ci0gICAgY2FzZSBCYWRXZWFrQ29uc3Rh
bnRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiAiQmFkV2Vha0NvbnN0YW50Q2FjaGVX
YXRjaHBvaW50IjsKICAgICBjYXNlIEJhZEluZGV4aW5nVHlwZToKICAgICAgICAgcmV0dXJuICJC
YWRJbmRleGluZ1R5cGUiOwogICAgIGNhc2UgT3ZlcmZsb3c6CkBAIC03Miw4ICs2OCw2IEBAIGNv
bnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJuICJO
b3RTdHJpbmdPYmplY3QiOwogICAgIGNhc2UgVW5jb3VudGFibGU6CiAgICAgICAgIHJldHVybiAi
VW5jb3VudGFibGUiOwotICAgIGNhc2UgVW5jb3VudGFibGVXYXRjaHBvaW50OgotICAgICAgICBy
ZXR1cm4gIlVuY291bnRhYmxlV2F0Y2hwb2ludCI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUludmFs
aWRhdGlvbjoKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZUludmFsaWRhdGlvbiI7CiAgICAg
Y2FzZSBXYXRjaGRvZ1RpbWVyRmlyZWQ6CkBAIC05Miw3ICs4Niw2IEBAIGJvb2wgZXhpdEtpbmRJ
c0NvdW50YWJsZShFeGl0S2luZCBraW5kKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIGNhc2UgQmFkVHlwZToKICAgICBjYXNlIFVuY291bnRhYmxlOgotICAgIGNh
c2UgVW5jb3VudGFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTG9hZEZyb21Ib2xlOiAvLyBBbHJl
YWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkgdGhlIGJhc2VsaW5lIEpJVC4KICAgICBjYXNlIFN0b3Jl
VG9Ib2xlOiAvLyBBbHJlYWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkgdGhlIGJhc2VsaW5lIEpJVC4K
ICAgICBjYXNlIE91dE9mQm91bmRzOiAvLyBBbHJlYWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkgdGhl
IGJhc2VsaW5lIEpJVC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0
S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0
S2luZC5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNyBAQCBlbnVtIEV4aXRL
aW5kIDogdWludDhfdCB7CiAgICAgQmFkRnVuY3Rpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdl
IG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hhdCBmdW5jdGlvbiB3ZSB3b3Vs
ZCBzZWUuCiAgICAgQmFkRXhlY3V0YWJsZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbWFkZSBh
biBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB3aGF0IGV4ZWN1dGFibGUgd2Ugd291bGQgc2Vl
LgogICAgIEJhZENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhbiBpbmxpbmUgY2FjaGUgd2Fz
IHdyb25nLgotICAgIEJhZFdlYWtDb25zdGFudENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
IGNhY2hlIG9uIGEgd2VhayBjb25zdGFudCAodXN1YWxseSBhIHByb3RvdHlwZSkgd2FzIHdyb25n
LgotICAgIEJhZENhY2hlV2F0Y2hwb2ludCwgLy8gU2FtZSBhcyBCYWRDYWNoZSBidXQgZnJvbSBh
IHdhdGNocG9pbnQuCi0gICAgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50LCAvLyBTYW1l
IGFzIEJhZFdlYWtDb25zdGFudENhY2hlIGJ1dCBmcm9tIGEgd2F0Y2hwb2ludC4KKyAgICBCYWRD
b25zdGFudENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIGNhY2hlIG9uIGEgd2VhayBjb25z
dGFudCAodXN1YWxseSBhIHByb3RvdHlwZSkgd2FzIHdyb25nLgogICAgIEJhZEluZGV4aW5nVHlw
ZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYW4gaW5kZXhpbmcgdHlwZSB3YXMgd3JvbmcuCiAgICAg
T3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJmbG93LgogICAgIE5lZ2F0aXZl
WmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVyZWQgbmVnYXRpdmUgemVyby4K
QEAgLTQ5LDcgKzQ3LDYgQEAgZW51bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIE5vdFN0cmlu
Z09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1wdGVk
IHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgogICAgIFVuY291bnRhYmxlLCAvLyBX
ZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFib3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91bGQgbm90
IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhpcyBzaG91bGQgYmUgdmlld2VkIGFzIGEgRklYTUUu
CiAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHRoZSBj
b2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZDsgdGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFscmVhZHkg
Y291bnRlZCB0aGUgcmVhc29ucyB3aHkgdGhlIGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVkLgot
ICAgIFVuY291bnRhYmxlV2F0Y2hwb2ludCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugb2YgYSB3YXRj
aHBvaW50LCB3aGljaCBpc24ndCBjb3VudGVkIGJlY2F1c2Ugd2F0Y2hwb2ludHMgZG8gdHJhY2tp
bmcgdGhlbXNlbHZlcy4KICAgICBXYXRjaGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBiZWNh
dXNlIHdlIG5lZWQgdG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCiAgICAgRGVidWdnZXJF
dmVudCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIGRlYnVnZ2Vy
LgogfTsKQEAgLTU3LDE4ICs1NCw2IEBAIGVudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKIGNvbnN0
IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQpOwogYm9vbCBleGl0S2luZElzQ291bnRh
YmxlKEV4aXRLaW5kKTsKIAotaW5saW5lIGJvb2wgaXNXYXRjaHBvaW50KEV4aXRLaW5kIGtpbmQp
Ci17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBCYWRDYWNoZVdhdGNocG9pbnQ6Ci0g
ICAgY2FzZSBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgY2FzZSBVbmNvdW50
YWJsZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1l
c3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsOSAr
NTEsNyBAQCBib29sIEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiBib29sIEdl
dEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBFeGl0
aW5nSklUVHlwZSBqaXRUeXBlKQogewogICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT5oYXNFeGl0
U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNo
ZSwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hwb2lu
dCwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFdlYWtDb25zdGFudENh
Y2hlLCBqaXRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9j
a2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50
Q2FjaGVXYXRjaHBvaW50LCBqaXRUeXBlKSk7CisgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhh
c0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJh
ZENvbnN0YW50Q2FjaGUsIGppdFR5cGUpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAx
Njk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDcgQEAgYm9vbCBQdXRCeUlkU3RhdHVzOjph
cHBlbmRWYXJpYW50KGNvbnN0IAogYm9vbCBQdXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShjb25z
dCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgZXhpdFR5cGUpCiB7CiAgICAg
cmV0dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4
aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlLCBleGl0VHlwZSkpCi0gICAgICAgIHx8IHBy
b2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5
dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hwb2ludCwgZXhpdFR5cGUpKQotICAgICAgICB8fCBw
cm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShi
eXRlY29kZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZSwgZXhpdFR5cGUpKQotICAgICAgICB8
fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQsIGV4aXRUeXBl
KSk7CisgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpG
cmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUsIGV4aXRUeXBl
KSk7CiAgICAgCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBub2Rl
LCBKU1ZhbHVlIHZhbHVlKQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShUIG5v
ZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5VmFs
dWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBwdWJs
aWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0IFN0
cnVjdHVyZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhBYnN0
cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJz
dHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRl
ckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1bHQg
ZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5k
ZXhJbkJsb2NrKTsKQEAgLTE2NSwxNCArMTY1LDE0IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICBC
b29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsKICAgICAK
LSAgICB2b2lkIHNldEJ1aWx0SW5Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQor
ICAgIHZvaWQgc2V0QnVpbHRJbkNvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVl
KQogICAgIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSA9IGZvck5vZGUo
bm9kZSk7CiAgICAgICAgIGFic3RyYWN0VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgYWJzdHJhY3RWYWx1ZS5maXhUeXBl
Rm9yUmVwcmVzZW50YXRpb24obm9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Q29uc3Rh
bnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHNldENvbnN0YW50KE5vZGUq
IG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgc2V0QnVpbHRJbkNvbnN0
YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFu
dDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoKICAg
ICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKLSAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5v
ZGUsIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBzZXRCdWlsdElu
Q29uc3RhbnQobm9kZSwgKm5vZGUtPmNvbnN0YW50KCkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIApAQCAtODU1LDMyICs4NTQsMzIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxkID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAgICAg
ICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkKTsKLSAg
ICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpOworICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHR5cGVTdHJpbmcpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNGdWxsTnVtYmVyU3Bl
Y3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCB2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKTsKKyAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0
cmluZygpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygp
KTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21h
bGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0cmFj
dENoaWxkLm1fdHlwZSkgfHwgaXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBl
KSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmco
KSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0tPnNt
YWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJhY3RD
aGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxT
dHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
Km1fZ3JhcGguZnJlZXplKHZtLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIHNldENv
bnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKTsKKyAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLmJv
b2xlYW5TdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTQz
Miw3ICsxNDMxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgIGNhc2UgU2tpcFNjb3BlOiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwo
KSktPm5leHQoKSkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJl
ZXplKEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
VHlwZShTcGVjT2JqZWN0T3RoZXIpOwpAQCAtMTQ3OSw3ICsxNDc4LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwo
KS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRj
aHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3Bl
Y2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
ICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCks
IHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSk7CkBAIC0xNzYzLDE0ICsxNzYyLDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAKICAgICBjYXNlIENoZWNr
RnVuY3Rpb246IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7Cisg
ICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpKSB7CiAgICAgICAg
ICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgQVNTRVJU
KHZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgotICAg
ICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5mdW5jdGlvbigpKTsKKyAg
ICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm5vZGUtPmZ1bmN0aW9uKCkpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyNCw3ICsyMTIzLDcgQEAgRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFicwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlckJ5VmFsdWUoCi0gICAgQWJzdHJhY3RWYWx1ZSYg
YWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBjb25jcmV0ZVZhbHVlKQorICAgIEFic3RyYWN0VmFsdWUm
IGFic3RyYWN0VmFsdWUsIEZyb3plblZhbHVlIGNvbmNyZXRlVmFsdWUpCiB7CiAgICAgaWYgKGFi
c3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0cmF0aW9uT0sp
CiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDEwICs0NywxMCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0
aW9ucyhjCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi12b2lkIEFic3RyYWN0VmFsdWU6
OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYgZ3JhcGgsIGNvbnN0IEZyb3plblZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewotICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAg
ICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS52YWx1ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUuc3RydWN0dXJlKCk7CiAgICAgICAgIGdyYXBoLndhdGNo
cG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKTsKQEAgLTU5LDE3ICs1OSwxNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNl
dE1vc3RTcGVjaWZpYyhHcmFwCiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAg
ICAgICAKLSAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSk7Ci0gICAgbV92
YWx1ZSA9IHZhbHVlOworICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZh
bHVlKCkpOworICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwogICAgICAgICAKICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAotdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgm
IGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBj
bG9iYmVyU3RhdGUpCiB7Ci0gICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7
CisgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBpZiAoZ3Jh
cGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpKSB7CiAgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgYmUgYWJsZSB0byBhc3N1bWUgdGhhdCB0aGUgd2F0Y2hwb2ludCBmb3IgdGhpcyBo
YXMgYWxyZWFkeSBiZWVuIHNldC4KICAgICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4ndCBiZWNhdXNl
IG91ciB2aWV3IG9mIHdoYXQgc3RydWN0dXJlIGEgdmFsdWUgaGFzIGtlZXBzIGNoYW5naW5nLiBU
aGF0J3MKQEAgLTkwLDggKzkwLDggQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdy
YXBoLCBKUwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAKLSAgICBtX3R5
cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSk7Ci0gICAgbV92YWx1ZSA9IHZhbHVlOwor
ICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZhbHVlKCkpOworICAgIG1f
dmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwpAQCAtMjIxLDExICsyMjEsMTEgQEAgRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoUwogICAgIHJldHVybiBub3JtYWxpemVDbGFy
aXR5KCk7CiB9CiAKLUZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnlWYWx1
ZShKU1ZhbHVlIHZhbHVlKQorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJC
eVZhbHVlKGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSkKIHsKLSAgICBGaWx0cmF0aW9uUmVzdWx0
IHJlc3VsdCA9IGZpbHRlcihzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZSkpOworICAgIEZpbHRy
YXRpb25SZXN1bHQgcmVzdWx0ID0gZmlsdGVyKHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLnZh
bHVlKCkpKTsKICAgICBpZiAobV90eXBlKQotICAgICAgICBtX3ZhbHVlID0gdmFsdWU7CisgICAg
ICAgIG1fdmFsdWUgPSB2YWx1ZS52YWx1ZSgpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXJyYXlQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIkRG
R0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZH
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJT
dGF0ZS5oIgpAQCAtMTczLDggKzE3NCw4IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMo
R3JhcGgmLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHNldChHcmFwaCYsIEpTVmFsdWUsIFN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSk7CisgICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgmLCBjb25zdCBG
cm96ZW5WYWx1ZSYpOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgRnJvemVuVmFsdWUmLCBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgU3RydWN0dXJlKik7
CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKQEAgLTI2
Miw3ICsyNjMsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSk7CiAgICAgCi0gICAgRmlsdHJhdGlv
blJlc3VsdCBmaWx0ZXJCeVZhbHVlKEpTVmFsdWUgdmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpOwogICAgIAogICAgIGJv
b2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIwOCw4ICsyMDgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
bml0X2xhenlfcmVnIHNpbmNlIGl0IHRyZWF0cyBDcmVhdGVBcmd1bWVudHMgYXMgcmVhZGluZwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGVzLiBUaGF0IGNvdWxkIGJl
IGZpeGVkLCBidXQgaXQncyBlYXNpZXIgdG8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdv
cmsgYXJvdW5kIHRoaXMgaGVyZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2Ut
Pm9wKCkgPT0gSlNDb25zdGFudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzb3Vy
Y2UtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UtPm9wKCkgPT0gSlNDb25zdGFudCAmJiAhKnNvdXJjZS0+Y29uc3RhbnQo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhcmlhYmxlIGlzIHRv
dGFsbHkgZGVhZCwgdGhlbiBpZ25vcmUgaXQuCkBAIC01MTEsNyArNTEwLDggQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcmd1
bWVudHNOb3RDcmVhdGVkLCBvcmlnaW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUsIGpzTnVtYmVyKG9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFy
Z3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBtX2dy
YXBoLmZyZWV6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc051bWJlcihvcmlnaW4u
c2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpKTsKICAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KQEAgLTUyOCwxMiArNTI4LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5z
ZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5pc0ludDMyQ29uc3RhbnQoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZh
bHVlID0gbm9kZS0+Y2hpbGQxKCktPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpCisgICAgICAgICAgICAgICAg
ICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IHZhbHVl
LmFzSW50MzIoKTsKKyAgICAgICAgICAgICAgICAgICAgaW50MzJfdCBpbmRleCA9IG5vZGUtPmNo
aWxkMSgpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAKICAg
ICAgICAgICAgICAgICAgICAgICAgIHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW5kZXggKyAxKSA+
PQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFja3dh
cmRzUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE3ICs2NywxNyBA
QCBwdWJsaWM6CiBwcml2YXRlOgogICAgIGJvb2wgaXNOb3ROZWdaZXJvKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAg
ICAgaWYgKCFub2RlLT5pc051bWJlckNvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50
KG5vZGUpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBub2RlLT5hc051bWJlcigpOwogICAgICAg
ICByZXR1cm4gKHZhbHVlIHx8IDEuMCAvIHZhbHVlID4gMC4wKTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCBpc05vdFBvc1plcm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIGlmICghbV9ncmFw
aC5pc051bWJlckNvbnN0YW50KG5vZGUpKQorICAgICAgICBpZiAoIW5vZGUtPmlzTnVtYmVyQ29u
c3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZG91YmxlIHZhbHVl
ID0gbV9ncmFwaC52YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSk7CisgICAgICAgIGRvdWJsZSB2
YWx1ZSA9IG5vZGUtPmFzTnVtYmVyKCk7CiAgICAgICAgIHJldHVybiAodmFsdWUgfHwgMS4wIC8g
dmFsdWUgPCAwLjApOwogICAgIH0KIApAQCAtODUsNyArODUsNyBAQCBwcml2YXRlOgogICAgIHRl
bXBsYXRlPGludCBwb3dlcj4KICAgICBib29sIGlzV2l0aGluUG93ZXJPZlR3b0ZvckNvbnN0YW50
KE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gbm9k
ZS0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICBKU1ZhbHVlIGltbWVk
aWF0ZVZhbHVlID0gbm9kZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgIGlmICghaW1tZWRpYXRlVmFs
dWUuaXNOdW1iZXIoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgZG91Ymxl
IGltbWVkaWF0ZSA9IGltbWVkaWF0ZVZhbHVlLmFzTnVtYmVyKCk7CkBAIC0xMzAsNyArMTMwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIE5vZGUqIHNoaWZ0QW1vdW50ID0gbm9kZS0+Y2hpbGQy
KCkubm9kZSgpOwogICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LT5vcCgpICE9IEpTQ29uc3Rh
bnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgSlNWYWx1ZSBp
bW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2so
KSk7CisgICAgICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gc2hpZnRBbW91bnQtPmFz
SlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGltbWVkaWF0
ZVZhbHVlLmFzSW50MzIoKSA+IDMyIC0gcG93ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMiwxOCArMTMyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2dyYXBoKGdy
YXBoKQogICAgICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgICAgICwgbV9jdXJyZW50SW5k
ZXgoMCkKLSAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVkKFVJTlRfTUFYKQotICAgICAgICAs
IG1fY29uc3RhbnROdWxsKFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnROYU4oVUlOVF9N
QVgpCi0gICAgICAgICwgbV9jb25zdGFudDEoVUlOVF9NQVgpCi0gICAgICAgICwgbV9jb25zdGFu
dHMobV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSkKKyAgICAgICAgLCBt
X2NvbnN0YW50VW5kZWZpbmVkKGdyYXBoLmZyZWV6ZShqc1VuZGVmaW5lZCgpKSkKKyAgICAgICAg
LCBtX2NvbnN0YW50TnVsbChncmFwaC5mcmVlemUoanNOdWxsKCkpKQorICAgICAgICAsIG1fY29u
c3RhbnROYU4oZ3JhcGguZnJlZXplKGpzTnVtYmVyKFBOYU4pKSkKKyAgICAgICAgLCBtX2NvbnN0
YW50T25lKGdyYXBoLmZyZWV6ZShqc051bWJlcigxKSkpCiAgICAgICAgICwgbV9udW1Bcmd1bWVu
dHMobV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSkKICAgICAgICAgLCBtX251bUxvY2Fscyht
X2NvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgICAgICwgbV9wYXJhbWV0ZXJT
bG90cygwKQogICAgICAgICAsIG1fbnVtUGFzc2VkVmFyQXJncygwKQogICAgICAgICAsIG1faW5s
aW5lU3RhY2tUb3AoMCkKICAgICAgICAgLCBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzKGZhbHNlKQot
ICAgICAgICAsIG1fZW1wdHlKU1ZhbHVlSW5kZXgoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jdXJy
ZW50SW5zdHJ1Y3Rpb24oMCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Byb2ZpbGVkQmxvY2sp
OwpAQCAtMjE3LDEyICsyMTUsNyBAQCBwcml2YXRlOgogICAgIC8vIEdldC9TZXQgdGhlIG9wZXJh
bmRzL3Jlc3VsdCBvZiBhIGJ5dGVjb2RlIGluc3RydWN0aW9uLgogICAgIE5vZGUqIGdldERpcmVj
dChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7Ci0gICAgICAgIC8vIElzIHRoaXMgYSBj
b25zdGFudD8KLSAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjb25zdGFudCA9IG9wZXJhbmQudG9Db25zdGFudEluZGV4KCk7Ci0gICAgICAg
ICAgICBBU1NFUlQoY29uc3RhbnQgPCBtX2NvbnN0YW50cy5zaXplKCkpOwotICAgICAgICAgICAg
cmV0dXJuIGdldEpTQ29uc3RhbnQoY29uc3RhbnQpOwotICAgICAgICB9CisgICAgICAgIEFTU0VS
VCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogCiAgICAgICAgIC8vIElzIHRoaXMgYW4gYXJndW1l
bnQ/CiAgICAgICAgIGlmIChvcGVyYW5kLmlzQXJndW1lbnQoKSkKQEAgLTIzNCwxMyArMjI3LDI1
IEBAIHByaXZhdGU6CiAKICAgICBOb2RlKiBnZXQoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAg
ICAgeworICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGNvbnN0YW50SW5kZXggPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOworICAgICAg
ICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gbV9jb25zdGFudHMuc2l6ZSgpIHx8IG1fY29uc3Rh
bnRzW2NvbnN0YW50SW5kZXhdKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
aW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nZXRDb25zdGFudChvcGVyYW5kLm9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBtX2NvbnN0YW50cy5zaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzLmdyb3coY29uc3RhbnRJbmRleCAr
IDEpOworICAgICAgICAgICAgICAgIG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdID0KKyAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVl
emVTdHJvbmdseSh2YWx1ZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBt
X2NvbnN0YW50c1tjb25zdGFudEluZGV4XTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
aWYgKGlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFt
ZSgpLT5pc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVl
ID0gaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlZUNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gY2VsbENvbnN0YW50KGNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBqc0NvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPT0gSlNTdGFjazo6U2NvcGVDaGFpbikKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNlbGxDb25zdGFudChjYWxsZWUtPnNjb3BlKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4ganNDb25zdGFudChjYWxsZWUtPnNjb3BlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAg
ICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKQEAgLTMwOSwxNCArMzE0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRW
YWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5
V2F0Y2hwb2ludCwgT3BJbmZvKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8oc2V0KSk7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHRoaXMgaXMgdmVyeSBzcGVjaWFsIGZyb20g
YW4gT1NSIGV4aXQgc3RhbmRwb2ludC4gV2Ugd291bGRuJ3QgYmUKLSAgICAgICAgICAgICAgICAg
ICAgLy8gYWJsZSB0byBkbyB0aGlzIGZvciBtb3N0IGxvY2FscywgYnV0IGl0IHdvcmtzIGhlcmUg
YmVjYXVzZSB3ZSdyZSBkZWFsaW5nCi0gICAgICAgICAgICAgICAgICAgIC8vIHdpdGggYSBmbHVz
aGVkIGxvY2FsLiBGb3IgbW9zdCBsb2NhbHMgd2Ugd291bGQgbmVlZCB0byBpc3N1ZSBhIEdldExv
Y2FsCi0gICAgICAgICAgICAgICAgICAgIC8vIGhlcmUgYW5kIGVuc3VyZSB0aGF0IHdlIGhhdmUg
dXNlcyBpbiBERkcgSVIgd2hlcmV2ZXIgdGhlcmUgd291bGQgaGF2ZQotICAgICAgICAgICAgICAg
ICAgICAvLyBiZWVuIHVzZXMgaW4gYnl0ZWNvZGUuIENsZWFybHkgdGhpcyBvcHRpbWl6YXRpb24g
ZG9lcyBub3QgZG8gdGhpcy4gQnV0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQncyBmaW5l
LCBiZWNhdXNlIHdlIGRvbid0IG5lZWQgdG8gdHJhY2sgbGl2ZW5lc3MgZm9yIGNhcHR1cmVkCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGxvY2FscywgYW5kIHRoaXMgb3B0aW1pemF0aW9uIG9ubHkg
a2lja3MgaW4gZm9yIGNhcHR1cmVkIGxvY2Fscy4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGluZmVycmVkQ29uc3RhbnQodmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganND
b25zdGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC0zNjcsOCArMzY1LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
LCBpc0NhcHR1cmVkKTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdGYWlsZWQoCi0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAg
ICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIEJhZENhY2hlV2F0Y2hwb2ludCkpOworICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0Zh
aWxlZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAgICBOb2RlKiBu
b2RlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZh
bHVlKTsKQEAgLTQyNCw4ICs0MjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGVB
Y2Nlc3NEYXRhLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7CiAgICAgICAgIAogICAgICAg
ICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgK
LSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKQotICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGVXYXRj
aHBvaW50KSk7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkSW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwpAQCAtNTU0LDMyICs1NTAs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwogICAgIH0KIAotICAg
IC8vIE5PVEU6IE9ubHkgdXNlIHRoaXMgdG8gY29uc3RydWN0IGNvbnN0YW50cyB0aGF0IGFyaXNl
IGZyb20gbm9uLXNwZWN1bGF0aXZlCi0gICAgLy8gY29uc3RhbnQgZm9sZGluZy4gSS5lLiBjcmVh
dGluZyBjb25zdGFudHMgdXNpbmcgdGhpcyBpZiB3ZSBoYWQgY29uc3RhbnQKLSAgICAvLyBmaWVs
ZCBpbmZlcmVuY2Ugd291bGQgYmUgYSBiYWQgaWRlYSwgc2luY2UgdGhlIGJ5dGVjb2RlIHBhcnNl
cidzIGZvbGRpbmcKLSAgICAvLyBkb2Vzbid0IGhhbmRsZSBsaXZlbmVzcyBwcmVzZXJ2YXRpb24u
Ci0gICAgTm9kZSogZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUgY29uc3RhbnRWYWx1ZSkK
KyAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIGNvbnN0YW50IHNob3VsZCBiZSBzdHJvbmdseSBtYXJr
ZWQuCisgICAgTm9kZSoganNDb25zdGFudChKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCiAgICAgewot
ICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4OwotICAgICAgICBpZiAoIW1fY29kZUJsb2Nr
LT5maW5kQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSwgY29uc3RhbnRJbmRleCkpIHsKLSAgICAgICAg
ICAgIGFkZENvbnN0YW50KGNvbnN0YW50VmFsdWUpOwotICAgICAgICAgICAgbV9jb25zdGFudHMu
YXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBB
U1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50
UmVnaXN0ZXJzKCkpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQoY29u
c3RhbnRJbmRleCk7CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2dyYXBoLmZyZWV6ZVN0cm9uZ2x5KGNvbnN0YW50VmFsdWUpKSk7CiAgICAgfQogCi0gICAg
Tm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFudCkKKyAgICBOb2RlKiB3ZWFrSlND
b25zdGFudChKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCiAgICAgewotICAgICAgICBOb2RlKiBub2Rl
ID0gbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsKLSAgICAgICAgaWYgKG5vZGUpCi0g
ICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwotICAgICAgICBtX2NvbnN0YW50c1tj
b25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0OwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9ncmFwaC5mcmVlemUo
Y29uc3RhbnRWYWx1ZSkpKTsKICAgICB9CiAKICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHRvIGdl
dC9zZXQgdGhlIHRoaXMgdmFsdWUuCkBAIC01OTMsMTQ5ICs1NzIsNiBAQCBwcml2YXRlOgogICAg
ICAgICBzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnRoaXNSZWdpc3RlcigpLCB2
YWx1ZSk7CiAgICAgfQogCi0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgY2hlY2tpbmcg
bm9kZXMgZm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzSlNDb25zdGFudChOb2RlKiBub2RlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0gSlNDb25zdGFudDsKLSAgICB9Ci0g
ICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBpc0pTQ29uc3RhbnQobm9kZSkgJiYgdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXNJbnQzMigp
OwotICAgIH0KLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2RzIGZvciBnZXR0aW5nIGNvbnN0YW50
IHZhbHVlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG5vZGUt
PmNvbnN0YW50TnVtYmVyKCkpOwotICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5v
ZGUpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmFzSW50MzIoKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIEpTQ29uc3RhbnQgd2l0
aCB0aGUgdmFsdWUgJ3VuZGVmaW5lZCcuCi0gICAgTm9kZSogY29uc3RhbnRVbmRlZmluZWQoKQot
ICAgIHsKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRVbmRlZmluZWQgYmVlbiBzZXQgdXAgeWV0
PwotICAgICAgICBpZiAobV9jb25zdGFudFVuZGVmaW5lZCA9PSBVSU5UX01BWCkgewotICAgICAg
ICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciB1bmRlZmluZWQsIGlmIHdlIGZp
bmQgaXQsIHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1i
ZXJPZkNvbnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7
Ci0gICAgICAgICAgICBmb3IgKG1fY29uc3RhbnRVbmRlZmluZWQgPSAwOyBtX2NvbnN0YW50VW5k
ZWZpbmVkIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9jb25zdGFudFVuZGVmaW5lZCkgewotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdGVzdE1lID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudFVuZGVmaW5lZCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHRlc3RNZS5pc1VuZGVmaW5lZCgpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50VW5kZWZpbmVkKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gQWRkIHVuZGVmaW5lZCB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3Rh
bnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAg
ICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0g
ICAgICAgICAgICBhZGRDb25zdGFudChqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIG1fY29u
c3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2Nv
bnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMo
KSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtX2NvbnN0YW50VW5kZWZpbmVkIG11c3QgcmVm
ZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50IHBvb2wgdGhhdCBoYXMg
dGhlIHZhbHVlICd1bmRlZmluZWQnLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENv
bnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudFVuZGVmaW5lZCku
aXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnRV
bmRlZmluZWQpOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0
YW50IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2RlKiBjb25zdGFudE51bGwoKQotICAg
IHsKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnROdWxsIGJlZW4gc2V0IHVwIHlldD8KLSAgICAg
ICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAvLyBTZWFy
Y2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIG51bGwsIGlmIHdlIGZpbmQgaXQsIHdlIGNhbiBqdXN0
IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50cyA9IG1f
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBmb3Ig
KG1fY29uc3RhbnROdWxsID0gMDsgbV9jb25zdGFudE51bGwgPCBudW1iZXJPZkNvbnN0YW50czsg
KyttX2NvbnN0YW50TnVsbCkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdGVzdE1lID0gbV9j
b2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25z
dGFudE51bGwpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0TWUuaXNOdWxsKCkpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnROdWxsKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIG51bGwgdG8gdGhlIENvZGVCbG9jaydzIGNv
bnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAg
ICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMp
OwotICAgICAgICAgICAgYWRkQ29uc3RhbnQoanNOdWxsKCkpOwotICAgICAgICAgICAgbV9jb25z
dGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAgICAgQVNTRVJUKG1fY29u
c3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1fY29uc3RhbnROdWxsIG11c3QgcmVmZXIgdG8g
YW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIHZh
bHVlICdudWxsJy4KLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnROdWxsKS5pc051bGwoKSk7Ci0gICAg
ICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnROdWxsKTsKLSAgICB9Ci0KLSAgICAv
LyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgMS4K
LSAgICBOb2RlKiBvbmUoKQotICAgIHsKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnQxIGJlZW4g
c2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnQxID09IFVJTlRfTUFYKSB7Ci0gICAg
ICAgICAgICAvLyBTZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIHRoZSB2YWx1ZSAxLCBpZiB3
ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQg
bnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVy
cygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50MSA9IDA7IG1fY29uc3RhbnQxIDwgbnVt
YmVyT2ZDb25zdGFudHM7ICsrbV9jb25zdGFudDEpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVl
IHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJ
bmRleCArIG1fY29uc3RhbnQxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVzdE1lLmlzSW50MzIo
KSAmJiB0ZXN0TWUuYXNJbnQzMigpID09IDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBn
ZXRKU0NvbnN0YW50KG1fY29uc3RhbnQxKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
Ly8gQWRkIHRoZSB2YWx1ZSAxIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMsIGFuZCBhZGQg
YSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAgICBBU1NFUlQo
bV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIGFk
ZENvbnN0YW50KGpzTnVtYmVyKDEpKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChD
b25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkg
PT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBtX2NvbnN0YW50MSBtdXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBD
b2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSBpbnRlZ2VyIHZhbHVlIDEuCi0g
ICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lz
dGVySW5kZXggKyBtX2NvbnN0YW50MSkuaXNJbnQzMigpKTsKLSAgICAgICAgQVNTRVJUKG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3Rh
bnQxKS5hc0ludDMyKCkgPT0gMSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29u
c3RhbnQxKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJs
ZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5hTi4KLSAgICBOb2RlKiBjb25zdGFudE5hTigpCi0g
ICAgewotICAgICAgICBKU1ZhbHVlIG5hbiA9IGpzTmFOKCk7Ci0gICAgICAgIAotICAgICAgICAv
LyBIYXMgbV9jb25zdGFudE5hTiBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAgIGlmIChtX2NvbnN0
YW50TmFOID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAvLyBTZWFyY2ggdGhlIGNvbnN0YW50
IHBvb2wgZm9yIHRoZSB2YWx1ZSBOYU4sIGlmIHdlIGZpbmQgaXQsIHdlIGNhbiBqdXN0IHJldXNl
IHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50cyA9IG1fY29kZUJs
b2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKG1fY29u
c3RhbnROYU4gPSAwOyBtX2NvbnN0YW50TmFOIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9jb25z
dGFudE5hTikgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdGVzdE1lID0gbV9jb2RlQmxvY2st
PmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE5hTik7
Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWU6OmVuY29kZSh0ZXN0TWUpID09IEpTVmFsdWU6
OmVuY29kZShuYW4pKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudCht
X2NvbnN0YW50TmFOKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHRoZSB2
YWx1ZSBuYW4gdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3Bv
bmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50
cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAgICAgICAgYWRkQ29uc3RhbnQo
bmFuKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51
bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtX2Nv
bnN0YW50TmFOIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0
YW50IHBvb2wgdGhhdCBoYXMgdGhlIHZhbHVlIG5hbi4KLSAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRO
YU4pLmlzRG91YmxlKCkpOwotICAgICAgICBBU1NFUlQoc3RkOjppc25hbihtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKS5h
c0RvdWJsZSgpKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnROYU4p
OwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBjZWxsQ29uc3RhbnQoSlNDZWxsKiBjZWxsKQotICAg
IHsKLSAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj46OkFkZFJlc3VsdCByZXN1bHQgPSBt
X2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBudWxscHRyKTsKLSAgICAgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICBBU1NFUlQoIUhlYXA6OmlzWm9tYmlmaWVkKGNl
bGwpKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZGRUb0dyYXBoKFdl
YWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSog
aW5mZXJyZWRDb25zdGFudChKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudCh2YWx1ZS5hc0NlbGwo
KSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUodmFsdWUpOwotICAgIH0K
LSAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWU7CkBAIC04MzEs
MTQgKzY2NywxNCBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGNlbGxDb25zdGFudFdpdGhT
dHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewotICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gY2VsbENvbnN0YW50KG9iamVjdCk7CisgICAg
ICAgIE5vZGUqIG9iamVjdE5vZGUgPSBqc0NvbnN0YW50KG9iamVjdCk7CiAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChzdHJ1
Y3R1cmUpKSwgb2JqZWN0Tm9kZSk7CiAgICAgICAgIHJldHVybiBvYmplY3ROb2RlOwogICAgIH0K
ICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBv
YmplY3QpCiAgICAgewotICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNo
ZWNrKG9iamVjdCwgb2JqZWN0LT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIHJldHVybiBjZWxsQ29u
c3RhbnRXaXRoU3RydWN0dXJlQ2hlY2sob2JqZWN0LCBtX2dyYXBoLmZyZWV6ZShvYmplY3QpLT5z
dHJ1Y3R1cmUoKSk7CiAgICAgfQogCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldp
dGhvdXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCkBAIC05OTcsMzYgKzgzMywxMSBA
QCBwcml2YXRlOgogICAgIC8vIFRoZSBieXRlY29kZSBpbmRleCBvZiB0aGUgY3VycmVudCBpbnN0
cnVjdGlvbiBiZWluZyBnZW5lcmF0ZWQuCiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7CiAK
LSAgICAvLyBXZSB1c2UgdGhlc2UgdmFsdWVzIGR1cmluZyBjb2RlIGdlbmVyYXRpb24sIGFuZCB0
byBhdm9pZCB0aGUgbmVlZCBmb3IKLSAgICAvLyBzcGVjaWFsIGhhbmRsaW5nIHdlIG1ha2Ugc3Vy
ZSB0aGV5IGFyZSBhdmFpbGFibGUgYXMgY29uc3RhbnRzIGluIHRoZQotICAgIC8vIENvZGVCbG9j
aydzIGNvbnN0YW50IHBvb2wuIFRoZXNlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgdG8KLSAg
ICAvLyBVSU5UX01BWCwgYW5kIGxhemlseSB1cGRhdGVkIHRvIGhvbGQgYW4gaW5kZXggaW50byB0
aGUgQ29kZUJsb2NrJ3MKLSAgICAvLyBjb25zdGFudCBwb29sLCBhcyBuZWNlc3NhcnkuCi0gICAg
dW5zaWduZWQgbV9jb25zdGFudFVuZGVmaW5lZDsKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50TnVs
bDsKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50TmFOOwotICAgIHVuc2lnbmVkIG1fY29uc3RhbnQx
OwotICAgIEhhc2hNYXA8SlNDZWxsKiwgdW5zaWduZWQ+IG1fY2VsbENvbnN0YW50czsKLSAgICBI
YXNoTWFwPEpTQ2VsbCosIE5vZGUqPiBtX2NlbGxDb25zdGFudE5vZGVzOwotCi0gICAgLy8gQSBj
b25zdGFudCBpbiB0aGUgY29uc3RhbnQgcG9vbCBtYXkgYmUgcmVwcmVzZW50ZWQgYnkgbW9yZSB0
aGFuIG9uZQotICAgIC8vIG5vZGUgaW4gdGhlIGdyYXBoLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRl
eHQgaW4gd2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4KLSAgICBzdHJ1Y3QgQ29uc3RhbnRSZWNvcmQg
ewotICAgICAgICBDb25zdGFudFJlY29yZCgpCi0gICAgICAgICAgICA6IGFzSW50MzIoMCkKLSAg
ICAgICAgICAgICwgYXNOdW1lcmljKDApCi0gICAgICAgICAgICAsIGFzSlNWYWx1ZSgwKQotICAg
ICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBOb2RlKiBhc0ludDMyOwotICAgICAgICBOb2Rl
KiBhc051bWVyaWM7Ci0gICAgICAgIE5vZGUqIGFzSlNWYWx1ZTsKLSAgICB9OwotCi0gICAgLy8g
VHJhY2sgdGhlIGluZGV4IG9mIHRoZSBub2RlIHdob3NlIHJlc3VsdCBpcyB0aGUgY3VycmVudCB2
YWx1ZSBmb3IgZXZlcnkKLSAgICAvLyByZWdpc3RlciB2YWx1ZSBpbiB0aGUgYnl0ZWNvZGUgLSBh
cmd1bWVudCwgbG9jYWwsIGFuZCB0ZW1wb3JhcnkuCi0gICAgVmVjdG9yPENvbnN0YW50UmVjb3Jk
LCAxNj4gbV9jb25zdGFudHM7CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRVbmRlZmluZWQ7
CisgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnROdWxsOworICAgIEZyb3plblZhbHVlKiBtX2Nv
bnN0YW50TmFOOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50T25lOworICAgIFZlY3RvcjxO
b2RlKiwgMTY+IG1fY29uc3RhbnRzOwogCiAgICAgLy8gVGhlIG51bWJlciBvZiBhcmd1bWVudHMg
cGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4KICAgICB1bnNpZ25lZCBtX251bUFyZ3VtZW50czsKQEAg
LTEwNjEsNyArODcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoZSBtYWNoaW5lIGNvZGUg
YmxvY2ssIHdoaWNoIGlzIHRoZSB0cmFuc2l0aXZlLCB0aG91Z2ggbm90IG5lY2Vzc2FyaWx5CiAg
ICAgICAgIC8vIGRpcmVjdCwgY2FsbGVyKS4KICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2lk
ZW50aWZpZXJSZW1hcDsKLSAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50UmVtYXA7
CiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlclJlbWFwOwogICAgICAg
ICBWZWN0b3I8dW5zaWduZWQ+IG1fc3dpdGNoUmVtYXA7CiAgICAgICAgIApAQCAtMTEzMiwxMSAr
OTQyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbV9pbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhbmQ7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciByZXN1bHQgPSBWaXJ0dWFsUmVnaXN0ZXIobV9jb25zdGFudFJlbWFwW29wZXJhbmQudG9D
b25zdGFudEluZGV4KCldKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0LmlzQ29uc3Rh
bnQoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIEFTU0VSVCghb3BlcmFuZC5pc0NvbnN0YW50KCkpOwogCiAgICAgICAgICAgICBy
ZXR1cm4gVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQub2Zmc2V0KCkgKyBtX2lubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQpOwogICAgICAgICB9CkBAIC0xMTcwLDExICs5NzYsNiBAQCBwcml2YXRl
OgogICAgIGJvb2wgbV9oYXZlQnVpbHRPcGVyYW5kTWFwczsKICAgICAvLyBNYXBwaW5nIGJldHdl
ZW4gaWRlbnRpZmllciBuYW1lcyBhbmQgbnVtYmVycy4KICAgICBCb3Jyb3dlZElkZW50aWZpZXJN
YXAgbV9pZGVudGlmaWVyTWFwOwotICAgIC8vIE1hcHBpbmcgYmV0d2VlbiB2YWx1ZXMgYW5kIGNv
bnN0YW50IG51bWJlcnMuCi0gICAgSlNWYWx1ZU1hcCBtX2pzVmFsdWVNYXA7Ci0gICAgLy8gSW5k
ZXggb2YgdGhlIGVtcHR5IHZhbHVlLCBvciBVSU5UX01BWCBpZiB0aGVyZSBpcyBubyBtYXBwaW5n
LiBUaGlzIGlzIGEgaG9ycmlibGUKLSAgICAvLyB3b3JrLWFyb3VuZCBmb3IgdGhlIGZhY3QgdGhh
dCBKU1ZhbHVlTWFwIGNhbid0IGhhbmRsZSAiZW1wdHkiIHZhbHVlcy4KLSAgICB1bnNpZ25lZCBt
X2VtcHR5SlNWYWx1ZUluZGV4OwogICAgIAogICAgIENvZGVCbG9jayogbV9kZmdDb2RlQmxvY2s7
CiAgICAgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRNYXAgbV9jYWxsQ29udGV4dE1hcDsKQEAgLTEy
MjIsMTAgKzEwMjMsOCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIEFT
U0VSVChyZWdpc3Rlck9mZnNldCA8PSAwKTsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNw
ZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9y
KGtpbmQpOwogICAgIAotICAgIGlmIChtX2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdldCkpIHsK
LSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cygKLSAgICAgICAgICAgIG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRydWUpOwot
ICAgIH0KKyAgICBpZiAoY2FsbFRhcmdldC0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhjYWxsVGFyZ2V0LT5hc0pTVmFsdWUoKSkuc2V0SXNQ
cm92ZWQodHJ1ZSk7CiAgICAgCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgp
KSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3Qg
ZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGlj
YWxseQpAQCAtMTUzNiw3ICsxMzM1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoTm9kZQogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZXN1bHRP
cGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMpCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IDEpIHsgLy8gTWF0aC5taW4oKQotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBjb25zdGFudE5hTigpKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKQEAgLTE1NjEsNyArMTM2MCw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBzd2l0Y2gg
KGludHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKLSAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNvbnN0YW50TmFOKCkpOworICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CiAKQEAgLTE1ODUsNyArMTM4NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIENvc0ludHJpbnNpYzoKICAgICBjYXNl
IFNpbkludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMSkgewotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
Y29uc3RhbnROYU4oKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNzMyLDE5
ICsxNTMxLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogewotICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNC
b29sZWFuKHRydWUpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JFeGl0SW50cmluc2ljOiB7CiAgICAgICAgIGFk
ZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1
bHRPcGVyYW5kKSwgY29uc3RhbnRVbmRlZmluZWQoKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29u
c3RhbnRVbmRlZmluZWQpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBJc0ZpbmFsVGllckludHJpbnNpYzogewogICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKHJlc3VsdE9wZXJhbmQpLAotICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVl
KGpzQm9vbGVhbihPcHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1v
ZGUpIDogdHJ1ZSkpKTsKKyAgICAgICAgICAgIGpzQ29uc3RhbnQoanNCb29sZWFuKE9wdGlvbnM6
OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTgzOSw3ICsxNjM4LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBOb2RlKiBy
ZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PD0gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFudChtX3ZtLT5zbWFsbFN0cmlu
Z3MuZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBqc0NvbnN0YW50KG1fdm0t
PnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
cmVzdWx0ID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAKQEAgLTE5ODAsNyArMTc3OSw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgCiAgICAgTm9kZSogbG9h
ZGVkVmFsdWU7CiAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICBsb2Fk
ZWRWYWx1ZSA9IGNlbGxDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSk7
CisgICAgICAgIGxvYWRlZFZhbHVlID0ganNDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUo
KSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
CiAgICAgICAgICAgICBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50
Lm9mZnNldCgpLApAQCAtMjE1NCw5ICsxOTUzLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlUHV0QnlJZCgKIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VCbG9jaygp
CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytp
KQotICAgICAgICBtX2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7Ci0gICAgbV9jZWxs
Q29uc3RhbnROb2Rlcy5jbGVhcigpOworICAgIG1fY29uc3RhbnRzLnJlc2l6ZSgwKTsKIH0KIAog
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tp
cENvdW50KQpAQCAtMjE4OCw4ICsxOTg1LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YSgKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChhcmd1bWVudCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdl
U3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNo
ZSkKLSAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQpKTsKKyAgICAgICAg
ICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlQ2hlY2tB
cnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkp
OwogICAgICAgICAgICAgCkBAIC0yMjM1LDEzICsyMDMxLDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICAvLyA9PT0gRnVuY3Rpb24gZW50cnkg
b3Bjb2RlcyA9PT0KIAotICAgICAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBjYXNlIG9wX2Vu
dGVyOiB7CisgICAgICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBhZGRUb0dyYXBoKEpTQ29uc3Rh
bnQsIE9wSW5mbyhtX2NvbnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICAvLyBJbml0aWFs
aXplIGFsbCBsb2NhbHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCi0gICAg
ICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVm
aW5lZCgpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKGkpLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAg
ICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25L
aW5kKCkgPT0gQ29kZUZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMCksIGNvbnN0YW50VW5kZWZpbmVkKCksIEltbWVkaWF0ZU5ha2Vk
U2V0KTsKKyAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCks
IHVuZGVmaW5lZCwgSW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfZW50ZXIpOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b3Vj
aF9lbnRyeToKICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKQpAQCAt
MjI1Niw3ICsyMDU0LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgICAgICB8fCBjYWNoZWRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5t
ZXRob2RUYWJsZS50b1RoaXMgIT0gSlNPYmplY3Q6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlz
CiAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgICAg
IHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZENhY2hlKQotICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNo
cG9pbnQpCiAgICAgICAgICAgICAgICAgICAgIHx8IChvcDEtPm9wKCkgPT0gR2V0TG9jYWwgJiYg
b3AxLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgp
KSkgewogICAgICAgICAgICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3JhcGgoVG9UaGlzLCBvcDEp
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjI3MywxMSArMjA3MCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCBjYWxs
ZWVPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIGNhbGxlZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlT3BlcmFuZCkpOwogICAg
ICAgICAgICAgYm9vbCBhbHJlYWR5RW1pdHRlZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGNh
bGxlZS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCog
Y2VsbCA9IGNhbGxlZS0+d2Vha0NvbnN0YW50KCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNl
bGwtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihj
ZWxsKTsKKyAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxKU0Z1bmN0aW9uKj4oKSkgewogICAgICAgICAgICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZ1bmN0aW9uLT5hbGxvY2F0aW9uU3RydWN0dXJlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9p
bnQsIE9wSW5mbyhmdW5jdGlvbikpOwogICAgICAgICAgICAgICAgICAgICAvLyBUaGUgY2FsbGVl
IGlzIHN0aWxsIGxpdmUgdXAgdG8gdGhpcyBwb2ludC4KQEAgLTIzNTEsMTAgKzIxNDQsMTEgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZEZ1bmN0aW9uKSkgewogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIo
SlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemUoY2FjaGVkRnVuY3Rpb24pOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChjYWNoZWRGdW5jdGlvbi0+aW5oZXJpdHMoSlNGdW5jdGlv
bjo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogYWN0dWFsQ2FsbGVlID0gZ2V0KFZp
cnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhjYWNoZWRGdW5jdGlvbiksIGFjdHVhbENhbGxlZSk7
Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNhY2hlZEZ1
bmN0aW9uKSkpOworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJ
bmZvKGZyb3plbiksIGFjdHVhbENhbGxlZSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8oZnJvemVuKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZ2V0X2NhbGxlZSk7CiAgICAgICAgIH0KQEAgLTI0MTgsNyArMjIxMiw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGlu
dCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3Rlcihz
cmNEc3QpOwogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVy
KTsKLSAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRv
R3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0
dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBo
KEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9pbmMpOwogICAgICAgICB9CiAKQEAgLTI0MjYsNyArMjIyMCw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCBzcmNE
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdpc3RlciA9IFZpcnR1YWxSZWdpc3RlcihzcmNEc3Qp
OwogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyKTsKLSAg
ICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
QXJpdGhTdWIsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVn
aXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBhZGRUb0dyYXBoKEpTQ29u
c3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTI2NDMsNyArMjQzNyw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICBjYXNlIG9wX2VxX251bGw6
IHsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKENvbXBhcmVF
cUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpKTsKKyAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgo
Q29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50TnVsbCkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lcV9udWxsKTsK
ICAgICAgICAgfQogCkBAIC0yNjYzLDcgKzI0NTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9uZXFfbnVsbDogewogICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9H
cmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSkpOworICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2
YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSkpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcV9udWxsKTsKICAgICAgICAgfQogCkBAIC0y
Nzg4LDcgKzI1ODIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAgICAgICAgICAgIHVuc2lnbmVkIHJlbGF0
aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENv
bXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOworICAgICAgICAgICAgTm9k
ZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGFkZFRv
R3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qZXFfbnVsbCkp
KSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2plcV9udWxsKTsKICAg
ICAgICAgfQpAQCAtMjc5Niw3ICsyNTkwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2puZXFfbnVsbDogewogICAgICAgICAgICAg
dW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9
IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFudE51bGwoKSk7Cisg
ICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50
LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE51bGwpKSk7
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwgT3BJbmZvKGJyYW5jaERhdGEobV9jdXJy
ZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFfbnVsbCksIG1fY3VycmVudEluZGV4ICsg
cmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9w
X2puZXFfbnVsbCk7CiAgICAgICAgIH0KQEAgLTI4ODUsNyArMjY3OSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1bnNpZ25lZCB0
YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNldHNbaV07CiAgICAgICAg
ICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZGF0YS5jYXNl
cy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgoanNOdW1iZXIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAgICAgICBk
YXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRoQnl0ZWNvZGVJbmRleChtX2dyYXBoLmZy
ZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90Pih0YWJsZS5taW4gKyBpKSkpLCB0YXJn
ZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZsdXNoSWZUZXJtaW5hbChkYXRhKTsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJmRhdGEpLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CkBAIC0zMDU1LDcg
KzI4NDksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pT
Q29uc3RhbnQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAg
ICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CkBAIC0z
MDYzLDcgKzI4NTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb24KICAgICAgICAgICAgICAgICAgICAgJiYg
YWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxW
YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5
V2F0Y2hwb2ludCwgT3BJbmZvKGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCkpKTsKLSAgICAgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoYWN0aXZh
dGlvbikpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KGFjdGl2YXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwKQEAgLTMxMTIsNyArMjkwNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0
cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLm9ubHlT
dHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmly
dHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNp
ZmljVmFsdWUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFz
Q2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
anNDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CiAgICAgICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdl
dEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMxMzEsNyArMjkyNSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQs
IE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNpZmljVmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNpZmljVmFs
dWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTMxNDcsNyArMjk0MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gd2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBzY29wZU5vZGUpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcElu
Zm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQo
dmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzI0OCw3ICszMDQyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOiB7Ci0gICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBn
ZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSgpKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBqc0NvbnN0YW50KEpT
VmFsdWUoKSkpOwogICAgICAgICAgICAgQVNTRVJUKG9wZXJhbmRJc0xvY2FsKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9sYXp5VmFycy5z
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLnRvTG9j
YWwoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbml0X2xhenlfcmVnKTsKQEAgLTM0
MDMsMTMgKzMxOTcsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpidWlsZE9wZXJhbmRNYXBzSWZO
CiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJ
ZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgIG1faWRlbnRpZmllck1hcC5hZGQobV9jb2RlQmxv
Y2stPmlkZW50aWZpZXIoaSkuaW1wbCgpLCBpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewotICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KGkgKyBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGlmICghdmFsdWUpCi0gICAgICAgICAgICBtX2Vt
cHR5SlNWYWx1ZUluZGV4ID0gaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX2pzVmFsdWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSksIGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgfQogICAgIAogICAgIG1f
aGF2ZUJ1aWx0T3BlcmFuZE1hcHMgPSB0cnVlOwogfQpAQCAtMzUwNyw3ICszMjk0LDYgQEAgQnl0
ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBieXRlQ29kZVBh
cnNlci0+YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5KCk7CiAgICAgICAgIAogICAgICAgICBt
X2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkp
OwotICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25z
dGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShj
b2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOwogICAgICAgICBtX3N3aXRjaFJl
bWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpKTsKIApAQCAt
MzUxOCwyNCArMzMwNCw2IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmUKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5pZGVudGlmaWVycygp
LmFkZExhemlseShyZXApOwogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkgewotICAg
ICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1ZhbHVlSW5kZXggPT0gVUlO
VF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1Zh
bHVlSW5kZXggPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4OwotICAgICAgICAgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+YWRkQ29uc3RhbnQoSlNWYWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29y
ZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jb25zdGFudFJlbWFw
W2ldID0gYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1ZhbHVlSW5kZXg7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBKU1ZhbHVlTWFwOjpBZGRS
ZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKSwgYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgICAg
ICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNl
ci0+YWRkQ29uc3RhbnQodmFsdWUpOwotICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5t
X2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwotICAg
ICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkgewogICAgICAgICAgICAgLy8gSWYgd2UgaW5saW5l
IHRoZSBzYW1lIGNvZGUgYmxvY2sgbXVsdGlwbGUgdGltZXMsIHdlIGRvbid0IHdhbnQgdG8gbmVl
ZGxlc3NseQogICAgICAgICAgICAgLy8gZHVwbGljYXRlIGl0cyBjb25zdGFudCBidWZmZXJzLgpA
QCAtMzU2NiwxMyArMzMzNCwxMCBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6
SW5saW5lCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lID0gMDsKIAogICAgICAgICBtX2lkZW50
aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAg
ICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJl
Z2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxv
Y2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOwogICAgICAgICBtX3N3aXRjaFJlbWFwLnJl
c2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpKTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKTsgKytp
KQogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBbaV0gPSBpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyAr
K2kpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSBpICsgRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5u
dW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpCiAgICAgICAgICAgICBtX2NvbnN0YW50QnVm
ZmVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9j
ay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCk7ICsraSkKQEAgLTM1ODAsMTQgKzMzNDUsMTMg
QEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2Nh
bGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQogICAgIAotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb25zdGFudFJlbWFwLnNpemUoKTsgKytpKQotICAgICAg
ICBBU1NFUlQobV9jb25zdGFudFJlbWFwW2ldID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwotICAgIAogICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2lu
bGluZVN0YWNrVG9wID0gdGhpczsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2Rl
QmxvY2soKQogeworICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKKyAgICAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrOwogICAgIAogICAg
IGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKQEAgLTM2ODQsNiArMzQ0OCw4IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQ29kZUJsb2NrKCkKIAogICAgIC8vIFNob3VsZCBoYXZlIHJl
YWNoZWQgdGhlIGVuZCBvZiB0aGUgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChtX2N1cnJlbnRJ
bmRleCA9PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAgCisgICAgcHJl
cGFyZVRvUGFyc2VCbG9jaygpOwogfQogCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MCw3ICsxNTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAvLyBTd2l0Y2ggb24gY29uc3RhbnQgLT4gamV0dGlzb24gYWxsIG90aGVyIHRh
cmdldHMgYW5kIG1lcmdlLgogICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+
Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFs
dWUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGJsb2NrLT5sYXN0KCktPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogdmFsdWUg
PSBibG9jay0+bGFzdCgpLT5jaGlsZDEoKS0+Y29uc3RhbnQoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIFRyaVN0YXRlIGZvdW5kID0gRmFsc2VUcmlTdGF0ZTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgZm91bmQgPT0gRmFsc2VU
cmlTdGF0ZSAmJiBpLS07KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwyMiArMTY4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPm9wKCkgIT0gbm9kZS0+b3AoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90
aGVyTm9kZS0+Y29uc3RhbnROdW1iZXIoKSAhPSBub2RlLT5jb25zdGFudE51bWJlcigpKQotICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4g
b3RoZXJOb2RlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKLSAg
ICBOb2RlKiB3ZWFrQ29uc3RhbnRDU0UoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGVuZEluZGV4Rm9yUHVyZUNTRSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBO
b2RlKiBvdGhlck5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7Ci0gICAgICAgICAgICBpZiAo
b3RoZXJOb2RlLT5vcCgpICE9IFdlYWtKU0NvbnN0YW50KQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3RoZXJOb2RlLT53ZWFrQ29uc3Rh
bnQoKSAhPSBub2RlLT53ZWFrQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIGlmIChvdGhlck5vZGUt
PmNvbnN0YW50KCkgIT0gbm9kZS0+Y29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKQEAgLTQyMCw3
ICs0MDUsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBib29s
IGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihKU0NlbGwqIGZ1bmN0aW9uLCBOb2RlKiBjaGlsZDEp
CisgICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24oRnJvemVuVmFsdWUqIGZ1bmN0aW9u
LCBOb2RlKiBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fY3VycmVu
dEJsb2NrLT5hdChpKTsKQEAgLTEyNzAsMTMgKzEyNTUsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoY29uc3RhbnRDU0Uobm9kZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAg
IGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogaGF2ZSBDU0UgZm9yIHdlYWsgY29uc3RhbnRzIGFnYWlu
c3Qgc3Ryb25nIGNvbnN0YW50cyBhbmQgdmljZS12ZXJzYS4KLSAgICAgICAgICAgIHNldFJlcGxh
Y2VtZW50KHdlYWtDb25zdGFudENTRShub2RlKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgICAgICAg
ICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVD
b25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKICAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEhhcmRQ
aGFudG9tOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewotICAgICAgICAgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS0+ZnVu
Y3Rpb24oKSkKKyAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsK
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKQEAgLTI3Myw4ICsyNzMsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpIHx8IG1fc3RhdGUuZGlkQ2xvYmJlcigpIHx8IG5vZGUtPmhhc0NvbnN0YW50KCkpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUpLnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gbV9ncmFwaC5mcmVlemUobV9zdGF0ZS5mb3JO
b2RlKG5vZGUpLnZhbHVlKCkpOworICAgICAgICAgICAgaWYgKCEqdmFsdWUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIENoZWNrIGlmIG1l
cmdpbmcgdGhlIGFic3RyYWN0IHZhbHVlIG9mIHRoZSBjb25zdGFudCBpbnRvIHRoZSBhYnN0cmFj
dCB2YWx1ZQpAQCAtMjgzLDcgKzI4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyB0aGVu
IHdlIHJlZnVzZSB0byBmb2xkLgogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvbGRWYWx1ZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgY29uc3Rh
bnRWYWx1ZTsKLSAgICAgICAgICAgIGNvbnN0YW50VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBt
X3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKKyAgICAgICAgICAgIGNvbnN0YW50VmFs
dWUuc2V0KG1fZ3JhcGgsICp2YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7
CiAgICAgICAgICAgICBjb25zdGFudFZhbHVlLmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihub2Rl
KTsKICAgICAgICAgICAgIGlmIChvbGRWYWx1ZS5tZXJnZShjb25zdGFudFZhbHVlKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKQEAgLTMzMCw3ICszMzAsNyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAg
ICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgdmFyaWFudC5zcGVjaWZp
Y1ZhbHVlKCkpOworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBt
X2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNDUzLDcgKzQ1Myw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRp
b25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4sIE9wSW5mbyhjZWxsKSk7
CisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBK
U0NvbnN0YW50LCBvcmlnaW4sCisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUoY2Vs
bCkpKTsKICAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBPdGhl
clVzZSkpOwogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPE90aGVyVXNlPihu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1dl
YWtDb25zdGFudChtX2dyYXBoLmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5nbG9iYWxUaGlzT2JqZWN0Rm9yKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCkBAIC0xMDM0LDggKzEwMzUsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVj
dE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCi0gICAg
ICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEpT
Q29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
ZnJlZXplKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgaGF2ZSBhbiB1
bmNvbmRpdGlvbmFsIGJhcnJpZXIuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTA0CiAgICAgICAgICAgICBOb2RlKiBiYXJyaWVyTm9k
ZSA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwNjcsNyArMTA2OCw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkg
Zm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNl
dEFyZ3VtZW50OgogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgR2V0Q2FsbGVl
OgogICAgICAgICBjYXNlIEZsdXNoOgpAQCAtMTE5Myw5ICsxMTkzLDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGVkZ2Uuc2V0VXNlS2luZChLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3Jh
cGguaXNDb25zdGFudChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5n
ID0gZWRnZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCk7CisgICAgICAgICAgICBp
ZiAoIXN0cmluZykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEpTU3Ry
aW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KGVkZ2Uubm9kZSgpKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5ndGgo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTYxOCw4ICsx
NjE4LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5v
ZGUoKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgpKTsK
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xkTm9k
ZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvbGROb2RlLT5hc0pTVmFsdWUoKTsKICAgICAg
ICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBA
IC0xNzQxLDcgKzE3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTm9kZSogc2hp
ZnRBbW91bnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIFNwZWNJbnQzMiwgSlNDb25zdGFudCwgbm9kZS0+b3JpZ2luLAotICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KGpzTnVtYmVyKGxv
Z0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6
ZShqc051bWJlcihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBXZSBjYW4gdXNlIGEgQml0TFNoaWZ0IGhlcmUgYmVjYXVzZSB0eXBlZCBhcnJheXMgd2lsbCBu
ZXZlciBoYXZlIGEgYnl0ZUxlbmd0aAogICAgICAgICAvLyB0aGF0IG92ZXJmbG93cyBpbnQzMi4K
QEAgLTE5MTUsNyArMTkxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwogICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+
b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnROdW1iZXIo
KSkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnQoKSkpOwogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRnJvemVu
VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKQor
eworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1cm4gJmVtcHR5OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRnJvemVuVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdGcm96ZW5WYWx1ZV9oCisjZGVmaW5lIERGR0Zyb3plblZhbHVlX2gKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2NsYXNzIEdyYXBoOworCitjbGFzcyBGcm96ZW5WYWx1ZSB7CitwdWJsaWM6CisgICAg
RnJvemVuVmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwg
bV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgIH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShKU1Zh
bHVlIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9zdHJ1Y3R1
cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpOworICAgIH0KKyAgICAKKyAg
ICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAg
ICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoISF2YWx1ZSAm
JiB2YWx1ZS5pc0NlbGwoKSkgPT0gISFzdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlQoIXZhbHVl
IHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkgPT0gc3Ry
dWN0dXJlLT5jbGFzc0luZm8oKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBGcm96ZW5WYWx1
ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlOyB9CisgICAgCisgICAgdm9pZCBtYXJrU3Ryb25nbHkoKQorICAgIHsKKyAg
ICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9z
dHJvbmcgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Ryb25nbHlNYXJrZWQoKSBj
b25zdCB7IHJldHVybiBtX3N0cm9uZzsgfQorICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKG91dCwgY29udGV4dCwg
bV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEg
dXRpbGl0eSBtZXRob2QgZm9yIERGRzo6R3JhcGg6OmZyZWV6ZSgpLiBZb3Ugc2hvdWxkIGFsbW9z
dCBhbHdheXMgY2FsbAorICAgIC8vIEdyYXBoOjpmcmVlemUoKSBkaXJlY3RseS4gQ2FsbGluZyB0
aGlzIGluc3RlYWQgb2YgR3JhcGg6OmZyZWV6ZSgpIGNhbiByZXN1bHQgaW4KKyAgICAvLyB0aGUg
c2FtZSBjb25zdGFudCBiZWluZyB2aWV3ZWQgYXMgaGF2aW5nIGRpZmZlcmVudCBzdHJ1Y3R1cmVz
IGR1cmluZyB0aGUgY291cnNlCisgICAgLy8gb2YgY29tcGlsYXRpb24sIHdoaWNoIGNhbiBzb21l
dGltZXMgY2F1c2UgYmFkIHRoaW5ncyB0byBoYXBwZW4uIEZvciBleGFtcGxlLCB3ZQorICAgIC8v
IG1heSBvYnNlcnZlIHRoYXQgb25lIHZlcnNpb24gb2YgdGhlIGNvbnN0YW50IGhhcyBhbiB1bndh
dGNoYWJsZSBzdHJ1Y3R1cmUgYnV0CisgICAgLy8gdGhlbiBhIGxhdGVyIHZlcnNpb24gbWF5IHN0
YXJ0IHRvIGhhdmUgYSB3YXRjaGFibGUgc3RydWN0dXJlIGR1ZSB0byBhIHRyYW5zaXRpb24uCisg
ICAgLy8gVGhlIHBvaW50IG9mIGZyZWV6aW5nIGlzIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxs
eSBvbmx5IHNlZSBvbmUgdmVyc2lvbiBvZgorICAgIC8vIGNvbnN0YW50cywgYnV0IHRoYXQgcmVx
dWlyZXMgZnJlZXppbmcgdGhyb3VnaCB0aGUgR3JhcGguCisgICAgc3RhdGljIEZyb3plblZhbHVl
IGZyZWV6ZShKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyb3plblZhbHVl
KAorICAgICAgICAgICAgdmFsdWUsICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSA/IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA6IG51bGxwdHIpOworICAgIH0KKworICAgIEpTVmFsdWUg
bV92YWx1ZTsKKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIGJvb2wgbV9zdHJvbmc7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3plblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3
IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYKICAgICAsIG1fY29k
ZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9j
b2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0
ZS5tX2FsbG9jYXRvcikKLSAgICAsIG1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzKE9wZXJhbmRz
TGlrZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzKQorICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKE9w
ZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVzKQogICAgICwgbV9oYXNBcmd1bWVudHMo
ZmFsc2UpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwoMCkKICAgICAsIG1fbWFjaGluZUNhcHR1
cmVTdGFydChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQpAQCAtNzEsOCArNzEsOCBA
QCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiB7CiAgICAgQVNTRVJU
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFu
ZGxlQWJzdHJhY3RWYWx1ZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX211c3RIYW5kbGVBYnN0
cmFjdFZhbHVlc1tpXS5zZXRNb3N0U3BlY2lmaWMoKnRoaXMsIHBsYW4ubXVzdEhhbmRsZVZhbHVl
c1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
aS0tOykKKyAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXplKHBsYW4ubXVzdEhh
bmRsZVZhbHVlc1tpXSk7CiB9CiAKIEdyYXBoOjp+R3JhcGgoKQpAQCAtMTc4LDcgKzE3OCw2IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAvLyAoNSkgVGhl
IGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLiBUaGUgbWF5IGJlIG9mIHRoZSBmb3JtOgogICAg
IC8vICAgICAgICAgQCMgICAtIGEgTm9kZUluZGV4IHJlZmVyZW5jaW5nIGEgcHJpb3Igbm9kZSBp
biB0aGUgZ3JhcGguCiAgICAgLy8gICAgICAgICBhcmcjIC0gYW4gYXJndW1lbnQgbnVtYmVyLgot
ICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29u
c3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZv
ciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlk
IyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29k
ZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMg
ZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9u
IHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3Bl
cmF0aW9ucy4KICAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlLT5pbmRl
eCgpLCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwpAQCAtMjI1LDggKzIyNCw4IEBAIHZvaWQgR3JhcGg6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBw
b2ludGVyRHVtcEluQ29udGV4dChub2RlLT50cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICAgICBp
ZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5j
dGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiKTsKLSAgICAgICAgaWYg
KG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKLSAgICAg
ICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5m
dW5jdGlvbigpKTsKKyAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxs
KCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpLT52YWx1
ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24o
KSkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxob3N0IGZ1bmN0aW9uPiIpOwogICAgICAg
ICAgICAgZWxzZQpAQCAtMzA2LDcgKzMwNSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwg
IjpbIik7CiAgICAgICAgIENvbW1hUHJpbnRlciBhbm90aGVyQ29tbWE7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5udW1Db25zdGFudHMoKTsgKytpKQotICAgICAgICAg
ICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgaW5Db250ZXh0KG1fY29kZUJsb2NrLT5jb25zdGFu
dEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpW2ldLCBjb250ZXh0KSk7CisgICAgICAgICAg
ICBvdXQucHJpbnQoYW5vdGhlckNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChmcmVlemUobV9j
b2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSlbaV0pLCBjb250
ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiXSIpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFz
SW5kZXhpbmdUeXBlKCkpCkBAIC0zMjMsMTMgKzMyMiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQo
SlNWYWx1ZShub2RlLT50eXBlZEFycmF5KCkpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhh
c1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihu
b2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICIkIiwgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAg
b3V0LnByaW50KCIgPSAiLCBpbkNvbnRleHQodmFsdWUsIGNvbnRleHQpKTsKLSAgICB9Ci0gICAg
aWYgKG9wID09IFdlYWtKU0NvbnN0YW50KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1Bv
aW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkpLCAiICgiLCBpbkNvbnRleHQoKm5vZGUtPndlYWtD
b25zdGFudCgpLT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7CisgICAgaWYgKG5vZGUtPmlz
Q29uc3RhbnQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4
dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJUOiIsICpub2RlLT50YXJnZXRCbG9jaygpKTsKICAg
ICBpZiAobm9kZS0+aXNCcmFuY2goKSkKQEAgLTc5Miw5ICs3ODYsNyBAQCB1bnNpZ25lZCBHcmFw
aDo6cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yCiAKIEpTQWN0aXZhdGlvbiogR3JhcGg6OnRyeUdl
dEFjdGl2YXRpb24oTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmhhc0NvbnN0YW50KCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlv
bio+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICByZXR1cm4gbm9kZS0+ZHluYW1pY0Nh
c3RDb25zdGFudDxKU0FjdGl2YXRpb24qPigpOwogfQogCiBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJzKE5vZGUqIG5vZGUpCkBAIC04MDksMTMgKzgwMSwx
MSBAQCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0CiAKIEpTQXJyYXlC
dWZmZXJWaWV3KiBHcmFwaDo6dHJ5R2V0Rm9sZGFibGVWaWV3KE5vZGUqIG5vZGUpCiB7Ci0gICAg
aWYgKCFub2RlLT5oYXNDb25zdGFudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBKU0FycmF5
QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1
ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBub2Rl
LT5keW5hbWljQ2FzdENvbnN0YW50PEpTQXJyYXlCdWZmZXJWaWV3Kj4oKTsKICAgICBpZiAoIXZp
ZXcpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAo
IXZpZXctPmxlbmd0aCgpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgcmV0dXJuIHZpZXc7CiB9CkBAIC04
MzIsOCArODIyLDI1IEBAIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6dHJ5R2V0Rm9sZGFibGUK
ICAgICByZXR1cm4gdHJ5R2V0Rm9sZGFibGVWaWV3KGNoaWxkKG5vZGUsIDApLm5vZGUoKSwgbm9k
ZS0+YXJyYXlNb2RlKCkpOwogfQogCit2b2lkIEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygp
Cit7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnJlc2l6ZSgwKTsKKyAgICBmb3IgKEZy
b3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZS0+
aXNTdHJvbmdseU1hcmtlZCgpKQorICAgICAgICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50
KHZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPnZhbHVlKCkuaXNDZWxs
KCkpCisgICAgICAgICAgICBtX3BsYW4ud2Vha1JlZmVyZW5jZXMuYWRkTGF6aWx5KHZhbHVlLT52
YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICB9CisgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNo
cmlua1RvRml0KCk7Cit9CisKIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiB7CisgICAgZm9yIChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVl
cykgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YWx1
ZS0+dmFsdWUoKSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIodmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICB9CisgICAgCiAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAo
IWJsb2NrKQpAQCAtODQzLDE1ICs4NTAsNiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRl
eCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAg
ICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1
ZSh2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5mdW5j
dGlvbigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIobm9kZS0+ZXhlY3V0YWJsZSgpKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKQEAgLTkwOSw2ICs5MDcsNDYgQEAgdm9pZCBHcmFwaDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgIH0KIH0KIAorRnJvemVuVmFsdWUqIEdyYXBoOjpm
cmVlemUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIXZhbHVlKSkKKyAgICAg
ICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOworICAgIAorICAgIGF1dG8g
cmVzdWx0ID0gbV9mcm96ZW5WYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgbnVs
bHB0cik7CisgICAgaWYgKExJS0VMWSghcmVzdWx0LmlzTmV3RW50cnkpKQorICAgICAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IG1fZnJvemVuVmFsdWVzLmFkZChGcm96ZW5WYWx1ZTo6ZnJlZXplKHZhbHVl
KSk7Cit9CisKK0Zyb3plblZhbHVlKiBHcmFwaDo6ZnJlZXplU3Ryb25nbHkoSlNWYWx1ZSB2YWx1
ZSkKK3sKKyAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gZnJlZXplKHZhbHVlKTsKKyAgICByZXN1
bHQtPm1hcmtTdHJvbmdseSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGg6
OmNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpKQorICAgICAgICBhc3NlcnRJc1dhdGNoZWQodmFsdWUt
PnN0cnVjdHVyZSgpKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAg
ZGV0aHJlYWQoKTsKKyAgICBlbHNlCisgICAgICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCp0aGlzKSk7CisgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQodmFsdWUpOwor
fQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZh
bHVlKQoreworICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIGZyZWV6ZSh2YWx1ZSkpOworfQor
Cit2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKQoreworICAgIGNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIGZyZWV6ZVN0cm9uZ2x5KHZh
bHVlKSk7Cit9CisKIHZvaWQgR3JhcGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkRGR0FyZ3VtZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0Zy
b3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJE
RkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCkBAIC0xNDQsNDMgKzE0NSwx
NSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRldGhyZWFkKCk7CiAgICAgCi0gICAgdm9pZCBjb252
ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKLSAgICB7
Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2FsKQotICAgICAgICAgICAgZGV0aHJl
YWQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJs
ZUFjY2Vzc0RhdGEoKnRoaXMpKTsKLSAgICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29u
c3RhbnROdW1iZXIpOwotICAgIH0KKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFs
dWUpOworICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmdseShKU1ZhbHVlIHZhbHVlKTsgLy8g
U2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUpLT5tYXJrU3Ryb25nbHkoKS4KICAgICAKLSAgICB1
bnNpZ25lZCBjb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50UmVnaXN0ZXI7Ci0gICAgICAgIGlmICghbV9jb2Rl
QmxvY2stPmZpbmRDb25zdGFudCh2YWx1ZSwgY29uc3RhbnRSZWdpc3RlcikpIHsKLSAgICAgICAg
ICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsK
LSAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQoCi0gICAg
ICAgICAgICAgICAgbV9wbGFuLndyaXRlQmFycmllcnMsCi0gICAgICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50UmVnaXN0ZXJdLAotICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLAotICAgICAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIsCi0gICAgICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHZh
bHVlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKLSAgICB9
CisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFs
dWUpOworICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1
ZSk7CisgICAgdm9pZCBjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVl
IHZhbHVlKTsKICAgICAKICAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1Zh
bHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAg
ICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IGlmICh2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0Nv
bnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udmVy
dFRvQ29uc3RhbnQobm9kZSwgY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KHZhbHVlKSk7Ci0g
ICAgfQotCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0
aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCksIER1bXBDb250ZXh0
KiA9IDApOwogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVt
cEFsbFBoaXMgfTsKQEAgLTE5NCwxMSArMTY3LDYgQEAgcHVibGljOgogICAgIC8vIHByZWNlZGlu
ZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQuCiAgICAgYm9vbCBk
dW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJl
dmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpOwogCi0g
ICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUqIG5vZGUpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+dmFsdWVPZkpT
Q29uc3RhbnQobV9jb2RlQmxvY2spKTsKLSAgICB9Ci0gICAgCiAgICAgQWRkU3BlY3VsYXRpb25N
b2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0
ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIpCiAgICAgewogICAgICAgICBB
U1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBh
ZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwpAQCAtMzAzLDg4ICsyNzEsNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFm
dGVyQ2FwdHVyZShhcmd1bWVudCkpOwogICAgIH0KICAgICAKLSAgICAvLyBIZWxwZXIgbWV0aG9k
cyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2Rl
KiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7Ci0gICAg
fQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1
cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQo
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQo
bV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJs
b2NrKTsKLSAgICB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7Ci0g
ICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQot
ICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICgh
aXNKU0NvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiB2
YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwotICAgIH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25z
dGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2
YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0
YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpIHx8ICF2YWx1
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFs
dWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmICghY2VsbC0+aW5oZXJpdHMoSW50ZXJuYWxGdW5jdGlv
bjo6aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJv
bSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwot
ICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAg
ICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYWx1ZSBp
c24ndCBpbnQzMjogIiwgdmFsdWUsICJcbiIpOwotICAgICAgICAgICAgZHVtcCgpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNv
bnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkuYXNOdW1iZXIoKTsKLSAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0
YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQo
bm9kZSkuYXNCb29sZWFuKCk7Ci0gICAgfQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0g
Z2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIEFTU0VSVChm
dW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKTsK
LSAgICB9Ci0KICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAK
ICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVjdHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCkKQEAgLTgwMiw2ICs2ODgsOCBAQCBwdWJsaWM6CiAgICAgSlNBcnJheUJ1ZmZl
clZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2RlKiwgQXJyYXlNb2RlKTsKICAgICBKU0FycmF5
QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKE5vZGUqKTsKICAgICAKKyAg
ICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICAKICAgICBOT19SRVRVUk5f
RFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKQEAgLTgxNSwxMCArNzAz
LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAot
ICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzOwor
ICAgIE9wZXJhbmRzPEZyb3plblZhbHVlKj4gbV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAg
IFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVk
Z2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOworCisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwg
RnJvemVuVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0
cz4gbV9mcm96ZW5WYWx1ZU1hcDsKKyAgICBCYWc8RnJvemVuVmFsdWU+IG1fZnJvemVuVmFsdWVz
OworICAgIAogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0
YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3Rv
cjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKQEAgLTg2MSw3
ICs3NTMsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS0+aGFz
Q29uc3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0g
aW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIEpTVmFs
dWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAo
IWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1
bGF0ZUludDMyOwogICAgICAgICAKQEAgLTg3OCwzMCArNzcwLDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiBieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRo
Tm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50MzJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRT
cGVjdWxhdGVJbnQzMjsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRT
cGVjdWxhdGVJbnQzMihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFudCgpKTsKLSAgICAg
ICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZK
U0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0lu
dDMyKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAo
IXZhcmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFyaXRobWV0aWMoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRl
ID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwotICAgICAgICAvLyBEb3VibGVzIGhhdmUgYSA1
MyBiaXQgbWFudGlzc2Egc28gd2UgZXhwZWN0IGEgbXVsdGlwbGljYXRpb24gb2YgMl4zMSAodGhl
IGhpZ2hlc3QKLSAgICAgICAgLy8gbWFnbml0dWRlIHBvc3NpYmxlIGludDMyIHZhbHVlKSBhbmQg
YW55IHZhbHVlIGxlc3MgdGhhbiAyXjIyIHRvIG5vdCByZXN1bHQgaW4gYW55Ci0gICAgICAgIC8v
IHJvdW5kaW5nIGluIGEgZG91YmxlIG11bHRpcGxpY2F0aW9uIC0gaGVuY2UgaXQgd2lsbCBiZSBl
cXVpdmFsZW50IHRvIGFuIGludGVnZXIKLSAgICAgICAgLy8gbXVsdGlwbGljYXRpb24sIGlmIHdl
IGFyZSBkb2luZyBpbnQzMiB0cnVuY2F0aW9uIGFmdGVyd2FyZHMgKHdoaWNoIGlzIHdoYXQKLSAg
ICAgICAgLy8gY2FuU3BlY3VsYXRlSW50MzIoKSBpbXBsaWVzKS4KLSAgICAgICAgY29uc3QgaW50
MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKLSAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAt
dHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJl
dHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFy
aXRoTm9kZUZsYWdzKCkpOwotCi0gICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMy
KCk7Ci0gICAgfQogfTsKIAogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwg
bm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTIgKzE1MSwxMyBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50
cnlCeXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVBYnN0cmFjdFZhbHVlcy5zaXplKCk7
ICsraSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZUFi
c3RyYWN0VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9y
SW5kZXgoaSk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgu
bV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXNbaV07CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IHZhbHVlOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKG1fZ3JhcGgsICptX2dy
YXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBh
YnN0cmFjdFZhbHVlID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpOwogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZs
dXNoRm9ybWF0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlv
blNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0
aW9uU2V0LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDIzICs2MiwyMSBAQCBwdWJs
aWM6CiAgICAgfQogICAgIAogICAgIE5vZGUqIGluc2VydENvbnN0YW50KAotICAgICAgICBzaXpl
X3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLAorICAgICAgICBzaXpl
X3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsCiAgICAgICAg
IE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0
YW50UmVnID0KLSAgICAgICAgICAgIG1fZ3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50
KHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleCwg
c3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpLCBvcCwgb3JpZ2luLCBPcEluZm8oY29uc3RhbnRS
ZWcpKTsKKyAgICAgICAgICAgIGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS0+dmFs
dWUoKSksIG9wLCBvcmlnaW4sIE9wSW5mbyh2YWx1ZSkpOwogICAgIH0KICAgICAKICAgICBOb2Rl
KiBpbnNlcnRDb25zdGFudCgKLSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdp
biwgSlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgICAgICBzaXpl
X3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBl
IG9wID0gSlNDb25zdGFudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudChp
bmRleCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgb3ApOwogICAgIH0KICAgICAKICAgICBF
ZGdlIGluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmln
aW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIHNpemVf
dCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwgVXNlS2luZCB1
c2VLaW5kKQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3A7CiAgICAgICAgIGlmIChpc0RvdWJs
ZSh1c2VLaW5kKSkKQEAgLTkxLDcgKzg5LDI3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAg
RWRnZSBpbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2RlT3Jp
Z2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICBzaXpl
X3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsIFVzZUtpbmQg
dXNlS2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudEZvclVzZShpbmRl
eCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgdXNlS2luZCk7CisgICAgfQorCisgICAgTm9k
ZSogaW5zZXJ0Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1
ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGluc2VydENvbnN0YW50KGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwgb3Ap
OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIENv
ZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQp
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgsIG9yaWdpbiwgbV9n
cmFwaC5mcmVlemUodmFsdWUpLCBvcCk7CisgICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29u
c3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1
ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50
Rm9yVXNlKGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwgdXNlS2luZCk7Cisg
ICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBD
b2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBOb2RlT3JpZ2luKG9y
aWdpbiksIHZhbHVlLCB1c2VLaW5kKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNw
cAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRl
Z2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxMSArMzEx
LDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gQXJp
dGg6OkNoZWNrT3ZlcmZsb3cKICAgICAgICAgICAgICAgICAmJiBub2RlLT5hcml0aE1vZGUoKSAh
PSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybykKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJD
b25zdGFudCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIFJh
bmdlS2V5QW5kQWRkZW5kKAogICAgICAgICAgICAgICAgIFJhbmdlS2V5OjphZGRpdGlvbihub2Rl
LT5jaGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIo
KS0+YXNJbnQzMigpKTsKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IENoZWNrSW5Cb3VuZHM6IHsKQEAgLTMyNSwxNSArMzI1LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIEVkZ2UgaW5kZXggPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50KGluZGV4Lm5vZGUo
KSkpIHsKKyAgICAgICAgICAgIGlmIChpbmRleC0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAg
ICAgICAgICAgICBzb3VyY2UgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgYWRkZW5kID0gbV9n
cmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChpbmRleC5ub2RlKCkpOworICAgICAgICAgICAgICAg
IGFkZGVuZCA9IGluZGV4LT5hc0ludDMyKCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKAogICAg
ICAgICAgICAgICAgIGluZGV4LT5vcCgpID09IEFyaXRoQWRkCiAgICAgICAgICAgICAgICAgJiYg
aW5kZXgtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKLSAgICAgICAgICAgICAgICAmJiBtX2dy
YXBoLmlzSW50MzJDb25zdGFudChpbmRleC0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAg
ICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgICAgIHNvdXJjZSA9IGluZGV4LT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBhZGRlbmQg
PSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGluZGV4LT5jaGlsZDIoKS5ub2RlKCkpOwor
ICAgICAgICAgICAgICAgIGFkZGVuZCA9IGluZGV4LT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBpbmRleDsKICAgICAg
ICAgICAgICAgICBhZGRlbmQgPSAwOwpAQCAtMzQxLDcgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVuZChSYW5nZUtleTo6
YXJyYXlCb3VuZHMoc291cmNlLCBrZXkpLCBhZGRlbmQpOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAjaWYgVVNFKEpTVkFMVUUz
Ml82NCkKICAgICBtX2ppdENvZGUtPmNvbW1vbi5kb3VibGVDb25zdGFudHMgPSBzdGQ6Om1vdmUo
bV9ncmFwaC5tX2RvdWJsZUNvbnN0YW50cyk7CiAjZW5kaWYKKyAgICAKKyAgICBtX2dyYXBoLnJl
Z2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7CiAg
ICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNo
RGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NiwxNCArMzYsMTQgQEAgSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwog
ewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICBy
ZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2Fz
ZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3Rl
clN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKICAg
ICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdS5zdHJpbmdJbXBsKTsKICAgICB9CiAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdmFsdWUoKTsKKyAgICByZXR1
cm4gSlNWYWx1ZSgpOwogfQogCiBzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1NpbmdsZUNoYXJhY3Rl
cihKU1ZhbHVlIHZhbHVlLCBVQ2hhciBjaGFyYWN0ZXIpCkBAIC04MSwxMSArODEsMTEgQEAgVHJp
U3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgIGNhc2UgS25vd25WYWx1
ZToKICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZh
bHVlOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSgp
LCBvdGhlci52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpwdXJlU3RyaWN0
RXF1YWwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIudmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgICAg
IGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9T
aW5nbGVDaGFyYWN0ZXIodmFsdWUoKSwgb3RoZXIuY2hhcmFjdGVyKCkpOworICAgICAgICAgICAg
cmV0dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuY2hh
cmFjdGVyKCkpOwogICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKLSAgICAgICAgICAgIHJl
dHVybiBlcXVhbFRvU3RyaW5nSW1wbCh2YWx1ZSgpLCBvdGhlci5zdHJpbmdJbXBsKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJpbmdJbXBsKHZhbHVlKCktPnZhbHVlKCksIG90aGVy
LnN0cmluZ0ltcGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTaW5n
bGVDaGFyYWN0ZXJTdHJpbmc6CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6
ZHVtcEluQ29udGV4dChQcmludFN0cgogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2Fz
ZSBLbm93blZhbHVlOgotICAgICAgICB2YWx1ZSgpLmR1bXBJbkNvbnRleHQob3V0LCBjb250ZXh0
KTsKKyAgICAgICAgdmFsdWUoKS0+ZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOwogICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIG91dC5w
cmludCgiTGF6eTpTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4
LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiSlNDSlNWYWx1
ZS5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00NCwxMCAr
NDQsMTAgQEAgZW51bSBMYXppbmVzc0tpbmQgewogCiBjbGFzcyBMYXp5SlNWYWx1ZSB7CiBwdWJs
aWM6Ci0gICAgTGF6eUpTVmFsdWUoSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICBMYXp5
SlNWYWx1ZShGcm96ZW5WYWx1ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24o
KSkKICAgICAgICAgOiBtX2tpbmQoS25vd25WYWx1ZSkKICAgICB7Ci0gICAgICAgIHUudmFsdWUg
PSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICB1LnZhbHVlID0gdmFsdWU7CiAgICAg
fQogICAgIAogICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNo
YXIgY2hhcmFjdGVyKQpAQCAtNjYsMTkgKzY2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSB0cnlHZXRWYWx1ZSgpIGNvbnN0Cisg
ICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdyYXBoJikgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChtX2tpbmQgPT0gS25vd25WYWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZSgpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
CiAgICAgCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShWTSYpIGNvbnN0OwogICAgIAotICAgIEpTVmFs
dWUgdmFsdWUoKSBjb25zdAorICAgIEZyb3plblZhbHVlKiB2YWx1ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV9raW5kID09IEtub3duVmFsdWUpOwotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZGVjb2RlKHUudmFsdWUpOworICAgICAgICByZXR1cm4gdS52YWx1ZTsKICAgICB9CiAg
ICAgCiAgICAgVUNoYXIgY2hhcmFjdGVyKCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIGZvciBhIGtpbmQgb2YgdmFsdWUgdGhhdCBjYW4ndC4KICAgICAgICAg
c3dpdGNoIChtX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAg
cmV0dXJuIHZhbHVlKCkuYXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZh
bHVlKCkuYXNJbnQzMigpOwogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAg
ICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIoKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExNiw3
ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHVuaW9uIHsKLSAgICAgICAg
RW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZTsKICAgICAg
ICAgVUNoYXIgY2hhcmFjdGVyOwogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsOwogICAg
IH0gdTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9k
ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWluaWZpZWROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksMTAgKzM5LDgg
QEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUoTm9kZQogICAgIE1pbmlmaWVk
Tm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1faWQgPSBNaW5pZmllZElEKG5vZGUpOwogICAgIHJl
c3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAgICBpZiAoaGFzQ29uc3RhbnROdW1iZXIobm9kZS0+
b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOwot
ICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0
Lm1faW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgpKTsK
KyAgICBpZiAoaGFzQ29uc3RhbnQobm9kZS0+b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8g
PSBKU1ZhbHVlOjplbmNvZGUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAg
ICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKTsKICAgICAgICAgcmVzdWx0
Lm1faW5mbyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVk
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZp
ZWROb2RlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDYgQEAgaW5saW5lIGJv
b2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKLSAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTU5LDIyICs1OCwxMSBAQCBwdWJsaWM6CiAgICAg
TWluaWZpZWRJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgp
IGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICAKLSAgICBib29sIGhhc0NvbnN0YW50KCkgY29u
c3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQor
ICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudChtX29wKTsg
fQogICAgIAotICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBoYXND
b25zdGFudE51bWJlcihtX29wKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVy
KCkgY29uc3QKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFT
U0VSVChoYXNDb25zdGFudE51bWJlcihtX29wKSk7Ci0gICAgICAgIHJldHVybiBtX2luZm87Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaGFzV2Vha0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFz
V2Vha0NvbnN0YW50KG1fb3ApOyB9Ci0gICAgCi0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25zdGFudChtX29wKSk7Ci0gICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZvKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+KG1faW5mbykpOwog
ICAgIH0KICAgICAKICAgICBzdGF0aWMgTWluaWZpZWRJRCBnZXRJRChNaW5pZmllZE5vZGUqIG5v
ZGUpIHsgcmV0dXJuIG5vZGUtPmlkKCk7IH0KQEAgLTg0LDE3ICs3MiwxMyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihO
b2RlVHlwZSB0eXBlKQorICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50KE5vZGVUeXBlIHR5cGUp
CiAgICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50IHx8IHR5cGUgPT0gSW50
NTJDb25zdGFudCB8fCB0eXBlID09IERvdWJsZUNvbnN0YW50OwogICAgIH0KLSAgICBzdGF0aWMg
Ym9vbCBoYXNXZWFrQ29uc3RhbnQoTm9kZVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0eXBlID09IFdlYWtKU0NvbnN0YW50OwotICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1f
aWQ7Ci0gICAgdWludHB0cl90IG1faW5mbzsKKyAgICB1aW50NjRfdCBtX2luZm87CiAgICAgTm9k
ZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDA2LDExICs0MDYsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dlYWtDb25zdGFudCgpCi0gICAgewotICAgICAg
ICByZXR1cm4gb3AoKSA9PSBXZWFrSlNDb25zdGFudDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBp
c1BoYW50b21Bcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gUGhhbnRv
bUFyZ3VtZW50czsKQEAgLTQyMiw3ICs0MTcsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNh
c2UgSlNDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2Fz
ZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgICAgICBj
YXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ZGVmYXVsdDoKQEAgLTQzMCwxMyArNDI0LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkKKyAgICBGcm96ZW5WYWx1ZSog
Y29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7Ci0gICAgICAg
IHJldHVybiBtX29wSW5mbzsKKyAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KCkpOworICAgICAg
ICBpZiAob3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIEZyb3pl
blZhbHVlOjplbXB0eVNpbmdsZXRvbigpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEZy
b3plblZhbHVlKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0Nv
bnN0YW50KHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIC8vIERvbid0IGNhbGwgdGhpcyBk
aXJlY3RseSAtIHVzZSBHcmFwaDo6Y29udmVydFRvQ29uc3RhbnQoKSBpbnN0ZWFkIQorICAgIHZv
aWQgY29udmVydFRvQ29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAg
aWYgKGhhc0RvdWJsZVJlc3VsdCgpKQogICAgICAgICAgICAgbV9vcCA9IERvdWJsZUNvbnN0YW50
OwpAQCAtNDQ1LDE1ICs0NDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIG1fb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAg
IG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7Ci0gICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7Ci0g
ICAgfQotICAgIAotICAgIHZvaWQgY29udmVydFRvV2Vha0NvbnN0YW50KEpTQ2VsbCogY2VsbCkK
LSAgICB7Ci0gICAgICAgIG1fb3AgPSBXZWFrSlNDb25zdGFudDsKLSAgICAgICAgbV9mbGFncyAm
PSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9kZUNsb2JiZXJzV29y
bGQpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpOwor
ICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICAg
ICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCkBAIC01MTgsNTIgKzUwNyw3NyBAQCBz
dHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3AgPSBUb1N0cmluZzsKICAgICB9CiAgICAgCi0gICAg
SlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQorICAgIEpTVmFsdWUgYXNKU1ZhbHVlKCkKICAgICB7Ci0g
ICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsKLSAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxKU0NlbGwqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiBjb25zdGFudCgp
LT52YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENv
ZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KCkKICAgICB7Ci0g
ICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUod2Vha0NvbnN0YW50KCkpOwotICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0
ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsK
LSAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOyAvLyBIYXZlIHRvIHJldHVy
biBzb21ldGhpbmcgaW4gcmVsZWFzZSBtb2RlLgotICAgICAgICB9CisgICAgICAgIHJldHVybiBp
c0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0ludDMyKCk7CiAgICAgfQotCi0g
ICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgCisgICAg
aW50MzJfdCBhc0ludDMyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYg
dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0ludDMyKCk7CisgICAgICAgIHJldHVybiBh
c0pTVmFsdWUoKS5hc0ludDMyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNEb3VibGVDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB1aW50MzJfdCBhc1VJbnQzMigpCiAgICAg
ewotICAgICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFu
dChjb2RlQmxvY2spLmlzRG91YmxlKCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAg
ICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChjb2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c051bWJlckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNEb3VibGVD
b25zdGFudCgpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2
YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzTnVtYmVyKCk7Ci0gICAgICAgIEFTU0VSVChy
ZXN1bHQgPT0gKGlzSW50MzJDb25zdGFudChjb2RlQmxvY2spIHx8IGlzRG91YmxlQ29uc3RhbnQo
Y29kZUJsb2NrKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaXND
b25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNEb3VibGUoKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc051bWJlckNvbnN0YW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0Nv
bnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc051bWJlcigpOworICAgIH0KKyAgICAK
KyAgICBkb3VibGUgYXNOdW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzSlNWYWx1ZSgp
LmFzTnVtYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNNYWNoaW5lSW50Q29uc3RhbnQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1
ZSgpLmlzTWFjaGluZUludCgpOworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IGFzTWFjaGluZUlu
dCgpCisgICAgeworICAgICAgICByZXR1cm4gYXNKU1ZhbHVlKCkuYXNNYWNoaW5lSW50KCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQm9vbGVhbigpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGFzQm9vbGVhbigpCisgICAgeworICAgICAgICByZXR1cm4g
Y29uc3RhbnQoKS0+dmFsdWUoKS5hc0Jvb2xlYW4oKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c0NlbGxDb25zdGFudCgpCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNv
bnN0YW50KCktPnZhbHVlKCkuaXNDZWxsKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogYXND
ZWxsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1ZSgpLmFzQ2VsbCgp
OwogICAgIH0KICAgICAKLSAgICBib29sIGlzQm9vbGVhbkNvbnN0YW50KENvZGVCbG9jayogY29k
ZUJsb2NrKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCBkeW5hbWljQ2FzdENvbnN0
YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29u
c3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgaWYgKCFpc0NlbGxDb25zdGFu
dCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBqc0R5bmFt
aWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjb250YWluc01vdkhp
bnQoKQpAQCAtMTAxNiwxMSArMTAzMCwxMSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBKU0NlbGwqIGZ1bmN0aW9uKCkKKyAgICBGcm96ZW5WYWx1ZSogZnVuY3Rpb24o
KQogICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0Z1bmN0aW9uKCkpOwotICAgICAgICBKU0NlbGwq
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGdW5jdGlvbio+KG1fb3BJbmZvKTsKLSAgICAg
ICAgQVNTRVJUKEpTVmFsdWUocmVzdWx0KS5pc0Z1bmN0aW9uKCkpOworICAgICAgICBGcm96ZW5W
YWx1ZSogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJbmZvKTsK
KyAgICAgICAgQVNTRVJUKHJlc3VsdC0+dmFsdWUoKS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKERvdWJsZUNvbnN0YW50LCBO
b2RlUmVzdWx0RG91YmxlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oSW50NTJDb25z
dGFudCwgTm9kZVJlc3VsdEludDUyIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAotICAgIC8q
IEEgY29uc3RhbnQgbm90IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sLiBVc2VzIGdl
dCBwYXRjaGVkIHRvIGp1bXBzIHRoYXQgZXhpdCB0aGUgKi9cCi0gICAgLyogY29kZSBibG9jay4g
Ki9cCi0gICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVEb2VzTm90
RXhpdCkgXAotICAgIFwKICAgICAvKiBNYXJrZXIgdG8gaW5kaWNhdGUgdGhhdCBhbiBvcGVyYXRp
b24gd2FzIG9wdGltaXplZCBlbnRpcmVseSBhbmQgYWxsIHRoYXQgaXMgbGVmdCAqL1wKICAgICAv
KiBpcyB0byBtYWtlIG9uZSBub2RlIGFsaWFzIGFub3RoZXIuIENTRSB3aWxsIGxhdGVyIHVzdWFs
bHkgZWxpbWluYXRlIHRoaXMgbm9kZSwgKi9cCiAgICAgLyogdGhvdWdoIGl0IG1heSBjaG9vc2Ug
bm90IHRvIGlmIGl0IHdvdWxkIGNvcnJ1cHQgcHJlZGljdGlvbnMgKHZlcnkgcmFyZSkuICovXApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
LmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQg
Y29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4
aXQoCiAgICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0
YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4
aXQubV9raW5kLCBpc1dhdGNocG9pbnQoZXhpdC5tX2tpbmQpKTsKKyAgICAgICAgICAgICAgICBl
eGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwogICAg
ICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhl
bHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9maWxlckV4aXQtPmNvdW50ZXJBZGRyZXNzKCkpKTsK
ICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDkgKzEzNSw4IEBAIHByaXZh
dGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgICAKICAgICAgICAgc3dp
dGNoIChvcCkgewotICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzcGVjdWxhdGlv
bkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKHR5cGUg
PT0gU3BlY0ludDUyQXNEb3VibGUgJiYgZW5hYmxlSW50NTIoKSkKICAgICAgICAgICAgICAgICB0
eXBlID0gU3BlY0ludDUyOwogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHR5
cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDYgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBUb1RoaXM6CiAg
ICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCwyMSArODAsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVk
Z2UgCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdl
LT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uu
bm9kZSgpKSkgewotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBn
cHIsIERhdGFGb3JtYXRKU0ludDMyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShq
c1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJl
YW0sIGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdl
Lm5vZGUoKSkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6Oklt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAg
aW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAg
ICAgIH0KLQorICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0
YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxG
b3JtYXQoKTsKQEAgLTcyNiw3ICs3MTQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVJbnQzCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2Ut
PnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlv
bkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICBpZiAoZWRn
ZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAg
IGlmIChlZGdlLT5oYXNDb25zdGFudCgpICYmICFlZGdlLT5pc0ludDMyQ29uc3RhbnQoKSkgewog
ICAgICAgICAvLyBQcm90ZWN0IHRoZSBzaWxlbnQgc3BpbGwvZmlsbCBsb2dpYyBieSBmYWlsaW5n
IGVhcmx5LiBJZiB3ZSAic3BlY3VsYXRlIiBvbgogICAgICAgICAvLyB0aGUgY29uc3RhbnQgdGhl
biB0aGUgc2lsZW50IGZpbGxlciBtYXkgdGhpbmsgdGhhdCB3ZSBoYXZlIGFuIGludDMyIGFuZCBh
CiAgICAgICAgIC8vIGNvbnN0YW50LCBzbyBpdCB3aWxsIHRyeSB0byBmaWxsIHRoaXMgYXMgYW4g
aW50MzIgY29uc3RhbnQuIEJhZCB0aGluZ3Mgd2lsbApAQCAtNzQyLDggKzczMCw4IEBAIEdQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKIAogICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMy
Q29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7Cisg
ICAgICAgICAgICBBU1NFUlQoZWRnZS0+aXNJbnQzMkNvbnN0YW50KCkpOworICAgICAgICAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZWRnZS0+YXNJbnQzMigpKSwgZ3ByKTsK
ICAgICAgICAgICAgIGluZm8uZmlsbEludDMyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAg
IHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKICAgICAgICAgICAgIHJldHVybiBncHI7
CkBAIC04NzgsNyArODY2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
SW50NQogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERh
dGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhdmFs
dWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpLmlzTWFjaGluZUludCgpKSkgeworICAgICAgICBp
ZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNNYWNoaW5lSW50Q29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAg
ICAgIH0KQEAgLTg4Niw3ICs4NzQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnQ1CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2
YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIEFTU0VSVChqc1ZhbHVlLmlzTWFj
aGluZUludCgpKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlID0ganNW
YWx1ZS5hc01hY2hpbmVJbnQoKTsKQEAgLTk2Nyw5ICs5NTUsOSBAQCBGUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgp
KSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoZWRn
ZS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZw
ckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdl
Lm5vZGUoKSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoZWRnZS0+YXNOdW1iZXIoKSkpLCBn
cHIpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAg
ICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtMTAxMCw3ICs5OTgsNyBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAg
ICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFp
bihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTEwOTEsNyArMTA3OSw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRl
KCk7CiAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpT
VmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYg
KGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNWYWx1ZSkpLCBncHIpOwpAQCAtMTc5MSwxMSArMTc3OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICBtX2pp
dC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPndlYWtDb25zdGFudCgpKTsKLSAgICAgICAgaW5pdENv
bnN0YW50SW5mbyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGNhc2UgSWRl
bnRpdHk6IHsKICAgICAgICAgLy8gQ1NFIHNob3VsZCBhbHdheXMgZWxpbWluYXRlIHRoaXMuCiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTU5LDE4ICsxOTQyLDE4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJp
dEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJ
bnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50
MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwg
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSwgb3AyLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIG5vZGUtPmNoaWxkMSgpLT5hc0lu
dDMyKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50MzJSZXN1
bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmNo
aWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSwgb3AxLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIG5vZGUtPmNoaWxkMigpLT5hc0ludDMy
KCksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50MzJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5ODksMTEgKzE5NzIs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2Ug
Qml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKIAotICAgICAgICAg
ICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDIoKS5ub2RlKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Ao
b3AsIG9wMS5ncHIoKSwgbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKSAmIDB4MWYsIHJlc3VsdC5n
cHIoKSk7CiAKICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAg
ICAgICAgIH0gZWxzZSB7CkBAIC0zNzE5LDcgKzM3MDIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjog
ewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJy
YW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS0+
ZnVuY3Rpb24oKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZEZ1bmN0aW9uLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChmdW5jdGlvbi5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCks
IG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxsKCkpKTsKICAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTM3MzcsOCArMzcyMCw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgQVNTRVJUKG5vZGUt
PnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0
S2luZDsKLSAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50
KQotICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRXZWFrQ29uc3RhbnRDYWNoZTsKKyAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQorICAgICAgICAgICAgZXhpdEtpbmQg
PSBCYWRDb25zdGFudENhY2hlOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBleGl0S2luZCA9
IEJhZENhY2hlOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIwLDcgKzMyMCw3IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMK
ICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgQVNTRVJUKGlz
SlNJbnQzMihpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc0Nv
bnN0YW50KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQobm9kZSkpOwor
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPmlzSW50MzJDb25zdGFudCgpKTsKICAgICAgICAgICAg
IGZpbGxBY3Rpb24gPSBTZXRJbnQzMkNvbnN0YW50OwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwpAQCAtMzM5LDggKzMzOSw3IEBAIFNpbGVu
dFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICB9IGVsc2UgaWYgKHJlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsKSB7CiAgICAgICAgIEFTU0VSVChpbmZvLmdwcigp
ID09IHNvdXJjZSk7CiAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgICAg
ICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZS5pc0NlbGwoKSk7CisgICAgICAgICAgICBub2Rl
LT5hc0NlbGwoKTsgLy8gVG8gZ2V0IHRoZSBhc3NlcnRpb24uCiAgICAgICAgICAgICBmaWxsQWN0
aW9uID0gU2V0Q2VsbENvbnN0YW50OwogICAgICAgICB9IGVsc2UgewogI2lmIFVTRShKU1ZBTFVF
NjQpCkBAIC0zODMsOCArMzgyLDkgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2
ZUpJVDo6cwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09
IHNvdXJjZSk7CiAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAodmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXNDZWxsKCkpCisgICAgICAgICAgICBpZiAo
bm9kZS0+aXNDZWxsQ29uc3RhbnQoKSkKICAgICAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0
VHJ1c3RlZEpTQ29uc3RhbnQ7CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZmls
bEFjdGlvbiA9IFNldEpTQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZSBpZiAoaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXRJbnQzMikgewogICAgICAgICAgICAgQVNTRVJUKHJlZ2lzdGVy
Rm9ybWF0ID09IERhdGFGb3JtYXRKU0ludDMyKTsKQEAgLTQ0Miw3ICs0NDIsNyBAQCBTaWxlbnRS
ZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAgICAgIAogI2lmIFVTRShKU1ZB
TFVFNjQpCiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGlz
TnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICBub2RlLT5hc051bWJlcigpOyAvLyBUbyBn
ZXQgdGhlIGFzc2VydGlvbi4KICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdE5vbmUgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpOwpA
QCAtNDUxLDcgKzQ1MSw3IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6
OnMKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgQVNTRVJUKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkg
ewotICAgICAgICBBU1NFUlQoaXNOdW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUt
PmFzTnVtYmVyKCk7IC8vIFRvIGdldCB0aGUgYXNzZXJ0aW9uLgogICAgICAgICBmaWxsQWN0aW9u
ID0gU2V0RG91YmxlQ29uc3RhbnQ7CiAgICAgfSBlbHNlCiAgICAgICAgIGZpbGxBY3Rpb24gPSBM
b2FkRG91YmxlOwpAQCAtNDk2LDIxICs0OTYsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2ls
ZW50RmlsbChjb25zdCBTaQogICAgIGNhc2UgRG9Ob3RoaW5nRm9yRmlsbDoKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXRJbnQzMkNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZJbnQzMkNvbnN0YW50KHBsYW4ubm9kZSgpKSksIHBsYW4uZ3ByKCkpOworICAgICAg
ICBtX2ppdC5tb3ZlKEltbTMyKHBsYW4ubm9kZSgpLT5hc0ludDMyKCkpLCBwbGFuLmdwcigpKTsK
ICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIFNldEludDUyQ29u
c3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tNjQodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5u
b2RlKCkpLmFzTWFjaGluZUludCgpIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLCBwbGFu
LmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW02NChwbGFuLm5vZGUoKS0+YXNNYWNoaW5l
SW50KCkgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIHBsYW4uZ3ByKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNldFN0cmljdEludDUyQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0
Lm1vdmUoSW1tNjQodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLmFzTWFjaGluZUludCgp
KSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tNjQocGxhbi5ub2RlKCktPmFz
TWFjaGluZUludCgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTZXRCb29sZWFuQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0
Lm1vdmUoVHJ1c3RlZEltbTMyKHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQocGxhbi5ub2RlKCkpKSwg
cGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHBsYW4ubm9kZSgp
LT5hc0Jvb2xlYW4oKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNl
dENlbGxDb25zdGFudDoKLSAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHZhbHVlT2ZK
U0NvbnN0YW50KHBsYW4ubm9kZSgpKS5hc0NlbGwoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIocGxhbi5ub2RlKCktPmFzQ2VsbCgpKSwgcGxhbi5ncHIo
KSk7CiAgICAgICAgIGJyZWFrOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTZXRUcnVz
dGVkSlNDb25zdGFudDoKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
aWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVPZkpTQ29uc3RhbnRB
c0ltbTY0KHBsYW4ubm9kZSgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgU2V0RG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tNjQocmVpbnRlcnBy
ZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChwbGFuLm5vZGUoKSkpKSwgY2Fu
VHJhbXBsZSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tNjQocmVpbnRlcnByZXREb3VibGVUb0lu
dDY0KHBsYW4ubm9kZSgpLT5hc051bWJlcigpKSksIGNhblRyYW1wbGUpOwogICAgICAgICBtX2pp
dC5tb3ZlNjRUb0RvdWJsZShjYW5UcmFtcGxlLCBwbGFuLmZwcigpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBMb2FkMzJQYXlsb2FkQm94SW50OgpAQCAtNTM4LDEwICs1MzgsMTAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQogICAgICAgICBicmVhazsKICNl
bHNlCiAgICAgY2FzZSBTZXRKU0NvbnN0YW50VGFnOgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMy
KHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgpKS50YWcoKSksIHBsYW4uZ3ByKCkpOworICAg
ICAgICBtX2ppdC5tb3ZlKEltbTMyKHBsYW4ubm9kZSgpLT5hc0pTVmFsdWUoKS50YWcoKSksIHBs
YW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEpTQ29uc3RhbnRQYXlsb2Fk
OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgp
KS5wYXlsb2FkKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihwbGFu
Lm5vZGUoKS0+YXNKU1ZhbHVlKCkucGF5bG9hZCgpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU2V0SW50MzJUYWc6CiAgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcGxhbi5ncHIoKSk7CkBAIC04NTUsMTIgKzg1NSw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJbihOb2RlKiBub2QKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7Ci0gICAgICAgIAotICAgIGlmIChpc0NvbnN0YW50KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9Ci0gICAgICAgICAg
ICBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7Ci0gICAgICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUlt
cGwoKQotICAgICAgICAgICAgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMo
KSkgeworICAgIAorICAgIGlmIChKU1N0cmluZyogc3RyaW5nID0gbm9kZS0+Y2hpbGQxKCktPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigpKSB7CisgICAgICAgIGlmIChzdHJpbmctPnRy
eUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkp
IHsKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9IG1faml0LmNvZGVC
bG9jaygpLT5hZGRTdHViSW5mbygpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtMTIxOCwxMyArMTIxNSwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVCb29sCiAgICAgICAgIG5vdFRha2VuID0gdG1wOwogICAg
IH0KIAotICAgIGlmIChpc0Jvb2xlYW5Db25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7
Ci0gICAgICAgIGJvb2wgaW1tID0gdmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNCb29sZWFuQ29uc3RhbnQoKSkg
eworICAgICAgICBib29sIGltbSA9IG5vZGUtPmNoaWxkMSgpLT5hc0Jvb2xlYW4oKTsKICAgICAg
ICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAg
ICAgICAgYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpbW0pKSkpLCBvcDIuZ3ByKCksIHRh
a2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzQm9vbGVhbkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpIHsKKyAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0Jvb2xlYW5Db25zdGFu
dCgpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIGJvb2wgaW1tID0gdmFsdWVPZkJvb2xlYW5Db25zdGFudChub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBib29sIGltbSA9IG5vZGUtPmNoaWxkMigpLT5h
c0Jvb2xlYW4oKTsKICAgICAgICAgYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIEpJVENv
bXBpbGVyOjpJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGltbSkpKSksIHRha2VuKTsKICAgICB9IGVsc2UgewogICAgICAgICBTcGVjdWxhdGVCb29s
ZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTI0OSwxMyArMTI0Niwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnQzCiAgICAgICAgIG5v
dFRha2VuID0gdG1wOwogICAgIH0KIAotICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSkgewotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0
YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0lu
dDMyQ29uc3RhbnQoKSkgeworICAgICAgICBpbnQzMl90IGltbSA9IG5vZGUtPmNoaWxkMSgpLT5h
c0ludDMyKCk7CiAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+
Y2hpbGQyKCkpOwogICAgICAgICBicmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0z
MihpbW0pLCBvcDIuZ3ByKCksIHRha2VuKTsKLSAgICB9IGVsc2UgaWYgKGlzSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDIo
KS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZklu
dDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgaW50MzJfdCBpbW0g
PSBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICBicmFuY2gzMihjb25kaXRpb24s
IG9wMS5ncHIoKSwgSklUQ29tcGlsZXI6OkltbTMyKGltbSksIHRha2VuKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKQEAgLTE0MTUsMTEgKzE0MTIsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrCiAgICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZp
ZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAg
ICAgICAgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2UobV9jdXJyZW50Tm9kZS0+d2Vha0Nv
bnN0YW50KCkpOwotICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlm
aWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJyZW50Tm9kZSkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjA4OCw3ICsyMDgwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURv
dWJsZVJlcChObwogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAg
ICAgY2FzZSBOdW1iZXJVc2U6IHsKLSAgICAgICAgQVNTRVJUKCFpc051bWJlckNvbnN0YW50KG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpOyAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY29uc3RhbnQg
Zm9sZGVkLgorICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpLT5pc051bWJlckNvbnN0YW50
KCkpOyAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY29uc3RhbnQgZm9sZGVkLgogICAgIAogICAg
ICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTIyODUsNyAr
MjI3Nyw3IEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpqdW1wRm8KICAgICBp
ZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2ppdC5ncmFwaCgpLnRyeUdldEZvbGRhYmxl
Vmlld0ZvckNoaWxkMShub2RlKSkgewogICAgICAgICB1aW50MzJfdCBsZW5ndGggPSB2aWV3LT5s
ZW5ndGgoKTsKICAgICAgICAgTm9kZSogaW5kZXhOb2RlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChu
b2RlLCAxKS5ub2RlKCk7Ci0gICAgICAgIGlmIChtX2ppdC5ncmFwaCgpLmlzSW50MzJDb25zdGFu
dChpbmRleE5vZGUpICYmIHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2ppdC5ncmFwaCgpLnZhbHVl
T2ZJbnQzMkNvbnN0YW50KGluZGV4Tm9kZSkpIDwgbGVuZ3RoKQorICAgICAgICBpZiAoaW5kZXhO
b2RlLT5pc0ludDMyQ29uc3RhbnQoKSAmJiBpbmRleE5vZGUtPmFzVUludDMyKCkgPCBsZW5ndGgp
CiAgICAgICAgICAgICByZXR1cm4gSklUQ29tcGlsZXI6Okp1bXAoKTsKICAgICAgICAgcmV0dXJu
IG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW0zMihsZW5ndGgpKTsKQEAgLTIzODEsNyAr
MjM3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBH
UFJSZWcgdmFsdWVHUFIgPSBJbnZhbGlkR1BSUmVnOwogICAgIAogICAgIGlmICh2YWx1ZVVzZS0+
aXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0
YW50KHZhbHVlVXNlLm5vZGUoKSk7CisgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlVXNl
LT5hc0pTVmFsdWUoKTsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKICAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCAwKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwpAQCAtMjY2OSw4ICsyNjYx
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgIGNhc2Ug
SW50MzJVc2U6IHsKICAgICAgICAgQVNTRVJUKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2Rl
LT5hcml0aE1vZGUoKSkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPmlzSW50MzJDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGlt
bTEgPSBub2RlLT5jaGlsZDEoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50
MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogCkBAIC0yNjg0LDkgKzI2NzYsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgp
KSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSBub2Rl
LT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVy
Zmxvdyhub2RlLT5hcml0aE1vZGUoKSkpIHsKQEAgLTI4NjUsOSArMjg1Nyw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFN1YihOb2QKICAgICBjYXNlIEludDMyVXNlOiB7CiAg
ICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkp
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc051bWJlckNvbnN0YW50
KCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IG5v
ZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCiAgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJp
dGhNb2RlKCkpKSB7CkBAIC0yODgyLDggKzI4NzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhTdWIoTm9kCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTEgPSB2YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzTnVt
YmVyQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gbm9kZS0+Y2hpbGQx
KCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKICAgICAgICAgICAgICAgICAKQEAgLTMzMjIsOCArMzMxNCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgLy8gKGluIGNhc2Ugb2YgfGRpdmlk
ZW5kfCA8IHxkaXZpc29yfCksIHNvIHdlIHNwZWN1bGF0ZSBpdCBhcyBzdHJpY3QgaW50MzIuCiAg
ICAgICAgIFNwZWN1bGF0ZVN0cmljdEludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIo
KS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSB2YWx1ZU9mSW50MzJD
b25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQy
KCktPmlzSW50MzJDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSBu
b2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgaWYgKGRpdmlzb3IgPiAxICYm
IGhhc09uZUJpdFNldChkaXZpc29yKSkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvZ2Fy
aXRobSA9IFdURjo6ZmFzdExvZzIoZGl2aXNvcik7CiAgICAgICAgICAgICAgICAgR1BSUmVnIGRp
dmlkZW5kR1BSID0gb3AxLmdwcigpOwpAQCAtMzM4NCw4ICszMzc2LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogICAgICAgICB9CiAgICAgICAgIAogI2lmIENQ
VShYODYpIHx8IENQVShYODZfNjQpCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+
Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gdmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaW50MzJfdCBkaXZp
c29yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIGlmIChkaXZpc29y
ICYmIGRpdmlzb3IgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBHUFJSZWcgb3AxR3ByID0gb3Ax
LmdwcigpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTU1NiwyOSArNTU2LDYgQEAg
cHVibGljOgogICAgIGJvb2wgaXNLbm93bk5vdE51bWJlcihOb2RlKiBub2RlKSB7IHJldHVybiAh
KG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiBTcGVjRnVsbE51bWJlcik7IH0KICAgICBi
b29sIGlzS25vd25Ob3RDZWxsKE5vZGUqIG5vZGUpIHsgcmV0dXJuICEobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUpLm1fdHlwZSAmIFNwZWNDZWxsKTsgfQogICAgIAotICAgIC8vIENoZWNrcy9hY2Nlc3Nv
cnMgZm9yIGNvbnN0YW50IHZhbHVlcy4KLSAgICBib29sIGlzQ29uc3RhbnQoTm9kZSogbm9kZSkg
eyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0NvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0pT
Q29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0pTQ29uc3RhbnQo
bm9kZSk7IH0KLSAgICBib29sIGlzSW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBt
X2ppdC5ncmFwaCgpLmlzSW50MzJDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNEb3VibGVD
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRG91YmxlQ29uc3Rh
bnQobm9kZSk7IH0KLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5pc051bWJlckNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0Jv
b2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzQm9vbGVh
bkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0Z1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Z1bmN0aW9uQ29uc3RhbnQobm9kZSk7IH0KLSAg
ICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0
LmdyYXBoKCkudmFsdWVPZkludDMyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBkb3VibGUgdmFsdWVP
Zk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVP
Zk51bWJlckNvbnN0YW50KG5vZGUpOyB9Ci0jaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICB2b2lk
KiBhZGRyZXNzT2ZEb3VibGVDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5hZGRy
ZXNzT2ZEb3VibGVDb25zdGFudChub2RlKTsgfQotI2VuZGlmCi0gICAgSlNWYWx1ZSB2YWx1ZU9m
SlNDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5v
ZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkJvb2xlYW5Db25zdGFudChub2RlKTsg
fQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsg
cmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQobm9kZSk7IH0KLSAg
ICBib29sIGlzTnVsbENvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlz
Q29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc051bGwoKTsKLSAgICB9Ci0KICAgICBTdHJpbmdJ
bXBsKiBpZGVudGlmaWVyVUlEKHVuc2lnbmVkIGluZGV4KQogICAgIHsKICAgICAgICAgcmV0dXJu
IG1faml0LmdyYXBoKCkuaWRlbnRpZmllcnMoKVtpbmRleF07CkBAIC02MTksOSArNTk2LDkgQEAg
cHVibGljOgogI2VuZGlmCiAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIE1hY3JvQXNzZW1ibGVy
OjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSogbm9kZSkKKyAgICBzdGF0aWMg
TWFjcm9Bc3NlbWJsZXI6OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2Rl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjpl
bmNvZGUodmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUobm9kZS0+YXNKU1ZhbHVlKCkpKTsKICAgICB9
CiAjZW5kaWYKIApAQCAtOTU3LDcgKzkzNCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgdm9pZCBp
bml0Q29uc3RhbnRJbmZvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBBU1NFUlQoaXNJbnQz
MkNvbnN0YW50KG5vZGUpIHx8IGlzTnVtYmVyQ29uc3RhbnQobm9kZSkgfHwgaXNKU0NvbnN0YW50
KG5vZGUpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc0NvbnN0YW50KCkpOwogICAgICAgICBn
ZW5lcmF0aW9uSW5mbyhub2RlKS5pbml0Q29uc3RhbnQobm9kZSwgbm9kZS0+cmVmQ291bnQoKSk7
CiAgICAgfQogICAgIApAQCAtMTk4MywxNyArMTk2MCw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
ZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOwogCi0gICAgYm9vbCBpc0ludGVnZXIoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLT5oYXNJbnQzMlJlc3VsdCgpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHJldHVybiBnZW5lcmF0aW9uSW5m
byhub2RlKS5pc0pTSW50MzIoKTsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBiZXR0ZXJVc2VTdHJp
Y3RJbnQ1MihOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgcmV0dXJuICFnZW5lcmF0aW9uSW5m
byhub2RlKS5pc0ludDUyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3Miw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQml0T3I6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAKLSAgICAgICAg
ICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAg
ICBKU1ZhbHVlIG9wMiA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIo
KS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChvcDIuaXNJbnQzMigpICYmICFvcDIuYXNJ
bnQzMigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3ZlckNoaWxk
MSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkgJiYgIW1fbm9k
ZS0+Y2hpbGQyKCktPmFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50
aXR5T3ZlckNoaWxkMSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTg5LDM4ICs4NiwyOCBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEJpdExTaGlmdDoKICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CiAg
ICAgICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigp
LT5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIG9wMiA9IG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwotICAgICAgICAgICAg
ICAgIGlmIChvcDIuaXNJbnQzMigpICYmICEob3AyLmFzSW50MzIoKSAmIDB4MWYpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3ZlckNoaWxkMSgpOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9u
b2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkgJiYgIShtX25vZGUtPmNoaWxkMigpLT5h
c0ludDMyKCkgJiAweDFmKSkgeworICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3Zl
ckNoaWxkMSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoK
ICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IEJpdFVSU2hpZnQKLSAg
ICAgICAgICAgICAgICAmJiBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+aXNDb25zdGFudCgp
KSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBzaGlmdEFtb3VudCA9IG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxk
MigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoaWZ0QW1vdW50LmlzSW50MzIoKSAm
JiAoc2hpZnRBbW91bnQuYXNJbnQzMigpICYgMHgxZikpIHsKLSAgICAgICAgICAgICAgICAgICAg
bV9ub2RlLT5jb252ZXJ0VG9JZGVudGl0eSgpOwotICAgICAgICAgICAgICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgJiYgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCktPmlzSW50MzJD
b25zdGFudCgpCisgICAgICAgICAgICAgICAgJiYgKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMigp
LT5hc0ludDMyKCkgJiAweDFmKSkgeworICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRv
SWRlbnRpdHkoKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0
aXZpdHkoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNv
bnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAgICAgIGludDMy
X3QgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KAotICAgICAgICAgICAgICAg
ICAgICBtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWx1
ZSkgewotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpICYmICFtX25vZGUtPmNo
aWxkMigpLT5hc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92
ZXJDaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC0xMjksOSArMTE2LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhTdWI6
Ci0gICAgICAgICAgICBpZiAobV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIo
KS5ub2RlKCkpCisgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0
YW50KCkKICAgICAgICAgICAgICAgICAmJiBtX25vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVz
ZSkpIHsKLSAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSW50
MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgaW50
MzJfdCB2YWx1ZSA9IG1fbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAgICAg
ICBpZiAoLXZhbHVlICE9IHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+c2V0
T3AoQXJpdGhBZGQpOwogICAgICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMigpLnNldE5v
ZGUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE2
OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICBpZiAo
IWdyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzLT5pc0VtcHR5KCkpCiAgICAgICAgIHN0YXRl
LmppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gZ3JhcGgubV9wbGFuLmlubGluZUNh
bGxGcmFtZXM7CiAgICAgCisgICAgbV9ncmFwaC5yZWdpc3RlckZyb3plblZhbHVlKCk7CisKICAg
ICAvLyBDcmVhdGUgdGhlIGVudHJ5cG9pbnQuIE5vdGUgdGhhdCB3ZSB1c2UgdGhpcyBlbnRyeXBv
aW50IHRvdGFsbHkgZGlmZmVyZW50bHkKICAgICAvLyBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSdy
ZSBkb2luZyBPU1IgZW50cnkgb3Igbm90LgogICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2Rl
QmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3
IEBAIHN0YXRpYyB2b2lkIGNvbXBpbGVTdHViKAogICAgICAgICAKICAgICAgICAgUHJvZmlsZXI6
Ok9TUkV4aXQqIHByb2ZpbGVyRXhpdCA9IGNvbXBpbGF0aW9uLT5hZGRPU1JFeGl0KAogICAgICAg
ICAgICAgZXhpdElELCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywg
ZXhpdC5tX2NvZGVPcmlnaW4pLAotICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGlzV2F0Y2hwb2lu
dChleGl0Lm1fa2luZCkpOworICAgICAgICAgICAgZXhpdC5tX2tpbmQsIGV4aXQubV9raW5kID09
IFVuY291bnRhYmxlSW52YWxpZGF0aW9uKTsKICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9maWxl
ckV4aXQtPmNvdW50ZXJBZGRyZXNzKCkpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTkxLDYgKzE5MSwxMyBAQCB2b2lkIEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uCiAKIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKIHsKKyAgICBkdW1wSW5Db250ZXh0QXNzdW1pbmdT
dHJ1Y3R1cmUoCisgICAgICAgIG91dCwgY29udGV4dCwgKCEhKnRoaXMgJiYgaXNDZWxsKCkpID8g
YXNDZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgSlNWYWx1ZTo6ZHVt
cEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKAorICAgIFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKICAgICBpZiAo
ISp0aGlzKQogICAgICAgICBvdXQucHJpbnQoIjxKU1ZhbHVlKCk+Iik7CiAgICAgZWxzZSBpZiAo
aXNJbnQzMigpKQpAQCAtMjA3LDcgKzIxNCw3IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnByaW50ZigiRG91YmxlOiAlMDh4OiUwOHgsICVs
ZiIsIHUuYXNUd29JbnQzMnNbMV0sIHUuYXNUd29JbnQzMnNbMF0sIGFzRG91YmxlKCkpOwogI2Vu
ZGlmCiAgICAgfSBlbHNlIGlmIChpc0NlbGwoKSkgewotICAgICAgICBpZiAoYXNDZWxsKCktPmlu
aGVyaXRzKEpTU3RyaW5nOjppbmZvKCkpKSB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmNsYXNz
SW5mbygpLT5pc1N1YmNsYXNzT2YoSlNTdHJpbmc6OmluZm8oKSkpIHsKICAgICAgICAgICAgIEpT
U3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7CiAgICAgICAgICAg
ICBvdXQucHJpbnQoIlN0cmluZyIpOwogICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3BlKCkp
CkBAIC0yMjMsMTEgKzIzMCwxMSBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAo
dW5yZXNvbHZlZCkiKTsKICAgICAgICAgICAgIG91dC5wcmludCgiOiAiLCBpbXBsKTsKLSAgICAg
ICAgfSBlbHNlIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoU3RydWN0dXJlOjppbmZvKCkpKQorICAg
ICAgICB9IGVsc2UgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViY2xhc3NPZihTdHJ1
Y3R1cmU6OmluZm8oKSkpCiAgICAgICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZTogIiwgaW5D
b250ZXh0KCpqc0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpLCBjb250ZXh0KSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgb3V0LnByaW50KCJDZWxsOiAiLCBSYXdQb2ludGVyKGFzQ2Vs
bCgpKSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCphc0NlbGwoKS0+
c3RydWN0dXJlKCksIGNvbnRleHQpLCAiKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgKCIs
IGluQ29udGV4dCgqc3RydWN0dXJlLCBjb250ZXh0KSwgIikiKTsKICAgICAgICAgfQogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIG91dC5wcmludCgiLCBJRDogIiwgYXNDZWxsKCktPnN0cnVj
dHVyZUlEKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBAIGNsYXNzIEpTU3Ry
aW5nOwogY2xhc3MgUHJvcGVydHlOYW1lOwogY2xhc3MgUHJvcGVydHlTbG90OwogY2xhc3MgUHV0
UHJvcGVydHlTbG90OworY2xhc3MgU3RydWN0dXJlOwogI2lmIEVOQUJMRShERkdfSklUKQogbmFt
ZXNwYWNlIERGRyB7CiBjbGFzcyBKSVRDb21waWxlcjsKQEAgLTI3Nyw2ICsyNzgsNyBAQCBwdWJs
aWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqLCBTdHJ1Y3R1cmUqKSBjb25zdDsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIEpTT2JqZWN0KiBzeW50aGVzaXplUHJvdG90eXBlKEV4ZWNTdGF0ZSopIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232654</attachid>
            <date>2014-06-06 21:54:12 -0700</date>
            <delta_ts>2014-06-07 12:27:55 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>156777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBACiAJCTBGNjY2RUNEMTgzNkIz
N0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0Uw
MEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2
MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFj
ZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0
IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKKwkJMEY2OUNDODkxOTNB
QzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJv
emVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0
NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcg
LyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQjkxODYxMjQ0QzAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MjEzMSw2ICsyMTMzLDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3Vy
cmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdS
ZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0g
ZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zyb3plblZh
bHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5oOyBwYXRo
ID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCNDE4NUZDOUU5MDA4NDVE
OTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEpT
Q2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01vZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTIsNiArNDcxNiw4IEBACiAJCQkJMEY5RDMzOTUxN0ZGQzRF
NjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3RDg5Q0U4MTdBMEI4Q0MwMDc3
M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCiAJCQkJQTdEODlDRTkxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggKi8sCisJCQkJMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLywKKwkJCQkwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuaCAqLywKIAkJCQkyQTg4MDY3NjE5MTA3RDU1MDBDQjBCQkIgLyog
REZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovLAogCQkJCTJBODgwNjc3MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovLAogCQkJCTg2RUM5REI2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLApAQCAtNTU3Miw2ICs1NTc4LDcgQEAKIAkJ
CQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zm
c2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2OUNDODkxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU0
MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3VyZUNhbGxTdHViUm91dGluZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02ODcyLDYgKzY4NzksNyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYw
MDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0
MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xl
YW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NDEwN0VDMTFBMDAx
M0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg2NTEw
N0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVz
LmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw2IEBAIENh
bGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGEKICNpZiBFTkFCTEUoREZHX0pJ
VCkKICAgICBleGl0U2l0ZURhdGEubV90YWtlc1Nsb3dQYXRoID0KICAgICAgICAgcHJvZmlsZWRC
bG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJ
bmRleCwgQmFkQ2FjaGUsIGV4aXRpbmdKSVRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9j
ay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRl
eCwgQmFkQ2FjaGVXYXRjaHBvaW50LCBleGl0aW5nSklUVHlwZSkpCiAgICAgICAgIHx8IHByb2Zp
bGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVj
b2RlSW5kZXgsIEJhZEV4ZWN1dGFibGUsIGV4aXRpbmdKSVRUeXBlKSk7CiAgICAgZXhpdFNpdGVE
YXRhLm1fYmFkRnVuY3Rpb24gPQogICAgICAgICBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShs
b2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbiwg
ZXhpdGluZ0pJVFR5cGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTIgKzQ0LDggQEAg
Y29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraQogICAgICAgICByZXR1cm4g
IkJhZEV4ZWN1dGFibGUiOwogICAgIGNhc2UgQmFkQ2FjaGU6CiAgICAgICAgIHJldHVybiAiQmFk
Q2FjaGUiOwotICAgIGNhc2UgQmFkQ2FjaGVXYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gIkJh
ZENhY2hlV2F0Y2hwb2ludCI7Ci0gICAgY2FzZSBCYWRXZWFrQ29uc3RhbnRDYWNoZToKLSAgICAg
ICAgcmV0dXJuICJCYWRXZWFrQ29uc3RhbnRDYWNoZSI7Ci0gICAgY2FzZSBCYWRXZWFrQ29uc3Rh
bnRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiAiQmFkV2Vha0NvbnN0YW50Q2FjaGVX
YXRjaHBvaW50IjsKKyAgICBjYXNlIEJhZENvbnN0YW50Q2FjaGU6CisgICAgICAgIHJldHVybiAi
QmFkQ29uc3RhbnRDYWNoZSI7CiAgICAgY2FzZSBCYWRJbmRleGluZ1R5cGU6CiAgICAgICAgIHJl
dHVybiAiQmFkSW5kZXhpbmdUeXBlIjsKICAgICBjYXNlIE92ZXJmbG93OgpAQCAtNzIsOCArNjgs
NiBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpCiAgICAgICAgIHJl
dHVybiAiTm90U3RyaW5nT2JqZWN0IjsKICAgICBjYXNlIFVuY291bnRhYmxlOgogICAgICAgICBy
ZXR1cm4gIlVuY291bnRhYmxlIjsKLSAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hwb2ludDoKLSAg
ICAgICAgcmV0dXJuICJVbmNvdW50YWJsZVdhdGNocG9pbnQiOwogICAgIGNhc2UgVW5jb3VudGFi
bGVJbnZhbGlkYXRpb246CiAgICAgICAgIHJldHVybiAiVW5jb3VudGFibGVJbnZhbGlkYXRpb24i
OwogICAgIGNhc2UgV2F0Y2hkb2dUaW1lckZpcmVkOgpAQCAtOTIsNyArODYsNiBAQCBib29sIGV4
aXRLaW5kSXNDb3VudGFibGUoRXhpdEtpbmQga2luZCkKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICBjYXNlIEJhZFR5cGU6CiAgICAgY2FzZSBVbmNvdW50YWJsZToK
LSAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hwb2ludDoKICAgICBjYXNlIExvYWRGcm9tSG9sZTog
Ly8gQWxyZWFkeSBjb3VudGVkIGRpcmVjdGx5IGJ5IHRoZSBiYXNlbGluZSBKSVQuCiAgICAgY2Fz
ZSBTdG9yZVRvSG9sZTogLy8gQWxyZWFkeSBjb3VudGVkIGRpcmVjdGx5IGJ5IHRoZSBiYXNlbGlu
ZSBKSVQuCiAgICAgY2FzZSBPdXRPZkJvdW5kczogLy8gQWxyZWFkeSBjb3VudGVkIGRpcmVjdGx5
IGJ5IHRoZSBiYXNlbGluZSBKSVQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDcgQEAgZW51
bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEJhZEZ1bmN0aW9uLCAvLyBXZSBleGl0ZWQgYmVj
YXVzZSB3ZSBtYWRlIGFuIGluY29ycmVjdCBhc3N1bXB0aW9uIGFib3V0IHdoYXQgZnVuY3Rpb24g
d2Ugd291bGQgc2VlLgogICAgIEJhZEV4ZWN1dGFibGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdl
IG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hhdCBleGVjdXRhYmxlIHdlIHdv
dWxkIHNlZS4KICAgICBCYWRDYWNoZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYW4gaW5saW5lIGNh
Y2hlIHdhcyB3cm9uZy4KLSAgICBCYWRXZWFrQ29uc3RhbnRDYWNoZSwgLy8gV2UgZXhpdGVkIGJl
Y2F1c2UgYSBjYWNoZSBvbiBhIHdlYWsgY29uc3RhbnQgKHVzdWFsbHkgYSBwcm90b3R5cGUpIHdh
cyB3cm9uZy4KLSAgICBCYWRDYWNoZVdhdGNocG9pbnQsIC8vIFNhbWUgYXMgQmFkQ2FjaGUgYnV0
IGZyb20gYSB3YXRjaHBvaW50LgotICAgIEJhZFdlYWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCwg
Ly8gU2FtZSBhcyBCYWRXZWFrQ29uc3RhbnRDYWNoZSBidXQgZnJvbSBhIHdhdGNocG9pbnQuCisg
ICAgQmFkQ29uc3RhbnRDYWNoZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSBjYWNoZSBvbiBhIHdl
YWsgY29uc3RhbnQgKHVzdWFsbHkgYSBwcm90b3R5cGUpIHdhcyB3cm9uZy4KICAgICBCYWRJbmRl
eGluZ1R5cGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGluZGV4aW5nIHR5cGUgd2FzIHdyb25n
LgogICAgIE92ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBvZiBvdmVyZmxvdy4KICAgICBO
ZWdhdGl2ZVplcm8sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIGVuY291bnRlcmVkIG5lZ2F0aXZl
IHplcm8uCkBAIC00OSw3ICs0Nyw2IEBAIGVudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKICAgICBO
b3RTdHJpbmdPYmplY3QsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIHNob3VsZG4ndCBoYXZlIGF0
dGVtcHRlZCB0byBvcHRpbWl6ZSBzdHJpbmcgb2JqZWN0IGFjY2Vzcy4KICAgICBVbmNvdW50YWJs
ZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hv
dWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBh
IEZJWE1FLgogICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVz
ZSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMgbWVhbnMgdGhhdCB3ZSd2ZSBh
bHJlYWR5IGNvdW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlk
YXRlZC4KLSAgICBVbmNvdW50YWJsZVdhdGNocG9pbnQsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9m
IGEgd2F0Y2hwb2ludCwgd2hpY2ggaXNuJ3QgY291bnRlZCBiZWNhdXNlIHdhdGNocG9pbnRzIGRv
IHRyYWNraW5nIHRoZW1zZWx2ZXMuCiAgICAgV2F0Y2hkb2dUaW1lckZpcmVkLCAvLyBXZSBleGl0
ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdhdGNoZG9nIHRpbWVyLgogICAgIERl
YnVnZ2VyRXZlbnQgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVlZCB0byBzZXJ2aWNlIHRoZSBk
ZWJ1Z2dlci4KIH07CkBAIC01NywxOCArNTQsNiBAQCBlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7
CiBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kKTsKIGJvb2wgZXhpdEtpbmRJ
c0NvdW50YWJsZShFeGl0S2luZCk7CiAKLWlubGluZSBib29sIGlzV2F0Y2hwb2ludChFeGl0S2lu
ZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgQmFkQ2FjaGVXYXRjaHBv
aW50OgotICAgIGNhc2UgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50OgotICAgIGNhc2Ug
VW5jb3VudGFibGVXYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
R2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDkgKzUxLDcgQEAgYm9vbCBHZXRCeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IAog
Ym9vbCBHZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKIHsKICAgICByZXR1cm4gcHJvZmlsZWRCbG9jay0+
aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwg
QmFkQ2FjaGUsIGppdFR5cGUpKQotICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0
ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNoZVdh
dGNocG9pbnQsIGppdFR5cGUpKQotICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0
ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRXZWFrQ29u
c3RhbnRDYWNoZSwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRT
aXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFdlYWtD
b25zdGFudENhY2hlV2F0Y2hwb2ludCwgaml0VHlwZSkpOworICAgICAgICB8fCBwcm9maWxlZEJs
b2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUlu
ZGV4LCBCYWRDb25zdGFudENhY2hlLCBqaXRUeXBlKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2
aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw3IEBAIGJvb2wgUHV0QnlJZFN0
YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIGJvb2wgUHV0QnlJZFN0YXR1czo6aGFzRXhpdFNp
dGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVk
QmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdKSVRUeXBlIGV4aXRUeXBlKQog
ewogICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJl
cXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNoZSwgZXhpdFR5cGUpKQotICAgICAg
ICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0
U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQsIGV4aXRUeXBlKSkKLSAgICAg
ICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGUsIGV4aXRUeXBlKSkKLSAg
ICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50
RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50LCBl
eGl0VHlwZSkpOworICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIs
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlLCBl
eGl0VHlwZSkpOwogICAgIAogfQogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTY5NTg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVl
KFQgbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFs
dWUoVCBub2RlLCBGcm96ZW5WYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBmaWx0
ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZhbHVlKTsKICAgICB9CkBAIC0xNDQsNyArMTQ0LDcg
QEAgcHVibGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckFycmF5TW9k
ZXMoQWJzdHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmls
dGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7Ci0gICAgRmlsdHJhdGlvblJlc3Vs
dCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBKU1ZhbHVlKTsKKyAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZyb3plblZhbHVlKTsKICAgICAK
IHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2ln
bmVkIGluZGV4SW5CbG9jayk7CkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBwcml2YXRlOgogICAgIH07
CiAgICAgQm9vbGVhblJlc3VsdCBib29sZWFuUmVzdWx0KE5vZGUqLCBBYnN0cmFjdFZhbHVlJik7
CiAgICAgCi0gICAgdm9pZCBzZXRCdWlsdEluQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB2b2lkIHNldEJ1aWx0SW5Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1
ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0VmFsdWUgPSBm
b3JOb2RlKG5vZGUpOwogICAgICAgICBhYnN0cmFjdFZhbHVlLnNldChtX2dyYXBoLCB2YWx1ZSwg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgIGFic3RyYWN0VmFsdWUu
Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKG5vZGUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNl
dENvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCisgICAgdm9pZCBzZXRDb25zdGFu
dChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldEJ1aWx0
SW5Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFu
dHModHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNyw5ICsxMzcsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91Ymxl
Q29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3Rh
bnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAgICAgIHNldEJ1aWx0SW5Db25z
dGFudChub2RlLCBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgc2V0
QnVpbHRJbkNvbnN0YW50KG5vZGUsICpub2RlLT5jb25zdGFudCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKQEAgLTg1NSwzMiArODU0LDMyIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RD
aGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoY2hpbGQpIHsKICAg
ICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0cmluZ0ZvclZhbHVlKCp2bSwg
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLCBjaGls
ZCk7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB0eXBlU3RyaW5nKTsKKyAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh0eXBlU3RyaW5nKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlzRnVsbE51
bWJlclNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSk7CisgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0tPnNtYWxsU3RyaW5ncy5u
dW1iZXJTdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkg
ewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdT
dHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUo
dm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0ZpbmFsT2JqZWN0U3BlY3VsYXRpb24o
YWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxk
Lm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkp
IHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0
U3RyaW5nKCkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXpl
KHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNGdW5jdGlvblNwZWN1bGF0aW9uKGFi
c3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0t
PnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50
KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAo
aXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmJvb2xlYW5TdHJpbmcoKSk7Cisg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0tPnNtYWxsU3Ry
aW5ncy5ib29sZWFuU3RyaW5nKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
QEAgLTE0MzIsNyArMTQzMSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICBjYXNlIFNraXBTY29wZTogewogICAgICAgICBKU1ZhbHVlIGNoaWxkID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hpbGQu
YXNDZWxsKCkpLT5uZXh0KCkpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dy
YXBoLmZyZWV6ZShKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0
KCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUoU3BlY09iamVjdE90aGVyKTsKQEAgLTE0NzksNyArMTQ3OCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCku
YXNDZWxsKCktPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgc3RhdHVz
WzBdLnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCAqbV9ncmFwaC5mcmVlemUoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNo
aWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkpOwpAQCAtMTc2MywxNCArMTc2MiwxNCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgCiAgICAgY2Fz
ZSBDaGVja0Z1bmN0aW9uOiB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBmb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUgPT0gbm9kZS0+ZnVuY3Rpb24o
KSkgeworICAgICAgICBpZiAodmFsdWUgPT0gbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKSkgewog
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAK
ICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGllcyEgV2UgY2FuIGRvIGJldHRl
ci4KLSAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgbm9kZS0+ZnVuY3Rpb24o
KSk7CisgICAgICAgIGZpbHRlckJ5VmFsdWUobm9kZS0+Y2hpbGQxKCksICpub2RlLT5mdW5jdGlv
bigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTIxMjQsNyArMjEyMyw3
IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnMKIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJCeVZhbHVlKAotICAgIEFic3RyYWN0
VmFsdWUmIGFic3RyYWN0VmFsdWUsIEpTVmFsdWUgY29uY3JldGVWYWx1ZSkKKyAgICBBYnN0cmFj
dFZhbHVlJiBhYnN0cmFjdFZhbHVlLCBGcm96ZW5WYWx1ZSBjb25jcmV0ZVZhbHVlKQogewogICAg
IGlmIChhYnN0cmFjdFZhbHVlLmZpbHRlckJ5VmFsdWUoY29uY3JldGVWYWx1ZSkgPT0gRmlsdHJh
dGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNjk1ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
VHJhbnNpdGlvbnMoYwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIH0KIAotdm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVlKQordm9p
ZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96
ZW5WYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsK
LSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCk7CisgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgeworICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBncmFw
aC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CiAgICAgICAgIG1fc3RydWN0dXJl
ID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC01OSwxNyArNTksMTcgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAg
IH0KICAgICAgICAgCi0gICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwot
ICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2
YWx1ZS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgCiAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAK
LXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSwgU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0
KEdyYXBoJiBncmFwaCwgY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUgY2xvYmJlclN0YXRlKQogewotICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgp
KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpOworICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
aWYgKGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKSkgewogICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIHdhdGNocG9pbnQgZm9y
IHRoaXMgaGFzIGFscmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAgICAvLyBCdXQgd2UgY2FuJ3Qg
YmVjYXVzZSBvdXIgdmlldyBvZiB3aGF0IHN0cnVjdHVyZSBhIHZhbHVlIGhhcyBrZWVwcyBjaGFu
Z2luZy4gVGhhdCdzCkBAIC05MCw4ICs5MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdy
YXBoJiBncmFwaCwgSlMKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgCi0g
ICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwotICAgIG1fdmFsdWUgPSB2
YWx1ZTsKKyAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS52YWx1ZSgpKTsK
KyAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CiAgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKQEAgLTIyMSwxMSArMjIxLDExIEBAIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICByZXR1cm4gbm9ybWFs
aXplQ2xhcml0eSgpOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
ckJ5VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6
ZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRmlsdHJhdGlv
blJlc3VsdCByZXN1bHQgPSBmaWx0ZXIoc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKTsKKyAg
ICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IGZpbHRlcihzcGVjdWxhdGlvbkZyb21WYWx1ZSh2
YWx1ZS52YWx1ZSgpKSk7CiAgICAgaWYgKG1fdHlwZSkKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVl
OworICAgICAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUg
IkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0ZpbHRyYXRpb25SZXN1bHQuaCIKKyNpbmNs
dWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1
ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUuaCIKQEAgLTE3Myw4ICsxNzQsOCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0TW9zdFNw
ZWNpZmljKEdyYXBoJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBzZXQoR3JhcGgmLCBKU1ZhbHVlLCBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgIHZvaWQgc2V0TW9zdFNwZWNpZmljKEdyYXBoJiwg
Y29uc3QgRnJvemVuVmFsdWUmKTsKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IEZyb3plblZh
bHVlJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICB2b2lkIHNldChHcmFwaCYsIFN0cnVj
dHVyZSopOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
CkBAIC0yNjIsNyArMjYzLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpOwogICAgIAotICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShKU1ZhbHVlIHZhbHVlKTsKKyAgICBGaWx0cmF0
aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlKTsKICAgICAK
ICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMDgsOCArMjA4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5jZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJl
YWRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBj
b3VsZCBiZSBmaXhlZCwgYnV0IGl0J3MgZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
JiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQgJiYgISpzb3VyY2UtPmNv
bnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YXJpYWJs
ZSBpcyB0b3RhbGx5IGRlYWQsIHRoZW4gaWdub3JlIGl0LgpAQCAtNTExLDcgKzUxMCw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENo
ZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgb3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZy
YW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZSwgbV9ncmFwaC5mcmVlemUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIo
b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC01MjgsMTIgKzUyOCwxMSBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5v
cmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0
YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+aXNJbnQzMkNvbnN0YW50KCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgpLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2so
KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKQorICAgICAgICAg
ICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXgg
PSB2YWx1ZS5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSBu
b2RlLT5jaGlsZDEoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXgg
PCAwCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4
ICsgMSkgPj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNyAr
NjcsMTcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlzTm90TmVnWmVybyhOb2RlKiBu
b2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkp
CisgICAgICAgIGlmICghbm9kZS0+aXNOdW1iZXJDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJD
b25zdGFudChub2RlKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0gbm9kZS0+YXNOdW1iZXIoKTsK
ICAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCAxLjAgLyB2YWx1ZSA+IDAuMCk7CiAgICAgfQogICAg
IAogICAgIGJvb2wgaXNOb3RQb3NaZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAo
IW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAgICAgaWYgKCFub2RlLT5pc051
bWJlckNvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJs
ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG5vZGUpOworICAgICAgICBk
b3VibGUgdmFsdWUgPSBub2RlLT5hc051bWJlcigpOwogICAgICAgICByZXR1cm4gKHZhbHVlIHx8
IDEuMCAvIHZhbHVlIDwgMC4wKTsKICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToK
ICAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CiAgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JD
b25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1
ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1
ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVk
aWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGRvdWJsZSBpbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc051bWJlcigpOwpAQCAtMTMwLDcg
KzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUt
PmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBK
U0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpT
VmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29k
ZUJsb2NrKCkpOworICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1v
dW50LT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQz
MigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBp
bW1lZGlhdGVWYWx1ZS5hc0ludDMyKCkgPiAzMiAtIHBvd2VyOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2OTU4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzIsMTggKzEzMiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9n
cmFwaChncmFwaCkKICAgICAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICAgICAsIG1fY3Vy
cmVudEluZGV4KDApCi0gICAgICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChVSU5UX01BWCkKLSAg
ICAgICAgLCBtX2NvbnN0YW50TnVsbChVSU5UX01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50TmFO
KFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnQxKFVJTlRfTUFYKQotICAgICAgICAsIG1f
Y29uc3RhbnRzKG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpCisgICAg
ICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChncmFwaC5mcmVlemUoanNVbmRlZmluZWQoKSkpCisg
ICAgICAgICwgbV9jb25zdGFudE51bGwoZ3JhcGguZnJlZXplKGpzTnVsbCgpKSkKKyAgICAgICAg
LCBtX2NvbnN0YW50TmFOKGdyYXBoLmZyZWV6ZShqc051bWJlcihQTmFOKSkpCisgICAgICAgICwg
bV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVt
QXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1M
b2NhbHMobV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICAsIG1fcGFy
YW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAg
LCBtX2lubGluZVN0YWNrVG9wKDApCiAgICAgICAgICwgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyhm
YWxzZSkKLSAgICAgICAgLCBtX2VtcHR5SlNWYWx1ZUluZGV4KFVJTlRfTUFYKQogICAgICAgICAs
IG1fY3VycmVudEluc3RydWN0aW9uKDApCiAgICAgewogICAgICAgICBBU1NFUlQobV9wcm9maWxl
ZEJsb2NrKTsKQEAgLTIxNywxMiArMjE1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBHZXQvU2V0IHRo
ZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBOb2RlKiBn
ZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICAvLyBJcyB0
aGlzIGEgY29uc3RhbnQ/Ci0gICAgICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOwot
ICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50IDwgbV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKIAogICAgICAgICAvLyBJcyB0aGlzIGFu
IGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCkBAIC0yMzQsMTMg
KzIyNywyNSBAQCBwcml2YXRlOgogCiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gb3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKTsK
KyAgICAgICAgICAgIGlmIChjb25zdGFudEluZGV4ID49IG1fY29uc3RhbnRzLnNpemUoKSB8fCBt
X2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFuZC5v
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gbV9jb25zdGFu
dHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50
SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSA9
CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplU3Ryb25nbHkodmFsdWUpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbV9jb25zdGFudHNbY29uc3RhbnRJbmRleF07CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUoKS0+aXNDbG9zdXJlQ2FsbCkgewogICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24q
IGNhbGxlZSA9IGlubGluZUNhbGxGcmFtZSgpLT5jYWxsZWVDb25zdGFudCgpOwogICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudChjYWxsZWUpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNDb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgICAgIGlmIChvcGVy
YW5kLm9mZnNldCgpID09IEpTU3RhY2s6OlNjb3BlQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBjZWxsQ29uc3RhbnQoY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGpzQ29uc3RhbnQoY2FsbGVlLT5zY29wZSgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKICAg
ICAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEdldENhbGxlZSk7CkBAIC0zMDksMTQgKzMxNCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQtPmlu
ZmVycmVkVmFsdWUoKSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9u
UmVlbnRyeVdhdGNocG9pbnQsIE9wSW5mbyhtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKSkpOwog
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZv
KHNldCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHZlcnkgc3BlY2lh
bCBmcm9tIGFuIE9TUiBleGl0IHN0YW5kcG9pbnQuIFdlIHdvdWxkbid0IGJlCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGFibGUgdG8gZG8gdGhpcyBmb3IgbW9zdCBsb2NhbHMsIGJ1dCBpdCB3b3Jr
cyBoZXJlIGJlY2F1c2Ugd2UncmUgZGVhbGluZwotICAgICAgICAgICAgICAgICAgICAvLyB3aXRo
IGEgZmx1c2hlZCBsb2NhbC4gRm9yIG1vc3QgbG9jYWxzIHdlIHdvdWxkIG5lZWQgdG8gaXNzdWUg
YSBHZXRMb2NhbAotICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIGFuZCBlbnN1cmUgdGhhdCB3
ZSBoYXZlIHVzZXMgaW4gREZHIElSIHdoZXJldmVyIHRoZXJlIHdvdWxkIGhhdmUKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYmVlbiB1c2VzIGluIGJ5dGVjb2RlLiBDbGVhcmx5IHRoaXMgb3B0aW1p
emF0aW9uIGRvZXMgbm90IGRvIHRoaXMuIEJ1dAotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0
J3MgZmluZSwgYmVjYXVzZSB3ZSBkb24ndCBuZWVkIHRvIHRyYWNrIGxpdmVuZXNzIGZvciBjYXB0
dXJlZAotICAgICAgICAgICAgICAgICAgICAvLyBsb2NhbHMsIGFuZCB0aGlzIG9wdGltaXphdGlv
biBvbmx5IGtpY2tzIGluIGZvciBjYXB0dXJlZCBsb2NhbHMuCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBpbmZlcnJlZENvbnN0YW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGpzQ29uc3RhbnQodmFsdWUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMzY3LDggKzM2NSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCwgaXNDYXB0dXJlZCk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VT
dHJ1Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpCi0g
ICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJh
ZENhY2hlKSk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9p
c3RpbmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAg
Tm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLCB2YWx1ZSk7CkBAIC00MjQsOCArNDIxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTaG91bGROZXZlclVuYm94KHRydWUpOwogICAgICAgICAK
ICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdG
YWlsZWQoCi0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAgICAgIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlV2F0Y2hwb2ludCkpOworICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgdmFy
aWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAgICBOb2RlKiBub2RlID0gYWRkVG9HcmFw
aChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZhbHVlKTsKQEAgLTU1NCwz
MiArNTUwLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGZsdXNoRm9yVGVybWluYWwoKTsKICAgICB9
CiAKLSAgICAvLyBOT1RFOiBPbmx5IHVzZSB0aGlzIHRvIGNvbnN0cnVjdCBjb25zdGFudHMgdGhh
dCBhcmlzZSBmcm9tIG5vbi1zcGVjdWxhdGl2ZQotICAgIC8vIGNvbnN0YW50IGZvbGRpbmcuIEku
ZS4gY3JlYXRpbmcgY29uc3RhbnRzIHVzaW5nIHRoaXMgaWYgd2UgaGFkIGNvbnN0YW50Ci0gICAg
Ly8gZmllbGQgaW5mZXJlbmNlIHdvdWxkIGJlIGEgYmFkIGlkZWEsIHNpbmNlIHRoZSBieXRlY29k
ZSBwYXJzZXIncyBmb2xkaW5nCi0gICAgLy8gZG9lc24ndCBoYW5kbGUgbGl2ZW5lc3MgcHJlc2Vy
dmF0aW9uLgotICAgIE5vZGUqIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50
VmFsdWUpCisgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgc3Ryb25n
bHkgbWFya2VkLgorICAgIE5vZGUqIGpzQ29uc3RhbnQoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQog
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRJbmRleDsKLSAgICAgICAgaWYgKCFtX2Nv
ZGVCbG9jay0+ZmluZENvbnN0YW50KGNvbnN0YW50VmFsdWUsIGNvbnN0YW50SW5kZXgpKSB7Ci0g
ICAgICAgICAgICBhZGRDb25zdGFudChjb25zdGFudFZhbHVlKTsKLSAgICAgICAgICAgIG1fY29u
c3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZD
b25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0
YW50KGNvbnN0YW50SW5kZXgpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50
LCBPcEluZm8obV9ncmFwaC5mcmVlemVTdHJvbmdseShjb25zdGFudFZhbHVlKSkpOwogICAgIH0K
IAotICAgIE5vZGUqIGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCisgICAgTm9kZSog
d2Vha0pTQ29uc3RhbnQoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQogICAgIHsKLSAgICAgICAgTm9k
ZSogbm9kZSA9IG1fY29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWU7Ci0gICAgICAgIGlmIChu
b2RlKQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAgICAgTm9kZSogcmVzdWx0ID0g
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oY29uc3RhbnQpKTsKLSAgICAgICAgbV9jb25z
dGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZSA9IHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGgu
ZnJlZXplKGNvbnN0YW50VmFsdWUpKSk7CiAgICAgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9u
cyB0byBnZXQvc2V0IHRoZSB0aGlzIHZhbHVlLgpAQCAtNTkzLDE0OSArNTcyLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgc2V0KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT50aGlzUmVnaXN0
ZXIoKSwgdmFsdWUpOwogICAgIH0KIAotICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNo
ZWNraW5nIG5vZGVzIGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSog
bm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5vcCgpID09IEpTQ29uc3RhbnQ7Ci0g
ICAgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gaXNKU0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlz
SW50MzIoKTsKLSAgICB9Ci0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBj
b25zdGFudCB2YWx1ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2Rl
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgg
KyBub2RlLT5jb25zdGFudE51bWJlcigpKTsKLSAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50
MzJDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25z
dGFudChub2RlKSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0lu
dDMyKCk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0
YW50IHdpdGggdGhlIHZhbHVlICd1bmRlZmluZWQnLgotICAgIE5vZGUqIGNvbnN0YW50VW5kZWZp
bmVkKCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0
IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsK
LSAgICAgICAgICAgIC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3IgdW5kZWZpbmVkLCBp
ZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lz
dGVycygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50VW5kZWZpbmVkID0gMDsgbV9jb25z
dGFudFVuZGVmaW5lZCA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnRVbmRlZmluZWQp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25z
dGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRVbmRlZmluZWQpOwot
ICAgICAgICAgICAgICAgIGlmICh0ZXN0TWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25zdGFudFVuZGVmaW5lZCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB1bmRlZmluZWQgdG8gdGhlIENvZGVCbG9jaydz
IGNvbnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4K
LSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFu
dHMpOwotICAgICAgICAgICAgYWRkQ29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAg
ICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NF
UlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudFVuZGVmaW5lZCBt
dXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRo
YXQgaGFzIHRoZSB2YWx1ZSAndW5kZWZpbmVkJy4KLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2Nr
LT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRVbmRl
ZmluZWQpLmlzVW5kZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2Nv
bnN0YW50VW5kZWZpbmVkKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEg
SlNDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSAnbnVsbCcuCi0gICAgTm9kZSogY29uc3RhbnROdWxs
KCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50TnVsbCBiZWVuIHNldCB1cCB5ZXQ/
Ci0gICAgICAgIGlmIChtX2NvbnN0YW50TnVsbCA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAg
Ly8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciBudWxsLCBpZiB3ZSBmaW5kIGl0LCB3ZSBj
YW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFu
dHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAg
ICAgZm9yIChtX2NvbnN0YW50TnVsbCA9IDA7IG1fY29uc3RhbnROdWxsIDwgbnVtYmVyT2ZDb25z
dGFudHM7ICsrbV9jb25zdGFudE51bGwpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RN
ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCAr
IG1fY29uc3RhbnROdWxsKTsKLSAgICAgICAgICAgICAgICBpZiAodGVzdE1lLmlzTnVsbCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TnVsbCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCBudWxsIHRvIHRoZSBDb2RlQmxv
Y2sncyBjb25zdGFudHMsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFu
dHMuCi0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29u
c3RhbnRzKTsKLSAgICAgICAgICAgIGFkZENvbnN0YW50KGpzTnVsbCgpKTsKLSAgICAgICAgICAg
IG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtX2NvbnN0YW50TnVsbCBtdXN0IHJl
ZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFz
IHRoZSB2YWx1ZSAnbnVsbCcuCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TnVsbCkuaXNOdWxsKCkp
OwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TnVsbCk7Ci0gICAgfQot
Ci0gICAgLy8gVGhpcyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZh
bHVlIDEuCi0gICAgTm9kZSogb25lKCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50
MSBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAgIGlmIChtX2NvbnN0YW50MSA9PSBVSU5UX01BWCkg
ewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciB0aGUgdmFsdWUg
MSwgaWYgd2UgZmluZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhpcyEKLSAgICAgICAgICAgIHVu
c2lnbmVkIG51bWJlck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRS
ZWdpc3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAobV9jb25zdGFudDEgPSAwOyBtX2NvbnN0YW50
MSA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnQxKSB7Ci0gICAgICAgICAgICAgICAg
SlNWYWx1ZSB0ZXN0TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJl
Z2lzdGVySW5kZXggKyBtX2NvbnN0YW50MSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RNZS5p
c0ludDMyKCkgJiYgdGVzdE1lLmFzSW50MzIoKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50MSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgMSB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBh
bmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAgICAgICAg
QVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAg
ICAgICBhZGRDb25zdGFudChqc051bWJlcigxKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5h
cHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMu
c2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudDEgbXVzdCByZWZlciB0byBhbiBlbnRyeSBp
biB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUgaW50ZWdlciB2YWx1
ZSAxLgotICAgICAgICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudDEpLmlzSW50MzIoKSk7Ci0gICAgICAgIEFTU0VS
VChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBt
X2NvbnN0YW50MSkuYXNJbnQzMigpID09IDEpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFu
dChtX2NvbnN0YW50MSk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMg
YSBEb3VibGVDb25zdGFudCB3aXRoIHRoZSB2YWx1ZSBOYU4uCi0gICAgTm9kZSogY29uc3RhbnRO
YU4oKQotICAgIHsKLSAgICAgICAgSlNWYWx1ZSBuYW4gPSBqc05hTigpOwotICAgICAgICAKLSAg
ICAgICAgLy8gSGFzIG1fY29uc3RhbnROYU4gYmVlbiBzZXQgdXAgeWV0PwotICAgICAgICBpZiAo
bV9jb25zdGFudE5hTiA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBj
b25zdGFudCBwb29sIGZvciB0aGUgdmFsdWUgTmFOLCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVz
dCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBt
X2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAgICAgZm9y
IChtX2NvbnN0YW50TmFOID0gMDsgbV9jb25zdGFudE5hTiA8IG51bWJlck9mQ29uc3RhbnRzOyAr
K21fY29uc3RhbnROYU4pIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29k
ZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3Rh
bnROYU4pOwotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlOjplbmNvZGUodGVzdE1lKSA9PSBK
U1ZhbHVlOjplbmNvZGUobmFuKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29u
c3RhbnQobV9jb25zdGFudE5hTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFk
ZCB0aGUgdmFsdWUgbmFuIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMsIGFuZCBhZGQgYSBj
b3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAgICBBU1NFUlQobV9j
b25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIGFkZENv
bnN0YW50KG5hbik7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNv
cmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJs
b2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gbV9jb25zdGFudE5hTiBtdXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sn
cyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2YWx1ZSBuYW4uCi0gICAgICAgIEFTU0VSVCht
X2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2Nv
bnN0YW50TmFOKS5pc0RvdWJsZSgpKTsKLSAgICAgICAgQVNTRVJUKHN0ZDo6aXNuYW4obV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFu
dE5hTikuYXNEb3VibGUoKSkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0
YW50TmFOKTsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogY2VsbENvbnN0YW50KEpTQ2VsbCogY2Vs
bCkKLSAgICB7Ci0gICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZSo+OjpBZGRSZXN1bHQgcmVz
dWx0ID0gbV9jZWxsQ29uc3RhbnROb2Rlcy5hZGQoY2VsbCwgbnVsbHB0cik7Ci0gICAgICAgIGlm
IChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgQVNTRVJUKCFIZWFwOjppc1pvbWJp
ZmllZChjZWxsKSk7Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRkVG9H
cmFwaChXZWFrSlNDb25zdGFudCwgT3BJbmZvKGNlbGwpKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgfQotICAgIAotICAg
IE5vZGUqIGluZmVycmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlm
ICh2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnQodmFsdWUu
YXNDZWxsKCkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudEZvclZhbHVlKHZhbHVlKTsK
LSAgICB9Ci0gICAgCiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lOwpA
QCAtODMxLDE0ICs2NjcsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3Rh
bnRXaXRoU3RydWN0dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKLSAgICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IGNlbGxDb25zdGFudChvYmplY3Qp
OworICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0ganNDb25zdGFudChvYmplY3QpOwogICAgICAg
ICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsK
ICAgICB9CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpT
Q2VsbCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudFdpdGhTdHJ1
Y3R1cmVDaGVjayhvYmplY3QsIG9iamVjdC0+c3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm4g
Y2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwgbV9ncmFwaC5mcmVlemUob2Jq
ZWN0KS0+c3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRp
Y3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQpAQCAtOTk3LDM2ICs4
MzMsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIGN1cnJl
bnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgogICAgIHVuc2lnbmVkIG1fY3VycmVudElu
ZGV4OwogCi0gICAgLy8gV2UgdXNlIHRoZXNlIHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9u
LCBhbmQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCi0gICAgLy8gc3BlY2lhbCBoYW5kbGluZyB3ZSBt
YWtlIHN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBpbiB0aGUKLSAgICAvLyBD
b2RlQmxvY2sncyBjb25zdGFudCBwb29sLiBUaGVzZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVk
IHRvCi0gICAgLy8gVUlOVF9NQVgsIGFuZCBsYXppbHkgdXBkYXRlZCB0byBob2xkIGFuIGluZGV4
IGludG8gdGhlIENvZGVCbG9jaydzCi0gICAgLy8gY29uc3RhbnQgcG9vbCwgYXMgbmVjZXNzYXJ5
LgotICAgIHVuc2lnbmVkIG1fY29uc3RhbnRVbmRlZmluZWQ7Ci0gICAgdW5zaWduZWQgbV9jb25z
dGFudE51bGw7Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudE5hTjsKLSAgICB1bnNpZ25lZCBtX2Nv
bnN0YW50MTsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIHVuc2lnbmVkPiBtX2NlbGxDb25zdGFudHM7
Ci0gICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj4gbV9jZWxsQ29uc3RhbnROb2RlczsKLQotICAg
IC8vIEEgY29uc3RhbnQgaW4gdGhlIGNvbnN0YW50IHBvb2wgbWF5IGJlIHJlcHJlc2VudGVkIGJ5
IG1vcmUgdGhhbiBvbmUKLSAgICAvLyBub2RlIGluIHRoZSBncmFwaCwgZGVwZW5kaW5nIG9uIHRo
ZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQuCi0gICAgc3RydWN0IENvbnN0YW50
UmVjb3JkIHsKLSAgICAgICAgQ29uc3RhbnRSZWNvcmQoKQotICAgICAgICAgICAgOiBhc0ludDMy
KDApCi0gICAgICAgICAgICAsIGFzTnVtZXJpYygwKQotICAgICAgICAgICAgLCBhc0pTVmFsdWUo
MCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgTm9kZSogYXNJbnQzMjsKLSAgICAg
ICAgTm9kZSogYXNOdW1lcmljOwotICAgICAgICBOb2RlKiBhc0pTVmFsdWU7Ci0gICAgfTsKLQot
ICAgIC8vIFRyYWNrIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgdGhlIGN1
cnJlbnQgdmFsdWUgZm9yIGV2ZXJ5Ci0gICAgLy8gcmVnaXN0ZXIgdmFsdWUgaW4gdGhlIGJ5dGVj
b2RlIC0gYXJndW1lbnQsIGxvY2FsLCBhbmQgdGVtcG9yYXJ5LgotICAgIFZlY3RvcjxDb25zdGFu
dFJlY29yZCwgMTY+IG1fY29uc3RhbnRzOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50VW5k
ZWZpbmVkOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKKyAgICBGcm96ZW5WYWx1
ZSogbV9jb25zdGFudE5hTjsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE9uZTsKKyAgICBW
ZWN0b3I8Tm9kZSosIDE2PiBtX2NvbnN0YW50czsKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJn
dW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVu
dHM7CkBAIC0xMDYxLDcgKzg3Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vICh0aGUgbWFjaGlu
ZSBjb2RlIGJsb2NrLCB3aGljaCBpcyB0aGUgdHJhbnNpdGl2ZSwgdGhvdWdoIG5vdCBuZWNlc3Nh
cmlseQogICAgICAgICAvLyBkaXJlY3QsIGNhbGxlcikuCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25l
ZD4gbV9pZGVudGlmaWVyUmVtYXA7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFu
dFJlbWFwOwogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJSZW1hcDsK
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3N3aXRjaFJlbWFwOwogICAgICAgICAKQEAgLTEx
MzIsMTEgKzk0Miw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZy
YW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1fY29uc3RhbnRSZW1hcFtvcGVy
YW5kLnRvQ29uc3RhbnRJbmRleCgpXSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5p
c0NvbnN0YW50KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKIAogICAgICAg
ICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMTE3MCwxMSArOTc2LDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHM7CiAgICAgLy8gTWFwcGlu
ZyBiZXR3ZWVuIGlkZW50aWZpZXIgbmFtZXMgYW5kIG51bWJlcnMuCiAgICAgQm9ycm93ZWRJZGVu
dGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsKLSAgICAvLyBNYXBwaW5nIGJldHdlZW4gdmFsdWVz
IGFuZCBjb25zdGFudCBudW1iZXJzLgotICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwotICAg
IC8vIEluZGV4IG9mIHRoZSBlbXB0eSB2YWx1ZSwgb3IgVUlOVF9NQVggaWYgdGhlcmUgaXMgbm8g
bWFwcGluZy4gVGhpcyBpcyBhIGhvcnJpYmxlCi0gICAgLy8gd29yay1hcm91bmQgZm9yIHRoZSBm
YWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5IiB2YWx1ZXMuCi0gICAgdW5z
aWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsKICAgICAKICAgICBDb2RlQmxvY2sqIG1fZGZnQ29k
ZUJsb2NrOwogICAgIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwIG1fY2FsbENvbnRleHRNYXA7
CkBAIC0xMjIyLDEwICsxMDIzLDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgK
ICAgICBBU1NFUlQocmVnaXN0ZXJPZmZzZXQgPD0gMCk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9u
S2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9u
S2luZEZvcihraW5kKTsKICAgICAKLSAgICBpZiAobV9ncmFwaC5pc0NvbnN0YW50KGNhbGxUYXJn
ZXQpKSB7Ci0gICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoCi0gICAgICAg
ICAgICBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQpKS5zZXRJc1Byb3ZlZCh0
cnVlKTsKLSAgICB9CisgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCisgICAgICAg
IGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkp
LnNldElzUHJvdmVkKHRydWUpOwogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0
aW1pemUoKSkgewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBo
YXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5
bW9ycGhpY2FsbHkKQEAgLTE1MzYsNyArMTMzNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKE5vZGUKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQg
cmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKQogewogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAxKSB7IC8vIE1hdGgubWluKCkKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnROYU4pKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCkBAIC0xNTYxLDcg
KzEzNjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAg
c3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzogewogICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLmFicygpCi0gICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjb25zdGFudE5hTigp
KTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRv
R3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROYU4pKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xNTg1LDcgKzEzODQsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoaW50CiAgICAgY2FzZSBDb3NJbnRyaW5zaWM6CiAg
ICAgY2FzZSBTaW5JbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzID09IDEpIHsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIGNvbnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihy
ZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5h
TikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
MTczMiwxOSArMTUzMSwxOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
aW50CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIERGR1RydWVJbnRyaW5zaWM6IHsKLSAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0SlNDb25zdGFudEZvclZh
bHVlKGpzQm9vbGVhbih0cnVlKSkpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLCBqc0NvbnN0YW50KGpzQm9vbGVhbih0cnVlKSkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgT1NSRXhpdEludHJpbnNpYzogewogICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIocmVzdWx0T3BlcmFuZCksIGNvbnN0YW50VW5kZWZpbmVkKCkpOworICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5m
byhtX2NvbnN0YW50VW5kZWZpbmVkKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgSXNGaW5hbFRpZXJJbnRyaW5zaWM6IHsKICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwKLSAgICAgICAgICAgIGdldEpTQ29uc3RhbnRG
b3JWYWx1ZShqc0Jvb2xlYW4oT3B0aW9uczo6dXNlRlRMSklUKCkgPyBpc0ZUTChtX2dyYXBoLm1f
cGxhbi5tb2RlKSA6IHRydWUpKSk7CisgICAgICAgICAgICBqc0NvbnN0YW50KGpzQm9vbGVhbihP
cHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTE4MzksNyArMTYz
OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAg
Tm9kZSogcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzIDw9IDEpCi0gICAgICAgICAgICByZXN1bHQgPSBjZWxsQ29uc3RhbnQobV92bS0+c21h
bGxTdHJpbmdzLmVtcHR5U3RyaW5nKCkpOworICAgICAgICAgICAgcmVzdWx0ID0ganNDb25zdGFu
dChtX3ZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoVG9TdHJpbmcsIGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpKTsKICAgICAgICAgCkBAIC0xOTgwLDcgKzE3
NzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIAogICAgIE5v
ZGUqIGxvYWRlZFZhbHVlOwogICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAg
ICAgbG9hZGVkVmFsdWUgPSBjZWxsQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkuYXND
ZWxsKCkpOworICAgICAgICBsb2FkZWRWYWx1ZSA9IGpzQ29uc3RhbnQodmFyaWFudC5zcGVjaWZp
Y1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5
T2Zmc2V0KAogICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKQEAgLTIxNTQsOSArMTk1Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByZXBhcmVUb1BhcnNl
QmxvY2soKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NvbnN0YW50cy5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFudFJlY29yZCgpOwotICAg
IG1fY2VsbENvbnN0YW50Tm9kZXMuY2xlYXIoKTsKKyAgICBtX2NvbnN0YW50cy5yZXNpemUoMCk7
CiB9CiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNraXBUb3AsIHVuc2ln
bmVkIHNraXBDb3VudCkKQEAgLTIxODgsOCArMTk4NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+aXNDYXB0dXJlZCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIHZhcmlhYmxl
LT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCi0gICAgICAgICAgICAgICAgbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ2FjaGUpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50KSk7Cisg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAgIHZhcmlhYmxlLT5tZXJn
ZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJbmRleGlu
Z1R5cGUpKTsKICAgICAgICAgICAgIApAQCAtMjIzNSwxMyArMjAzMSwxNSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgLy8gPT09IEZ1bmN0aW9u
IGVudHJ5IG9wY29kZXMgPT09CiAKLSAgICAgICAgY2FzZSBvcF9lbnRlcjoKKyAgICAgICAgY2Fz
ZSBvcF9lbnRlcjogeworICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVkID0gYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudFVuZGVmaW5lZCkpOwogICAgICAgICAgICAgLy8g
SW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm1fbnVtVmFyczsgKytp
KQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgY29uc3Rh
bnRVbmRlZmluZWQoKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAgICAgICAgICAgIHNldCh2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVkLCBJbW1lZGlhdGVOYWtlZFNldCk7
CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnNwZWNpYWxp
emF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAgICAgICAgICAgc2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLCBjb25zdGFudFVuZGVmaW5lZCgpLCBJbW1lZGlh
dGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KDApLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2VudGVyKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfdG91Y2hfZW50cnk6CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQo
KSkKQEAgLTIyNTYsNyArMjA1NCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfHwgY2FjaGVkU3RydWN0dXJlLT5jbGFzc0lu
Zm8oKS0+bWV0aG9kVGFibGUudG9UaGlzICE9IEpTT2JqZWN0OjppbmZvKCktPm1ldGhvZFRhYmxl
LnRvVGhpcwogICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQogICAgICAgICAgICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2Fj
aGVXYXRjaHBvaW50KQogICAgICAgICAgICAgICAgICAgICB8fCAob3AxLT5vcCgpID09IEdldExv
Y2FsICYmIG9wMS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnN0cnVjdHVyZUNoZWNrSG9pc3RpbmdG
YWlsZWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0VGhpcyhhZGRUb0dyYXBoKFRvVGhp
cywgb3AxKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIyNzMsMTEgKzIwNzAsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBp
bnQgY2FsbGVlT3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGNhbGxlZU9wZXJhbmQp
KTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICBK
U0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgpOwotICAgICAgICAgICAgICAgIEFT
U0VSVChjZWxsLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oY2VsbCk7CisgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxs
ZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmdW5jdGlvbi0+YWxsb2NhdGlvblN0cnVjdHVy
ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQWxsb2NhdGlvblByb2ZpbGVX
YXRjaHBvaW50LCBPcEluZm8oZnVuY3Rpb24pKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhl
IGNhbGxlZSBpcyBzdGlsbCBsaXZlIHVwIHRvIHRoaXMgcG9pbnQuCkBAIC0yMzUxLDEwICsyMTQ0
LDExIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRGdW5jdGlvbikpIHsKICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNhY2hlZEZ1bmN0
aW9uKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoY2FjaGVkRnVuY3Rpb24tPmluaGVyaXRzKEpT
RnVuY3Rpb246OmluZm8oKSkpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oY2FjaGVkRnVuY3Rpb24pLCBhY3R1YWxD
YWxsZWUpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhj
YWNoZWRGdW5jdGlvbikpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rp
b24sIE9wSW5mbyhmcm96ZW4pLCBhY3R1YWxDYWxsZWUpOworICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9jYWxsZWUpOwogICAgICAgICB9CkBAIC0yNDE4LDcgKzIy
MTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVn
aXN0ZXIoc3JjRHN0KTsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxS
ZWdpc3Rlcik7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2Fm
ZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3Jj
RHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgYWRk
VG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE9uZSkpKSkpOwogICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfaW5jKTsKICAgICAgICAgfQogCkBAIC0yNDI2LDcgKzIyMjAsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBp
bnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rl
cik7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRU
b0dyYXBoKEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0Vmly
dHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE9uZSkpKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfZGVjKTsKICAgICAgICAgfQogCkBAIC0yNjQzLDcgKzI0MzcsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9l
cV9udWxsOiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChD
b21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRU
b0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE51bGwpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXFf
bnVsbCk7CiAgICAgICAgIH0KIApAQCAtMjY2Myw3ICsyNDU3LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsK
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3Qs
IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpKTsK
KyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCksIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25z
dGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxs
KSkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0K
IApAQCAtMjc4OCw3ICsyNTgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25l
ZCByZWxhdGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAg
ICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9H
cmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAg
ICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVl
LCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKTsKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRl
eCArIHJlbGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamVx
X251bGwpKSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVs
bCk7CiAgICAgICAgIH0KQEAgLTI3OTYsNyArMjU5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25k
aXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxs
KCkpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFD
b25zdGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRO
dWxsKSkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRh
KG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJ
bmRleCArIHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09Q
Q09ERShvcF9qbmVxX251bGwpOwogICAgICAgICB9CkBAIC0yODg1LDcgKzI2NzksNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgdW5z
aWduZWQgdGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOwog
ICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUlu
ZGV4KCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGRh
dGEuY2FzZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KGpzTnVtYmVyKHN0
YXRpY19jYXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7CisgICAgICAgICAg
ICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgobV9n
cmFwaC5mcmVlemUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkp
KSwgdGFyZ2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmbHVzaElmVGVybWluYWwo
ZGF0YSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwpAQCAt
MzA1NSw3ICsyODQ5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFBy
b3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFy
V2l0aFZhckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksIGNlbGxDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
IHdlYWtKU0NvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3QoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDbG9zdXJl
VmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczog
ewpAQCAtMzA2Myw3ICsyODU3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIGlmIChhY3RpdmF0aW9uCiAgICAgICAgICAgICAgICAg
ICAgICYmIGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5p
c1N0aWxsVmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9u
UmVlbnRyeVdhdGNocG9pbnQsIE9wSW5mbyhhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50
KGFjdGl2YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCB3ZWFrSlNDb25zdGFudChhY3RpdmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGRzdCksCkBAIC0zMTEyLDcgKzI5MDYsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFu
dFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQo
KS5vbmx5U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1
ZSBzcGVjaWZpY1ZhbHVlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNW
YWx1ZS5hc0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGRzdCksIGpzQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0NlbGwoKSkpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBo
YW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvcGVy
YW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMTMxLDcgKzI5MjUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRj
aHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChzcGVj
aWZpY1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkBAIC0zMTQ3LDcgKzI5NDEsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2lu
dCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQodmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0Nv
bnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMyNDgsNyAr
MzA0Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzogewotICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKSwgZ2V0SlNDb25zdGFudEZvclZhbHVlKEpTVmFsdWUoKSkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwganNDb25z
dGFudChKU1ZhbHVlKCkpKTsKICAgICAgICAgICAgIEFTU0VSVChvcGVyYW5kSXNMb2NhbChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fbGF6
eVZhcnMuc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KS50b0xvY2FsKCkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5pdF9sYXp5X3JlZyk7
CkBAIC0zNDAzLDEzICszMTk3LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6YnVpbGRPcGVyYW5k
TWFwc0lmTgogICAgIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51
bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICBtX2lkZW50aWZpZXJNYXAuYWRkKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGkpLmltcGwoKSwgaSk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpIHsK
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsgRmly
c3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICBpZiAoIXZhbHVlKQotICAgICAgICAg
ICAgbV9lbXB0eUpTVmFsdWVJbmRleCA9IGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9qc1ZhbHVlTWFwLmFkZChKU1ZhbHVlOjplbmNv
ZGUodmFsdWUpLCBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgIH0KICAgICAK
ICAgICBtX2hhdmVCdWlsdE9wZXJhbmRNYXBzID0gdHJ1ZTsKIH0KQEAgLTM1MDcsNyArMzI5NCw2
IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgYnl0
ZUNvZGVQYXJzZXItPmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSgpOwogICAgICAgICAKICAg
ICAgICAgbV9pZGVudGlmaWVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlm
aWVycygpKTsKLSAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcC5y
ZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKICAgICAgICAgbV9z
d2l0Y2hSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSk7
CiAKQEAgLTM1MTgsMjQgKzMzMDQsNiBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6SW5saW5lCiAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGguaWRlbnRp
ZmllcnMoKS5hZGRMYXppbHkocmVwKTsKICAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ld
ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgfQotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kp
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjb2RlQmxvY2stPmdldENvbnN0YW50KGkg
KyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGJ5dGVDb2RlUGFyc2VyLT5tX2VtcHR5SlNWYWx1ZUluZGV4
ID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2Vt
cHR5SlNWYWx1ZUluZGV4ID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkNv
bnN0YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleDsKLSAgICAgICAg
ICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPmFkZENvbnN0YW50KEpTVmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0YW50cy5hcHBlbmQoQ29uc3Rh
bnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY29uc3Rh
bnRSZW1hcFtpXSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2VtcHR5SlNWYWx1ZUluZGV4OwotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSlNWYWx1ZU1h
cDo6QWRkUmVzdWx0IHJlc3VsdCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2pzVmFsdWVNYXAuYWRkKEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSksIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAg
ICAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgYnl0ZUNv
ZGVQYXJzZXItPmFkZENvbnN0YW50KHZhbHVlKTsKLSAgICAgICAgICAgICAgICBieXRlQ29kZVBh
cnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLSAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIHdl
IGlubGluZSB0aGUgc2FtZSBjb2RlIGJsb2NrIG11bHRpcGxlIHRpbWVzLCB3ZSBkb24ndCB3YW50
IHRvIG5lZWRsZXNzbHkKICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZSBpdHMgY29uc3RhbnQgYnVm
ZmVycy4KQEAgLTM1NjYsMTMgKzMzMzQsMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgICAgICBtX2lubGluZUNhbGxGcmFtZSA9IDA7CiAKICAgICAgICAg
bV9pZGVudGlmaWVyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygp
KTsKLSAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29u
c3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcC5yZXNpemUo
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKICAgICAgICAgbV9zd2l0Y2hS
ZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJz
KCk7ICsraSkKICAgICAgICAgICAgIG1faWRlbnRpZmllclJlbWFwW2ldID0gaTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3Rl
cnMoKTsgKytpKQotICAgICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gaSArIEZpcnN0Q29u
c3RhbnRSZWdpc3RlckluZGV4OwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVC
bG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKTsgKytpKQogICAgICAgICAgICAgbV9jb25z
dGFudEJ1ZmZlclJlbWFwW2ldID0gaTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBj
b2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpOyArK2kpCkBAIC0zNTgwLDE0ICsz
MzQ1LDEzIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAg
ICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IGZhbHNlOwogICAgIH0KICAgICAK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29uc3RhbnRSZW1hcC5zaXplKCk7ICsraSkK
LSAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRSZW1hcFtpXSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpKTsKLSAgICAKICAgICBieXRlQ29kZVBhcnNl
ci0+bV9pbmxpbmVTdGFja1RvcCA9IHRoaXM7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQ29kZUJsb2NrKCkKIHsKKyAgICBwcmVwYXJlVG9QYXJzZUJsb2NrKCk7CisgICAgCiAgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jazsKICAg
ICAKICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpKSB7CkBAIC0zNjg0LDYgKzM0NDgsOCBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAKICAgICAvLyBTaG91bGQg
aGF2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQobV9j
dXJyZW50SW5kZXggPT0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIAor
ICAgIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKIH0KIAogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIG9uIGNvbnN0YW50IC0+IGpldHRpc29uIGFsbCBv
dGhlciB0YXJnZXRzIGFuZCBtZXJnZS4KICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5s
YXN0KCktPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChibG9jay0+bGFzdCgp
LT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUq
IHZhbHVlID0gYmxvY2stPmxhc3QoKS0+Y2hpbGQxKCktPmNvbnN0YW50KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBUcmlTdGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jayA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGZvdW5kID09
IEZhbHNlVHJpU3RhdGUgJiYgaS0tOykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjgsMjIgKzE2OCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5vcCgpICE9IG5vZGUtPm9w
KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChvdGhlck5vZGUtPmNvbnN0YW50TnVtYmVyKCkgIT0gbm9kZS0+Y29uc3RhbnROdW1iZXIo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
cmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0g
ICAgCi0gICAgTm9kZSogd2Vha0NvbnN0YW50Q1NFKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRleEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAg
ICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAg
ICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBXZWFrSlNDb25zdGFudCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vh
a0NvbnN0YW50KCkgIT0gbm9kZS0+d2Vha0NvbnN0YW50KCkpCisgICAgICAgICAgICBpZiAob3Ro
ZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUtPmNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CkBA
IC00MjAsNyArNDA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24oSlNDZWxsKiBmdW5jdGlvbiwgTm9kZSog
Y2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEZyb3plblZhbHVlKiBm
dW5jdGlvbiwgTm9kZSogY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
ZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0xMjcwLDEzICsxMjU1LDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAg
ICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgLy8gRklYTUU6IGhhdmUgQ1NFIGZvciB3ZWFrIGNvbnN0YW50
cyBhZ2FpbnN0IHN0cm9uZyBjb25zdGFudHMgYW5kIHZpY2UtdmVyc2EuCi0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudCh3ZWFrQ29uc3RhbnRDU0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAg
ICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKICAgICAgICAgICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyArNzYsNiBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2Ug
RG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pT
Q29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFBoYW50b206CiAgICAgY2Fz
ZSBIYXJkUGhhbnRvbToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5v
ZGUtPmZ1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkudmFsdWUoKSAhPSBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFu
dG9tKCk7CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CkBAIC0yNzMsOCArMjcz
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSB8fCBtX3N0YXRlLmRpZENsb2JiZXIoKSB8fCBub2RlLT5oYXNDb25zdGFu
dCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZSA9IG1fZ3JhcGguZnJlZXplKG1fc3Rh
dGUuZm9yTm9kZShub2RlKS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmICghKnZhbHVlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBDaGVj
ayBpZiBtZXJnaW5nIHRoZSBhYnN0cmFjdCB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgaW50byB0aGUg
YWJzdHJhY3QgdmFsdWUKQEAgLTI4Myw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8gdGhlbiB3ZSByZWZ1c2UgdG8gZm9sZC4KICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgb2xk
VmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
IGNvbnN0YW50VmFsdWU7Ci0gICAgICAgICAgICBjb25zdGFudFZhbHVlLnNldChtX2dyYXBoLCB2
YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICBjb25z
dGFudFZhbHVlLnNldChtX2dyYXBoLCAqdmFsdWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0
YXRlKCkpOwogICAgICAgICAgICAgY29uc3RhbnRWYWx1ZS5maXhUeXBlRm9yUmVwcmVzZW50YXRp
b24obm9kZSk7CiAgICAgICAgICAgICBpZiAob2xkVmFsdWUubWVyZ2UoY29uc3RhbnRWYWx1ZSkp
CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMzAsNyArMzMwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhcmlhbnQu
c3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQo
bm9kZSwgbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKQEAgLTQ1Myw3ICs0NTMsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIHNw
ZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8o
Y2VsbCkpOworICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShj
ZWxsKSwgSlNDb25zdGFudCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZnJl
ZXplKGNlbGwpKSk7CiAgICAgICAgIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9y
aWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlz
aW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3Rh
bnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2Fs
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTEsNyArODUxLDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5v
cmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBP
dGhlclVzZSkpOwogICAgICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPE90aGVyVXNl
Pihub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1dlYWtDb25zdGFudChtX2dyYXBoLmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5nbG9iYWxUaGlzT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0xMDM0LDggKzEwMzUsOCBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6IHsKICAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9i
amVjdE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCi0g
ICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYykpKTsKKyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUs
IEpTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
KSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgaGF2ZSBh
biB1bmNvbmRpdGlvbmFsIGJhcnJpZXIuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMTA0CiAgICAgICAgICAgICBOb2RlKiBiYXJyaWVy
Tm9kZSA9IG1fZ3JhcGguYWRkTm9kZSgKQEAgLTEwNjcsNyArMTA2OCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2Jv
ZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNl
IFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vh
a0pTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgR2V0Q2Fs
bGVlOgogICAgICAgICBjYXNlIEZsdXNoOgpAQCAtMTE5Myw5ICsxMTkzLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGlmICghZWRnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGVkZ2Uuc2V0VXNlS2luZChLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgICAgICBpZiAoIW1f
Z3JhcGguaXNDb25zdGFudChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICBKU1N0cmluZyogc3Ry
aW5nID0gZWRnZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCk7CisgICAgICAgICAg
ICBpZiAoIXN0cmluZykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEpT
U3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KGVkZ2Uubm9kZSgpKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5n
dGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTYxOCw4
ICsxNjE4LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdl
Lm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvbGROb2RlLT5oYXNDb25zdGFudCgp
KTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQob2xk
Tm9kZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBvbGROb2RlLT5hc0pTVmFsdWUoKTsKICAg
ICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
CkBAIC0xNzQxLDcgKzE3NDAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTm9kZSog
c2hpZnRBbW91bnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNJbnQzMiwgSlNDb25zdGFudCwgbm9kZS0+b3JpZ2luLAotICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KGpzTnVtYmVy
KGxvZ0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZy
ZWV6ZShqc051bWJlcihsb2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CiAgICAgICAgIAogICAgICAg
ICAvLyBXZSBjYW4gdXNlIGEgQml0TFNoaWZ0IGhlcmUgYmVjYXVzZSB0eXBlZCBhcnJheXMgd2ls
bCBuZXZlciBoYXZlIGEgYnl0ZUxlbmd0aAogICAgICAgICAvLyB0aGF0IG92ZXJmbG93cyBpbnQz
Mi4KQEAgLTE5MTUsNyArMTkxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9k
ZS0+b3JpZ2luLAotICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnROdW1i
ZXIoKSkpOworICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnQoKSkpOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRnJv
emVuVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24o
KQoreworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1cm4gJmVtcHR5Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdGcm96ZW5WYWx1ZV9oCisjZGVmaW5l
IERGR0Zyb3plblZhbHVlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCitjbGFz
cyBGcm96ZW5WYWx1ZSB7CitwdWJsaWM6CisgICAgRnJvemVuVmFsdWUoKQorICAgICAgICA6IG1f
c3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgICAgICwgbV9zdHJ1Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3N0
cm9uZyhmYWxzZSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YWx1ZSB8fCAhdmFs
dWUuaXNDZWxsKCkpOworICAgIH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAg
ICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3N0cm9uZyhmYWxzZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCgoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgPT0gISFzdHJ1
Y3R1cmUpOworICAgICAgICBBU1NFUlQoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSB8fCB2YWx1
ZS5hc0NlbGwoKS0+Y2xhc3NJbmZvKCkgPT0gc3RydWN0dXJlLT5jbGFzc0luZm8oKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSogZW1wdHlTaW5nbGV0b24oKTsKKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgCisg
ICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlOyB9CisgICAgCisgICAg
dm9pZCBtYXJrU3Ryb25nbHkoKQorICAgIHsKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3Zh
bHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9zdHJvbmcgPSB0cnVlOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzU3Ryb25nbHlNYXJrZWQoKSBjb25zdCB7IHJldHVybiBtX3N0cm9uZzsgfQor
ICAgIAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4
dCogY29udGV4dCkgY29uc3QKKyAgICB7CisgICAgICAgIG1fdmFsdWUuZHVtcEluQ29udGV4dEFz
c3VtaW5nU3RydWN0dXJlKG91dCwgY29udGV4dCwgbV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGR1bXBJbkNv
bnRleHQob3V0LCAwKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBH
cmFwaDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgdXRpbGl0eSBtZXRob2QgZm9yIERGRzo6R3Jh
cGg6OmZyZWV6ZSgpLiBZb3Ugc2hvdWxkIGFsbW9zdCBhbHdheXMgY2FsbAorICAgIC8vIEdyYXBo
OjpmcmVlemUoKSBkaXJlY3RseS4gQ2FsbGluZyB0aGlzIGluc3RlYWQgb2YgR3JhcGg6OmZyZWV6
ZSgpIGNhbiByZXN1bHQgaW4KKyAgICAvLyB0aGUgc2FtZSBjb25zdGFudCBiZWluZyB2aWV3ZWQg
YXMgaGF2aW5nIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgY291cnNlCisgICAgLy8g
b2YgY29tcGlsYXRpb24sIHdoaWNoIGNhbiBzb21ldGltZXMgY2F1c2UgYmFkIHRoaW5ncyB0byBo
YXBwZW4uIEZvciBleGFtcGxlLCB3ZQorICAgIC8vIG1heSBvYnNlcnZlIHRoYXQgb25lIHZlcnNp
b24gb2YgdGhlIGNvbnN0YW50IGhhcyBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgYnV0CisgICAg
Ly8gdGhlbiBhIGxhdGVyIHZlcnNpb24gbWF5IHN0YXJ0IHRvIGhhdmUgYSB3YXRjaGFibGUgc3Ry
dWN0dXJlIGR1ZSB0byBhIHRyYW5zaXRpb24uCisgICAgLy8gVGhlIHBvaW50IG9mIGZyZWV6aW5n
IGlzIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseSBvbmx5IHNlZSBvbmUgdmVyc2lvbiBvZgor
ICAgIC8vIGNvbnN0YW50cywgYnV0IHRoYXQgcmVxdWlyZXMgZnJlZXppbmcgdGhyb3VnaCB0aGUg
R3JhcGguCisgICAgc3RhdGljIEZyb3plblZhbHVlIGZyZWV6ZShKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlKAorICAgICAgICAgICAgdmFsdWUsICghIXZh
bHVlICYmIHZhbHVlLmlzQ2VsbCgpKSA/IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSA6IG51
bGxwdHIpOworICAgIH0KKworICAgIEpTVmFsdWUgbV92YWx1ZTsKKyAgICBTdHJ1Y3R1cmUqIG1f
c3RydWN0dXJlOworICAgIGJvb2wgbV9zdHJvbmc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3pl
blZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBs
YW4mIHBsYW4sIExvbmdMaXYKICAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0
KCkpCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpCiAg
ICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikKLSAgICAsIG1fbXVz
dEhhbmRsZUFic3RyYWN0VmFsdWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxlVmFsdWVz
KQorICAgICwgbV9tdXN0SGFuZGxlVmFsdWVzKE9wZXJhbmRzTGlrZSwgcGxhbi5tdXN0SGFuZGxl
VmFsdWVzKQogICAgICwgbV9oYXNBcmd1bWVudHMoZmFsc2UpCiAgICAgLCBtX25leHRNYWNoaW5l
TG9jYWwoMCkKICAgICAsIG1fbWFjaGluZUNhcHR1cmVTdGFydChzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKQpAQCAtNzEsOCArNzEsOCBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFu
JiBwbGFuLCBMb25nTGl2CiB7CiAgICAgQVNTRVJUKG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXMuc2l6ZSgpOyBp
LS07KQotICAgICAgICBtX211c3RIYW5kbGVBYnN0cmFjdFZhbHVlc1tpXS5zZXRNb3N0U3BlY2lm
aWMoKnRoaXMsIHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsgaS0tOykKKyAgICAgICAgbV9tdXN0SGFuZGxl
VmFsdWVzW2ldID0gZnJlZXplKHBsYW4ubXVzdEhhbmRsZVZhbHVlc1tpXSk7CiB9CiAKIEdyYXBo
Ojp+R3JhcGgoKQpAQCAtMTc4LDcgKzE3OCw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICAvLyAoNSkgVGhlIGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9u
LiBUaGUgbWF5IGJlIG9mIHRoZSBmb3JtOgogICAgIC8vICAgICAgICAgQCMgICAtIGEgTm9kZUlu
ZGV4IHJlZmVyZW5jaW5nIGEgcHJpb3Igbm9kZSBpbiB0aGUgZ3JhcGguCiAgICAgLy8gICAgICAg
ICBhcmcjIC0gYW4gYXJndW1lbnQgbnVtYmVyLgotICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBp
bmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29uc3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFu
dHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZvciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFs
IGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlkIyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVC
bG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29kZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCks
IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMgZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAg
ICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9uIHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5
IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3BlcmF0aW9ucy4KICAgICBvdXQucHJpbnRmKCIl
IDRkOiVzPCVjJXU6IiwgKGludClub2RlLT5pbmRleCgpLCBza2lwcGVkID8gIiAgc2tpcHBlZCAg
IiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwpA
QCAtMjI1LDggKzIyNCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29u
c3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT50
cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1
bmN0aW9uKCkpLCAiLCAiKTsKLSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRz
KEpTRnVuY3Rpb246OmluZm8oKSkpIHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgaWYgKG5v
ZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxsKCktPmluaGVyaXRzKEpTRnVuY3Rpb246Omlu
Zm8oKSkpIHsKKyAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVu
Y3Rpb24qPihub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpLmFzQ2VsbCgpKTsKICAgICAgICAgICAg
IGlmIChmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24oKSkKICAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIjxob3N0IGZ1bmN0aW9uPiIpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzA2LDcgKzMwNSw3
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0
LnByaW50KG5vZGUtPnN0YXJ0Q29uc3RhbnQoKSwgIjpbIik7CiAgICAgICAgIENvbW1hUHJpbnRl
ciBhbm90aGVyQ29tbWE7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2RlLT5u
dW1Db25zdGFudHMoKTsgKytpKQotICAgICAgICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwg
aW5Db250ZXh0KG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50
KCkpW2ldLCBjb250ZXh0KSk7CisgICAgICAgICAgICBvdXQucHJpbnQoYW5vdGhlckNvbW1hLCBw
b2ludGVyRHVtcEluQ29udGV4dChmcmVlemUobV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5v
ZGUtPnN0YXJ0Q29uc3RhbnQoKSlbaV0pLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgi
XSIpOwogICAgIH0KICAgICBpZiAobm9kZS0+aGFzSW5kZXhpbmdUeXBlKCkpCkBAIC0zMjMsMTMg
KzMyMiw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoSlNWYWx1ZShub2RlLT50eXBlZEFycmF5KCkp
LCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7Ci0g
ICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkgewotICAgICAgICBvdXQucHJpbnQoY29tbWEsICIk
Iiwgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSk7Ci0gICAgICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAgb3V0LnByaW50KCIgPSAiLCBpbkNvbnRleHQo
dmFsdWUsIGNvbnRleHQpKTsKLSAgICB9Ci0gICAgaWYgKG9wID09IFdlYWtKU0NvbnN0YW50KQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2Vha0NvbnN0YW50KCkp
LCAiICgiLCBpbkNvbnRleHQoKm5vZGUtPndlYWtDb25zdGFudCgpLT5zdHJ1Y3R1cmUoKSwgY29u
dGV4dCksICIpIik7CisgICAgaWYgKG5vZGUtPmlzQ29uc3RhbnQoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT5jb25zdGFudCgpLCBjb250ZXh0
KSk7CiAgICAgaWYgKG5vZGUtPmlzSnVtcCgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJU
OiIsICpub2RlLT50YXJnZXRCbG9jaygpKTsKICAgICBpZiAobm9kZS0+aXNCcmFuY2goKSkKQEAg
LTc5Miw5ICs3ODYsNyBAQCB1bnNpZ25lZCBHcmFwaDo6cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9y
CiAKIEpTQWN0aXZhdGlvbiogR3JhcGg6OnRyeUdldEFjdGl2YXRpb24oTm9kZSogbm9kZSkKIHsK
LSAgICBpZiAoIW5vZGUtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBqc0R5bmFtaWNDYXN0PEpTQWN0aXZhdGlvbio+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
KTsKKyAgICByZXR1cm4gbm9kZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0FjdGl2YXRpb24qPigp
OwogfQogCiBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBHcmFwaDo6dHJ5R2V0UmVnaXN0ZXJz
KE5vZGUqIG5vZGUpCkBAIC04MDksMTMgKzgwMSwxMSBAQCBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiBHcmFwaDo6dHJ5R2V0CiAKIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6dHJ5R2V0Rm9s
ZGFibGVWaWV3KE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5oYXNDb25zdGFudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1p
Y0Nhc3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAg
SlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTQXJy
YXlCdWZmZXJWaWV3Kj4oKTsKICAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybiAwOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBpZiAoIXZpZXctPmxlbmd0aCgpKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgV1RGOjpsb2FkTG9hZEZlbmNl
KCk7CiAgICAgcmV0dXJuIHZpZXc7CiB9CkBAIC04MzIsOCArODIyLDI1IEBAIEpTQXJyYXlCdWZm
ZXJWaWV3KiBHcmFwaDo6dHJ5R2V0Rm9sZGFibGUKICAgICByZXR1cm4gdHJ5R2V0Rm9sZGFibGVW
aWV3KGNoaWxkKG5vZGUsIDApLm5vZGUoKSwgbm9kZS0+YXJyYXlNb2RlKCkpOwogfQogCit2b2lk
IEdyYXBoOjpyZWdpc3RlckZyb3plblZhbHVlcygpCit7CisgICAgbV9jb2RlQmxvY2stPmNvbnN0
YW50cygpLnJlc2l6ZSgwKTsKKyAgICBmb3IgKEZyb3plblZhbHVlKiB2YWx1ZSA6IG1fZnJvemVu
VmFsdWVzKSB7CisgICAgICAgIGlmICh2YWx1ZS0+aXNTdHJvbmdseU1hcmtlZCgpKQorICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmFkZENvbnN0YW50KHZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWUtPnZhbHVlKCkuaXNDZWxsKCkpCisgICAgICAgICAgICBtX3BsYW4ud2Vh
a1JlZmVyZW5jZXMuYWRkTGF6aWx5KHZhbHVlLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICB9Cisg
ICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNocmlua1RvRml0KCk7Cit9CisKIHZvaWQgR3Jh
cGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgZm9yIChGcm96
ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgeworICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFsdWUtPnN0cnVjdHVyZSgpKTsK
KyAgICB9CisgICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBudW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODQzLDE1ICs4NTAsNiBA
QCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OgogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50
ZXIobm9kZS0+ZXhlY3V0YWJsZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwOSw2
ICs5MDcsNDYgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAg
IH0KIH0KIAorRnJvemVuVmFsdWUqIEdyYXBoOjpmcmVlemUoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAoVU5MSUtFTFkoIXZhbHVlKSkKKyAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0
eVNpbmdsZXRvbigpOworICAgIAorICAgIGF1dG8gcmVzdWx0ID0gbV9mcm96ZW5WYWx1ZU1hcC5h
ZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgbnVsbHB0cik7CisgICAgaWYgKExJS0VMWSghcmVz
dWx0LmlzTmV3RW50cnkpKQorICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
KyAgICAKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IG1fZnJvemVuVmFsdWVz
LmFkZChGcm96ZW5WYWx1ZTo6ZnJlZXplKHZhbHVlKSk7Cit9CisKK0Zyb3plblZhbHVlKiBHcmFw
aDo6ZnJlZXplU3Ryb25nbHkoSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBGcm96ZW5WYWx1ZSogcmVz
dWx0ID0gZnJlZXplKHZhbHVlKTsKKyAgICByZXN1bHQtPm1hcmtTdHJvbmdseSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGg6OmNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIEZyb3plblZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgpKQor
ICAgICAgICBhc3NlcnRJc1dhdGNoZWQodmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICBpZiAobm9k
ZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgZGV0aHJlYWQoKTsKKyAgICBlbHNlCisgICAg
ICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSk7CisgICAgbm9k
ZS0+Y29udmVydFRvQ29uc3RhbnQodmFsdWUpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9D
b25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRUb0NvbnN0
YW50KG5vZGUsIGZyZWV6ZSh2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9TdHJv
bmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRUb0Nv
bnN0YW50KG5vZGUsIGZyZWV6ZVN0cm9uZ2x5KHZhbHVlKSk7Cit9CisKIHZvaWQgR3JhcGg6OmFz
c2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBpZiAoIXN0cnVjdHVy
ZS0+ZGZnU2hvdWxkV2F0Y2goKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0FyZ3Vt
ZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZH
RG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAiREZH
TG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNsdWRl
ICJERkdOb2RlLmgiCkBAIC0xNDQsNDMgKzE0NSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRl
dGhyZWFkKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCB1
bnNpZ25lZCBjb25zdGFudE51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgpID09
IEdldExvY2FsKQotICAgICAgICAgICAgZGV0aHJlYWQoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKTsKLSAgICAg
ICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwotICAgIH0KKyAgICBG
cm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOworICAgIEZyb3plblZhbHVlKiBmcmVl
emVTdHJvbmdseShKU1ZhbHVlIHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFsdWUp
LT5tYXJrU3Ryb25nbHkoKS4KICAgICAKLSAgICB1bnNpZ25lZCBjb25zdGFudFJlZ2lzdGVyRm9y
Q29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50
UmVnaXN0ZXI7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZpbmRDb25zdGFudCh2YWx1ZSwg
Y29uc3RhbnRSZWdpc3RlcikpIHsKLSAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBtX2Nv
ZGVCbG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVMYXp5
V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgbV9wbGFuLndyaXRlQmFy
cmllcnMsCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50
UmVnaXN0ZXJdLAotICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLAotICAgICAgICAgICAgICAg
IGNvbnN0YW50UmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKLSAgICB9CisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFu
dChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFsdWUpOworICAgIHZvaWQgY29udmVydFRvQ29u
c3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0VG9TdHJv
bmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKTsKICAgICAKICAgICB2b2lkIGFz
c2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgdm9pZCBjb252
ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKQotICAg
ICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgY29uc3RhbnRS
ZWdpc3RlckZvckNvbnN0YW50KHZhbHVlKSk7Ci0gICAgfQotCiAgICAgLy8gQ29kZUJsb2NrIGlz
IG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVt
cGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
PSBXVEY6OmRhdGFGaWxlKCksIER1bXBDb250ZXh0KiA9IDApOwogICAgIGVudW0gUGhpTm9kZUR1
bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKQEAgLTE5NCwxMSArMTY3
LDYgQEAgcHVibGljOgogICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55
dGhpbmcgd2FzIHByaW50ZWQuCiAgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYs
IGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9k
ZSwgRHVtcENvbnRleHQqIGNvbnRleHQpOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25z
dGFudFNwZWN1bGF0aW9uKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gc3BlY3Vs
YXRpb25Gcm9tVmFsdWUobm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKLSAg
ICB9Ci0gICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2Rl
KiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3Bl
Y3VsYXRlSW50MzIpCiAgICAgewogICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRk
IHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwpAQCAt
MzAzLDg4ICsyNzEsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zv
cihjb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCkpOwogICAg
IH0KICAgICAKLSAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3Rh
bnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5v
ZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKLSAg
ICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBi
b29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
b2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgYm9vbCBpc051
bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aXNO
dW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29u
c3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5D
b25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9k
ZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwot
ICAgIH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAg
ICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAg
ICBpZiAoIXZhbHVlLmlzQ2VsbCgpIHx8ICF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmICgh
Y2VsbC0+aW5oZXJpdHMoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIEhlbHBlciBt
ZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVl
T2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+dmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJ
bnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYWx1ZSBpc24ndCBpbnQzMjogIiwgdmFsdWUsICJcbiIp
OwotICAgICAgICAgICAgZHVtcCgpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotICAg
IH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKLSAgICB9
Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNCb29sZWFuKCk7Ci0gICAgfQot
ICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25z
dGFudChub2RlKSk7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBq
c0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgY29uc3Qg
Y2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVj
dHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKQEAgLTgwMiw2ICs2ODgs
OCBAQCBwdWJsaWM6CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhO
b2RlKiwgQXJyYXlNb2RlKTsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFibGVW
aWV3Rm9yQ2hpbGQxKE5vZGUqKTsKICAgICAKKyAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVz
KCk7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBv
dmVycmlkZTsKICAgICAKICAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxlQXNz
ZXJ0aW9uRmFpbHVyZSgKQEAgLTgxNSwxMCArNzAzLDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBO
b2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+
IG1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzOworICAgIE9wZXJhbmRzPEZyb3plblZhbHVlKj4g
bV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+
ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOwor
CisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgRnJvemVuVmFsdWUqLCBFbmNvZGVkSlNWYWx1
ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cz4gbV9mcm96ZW5WYWx1ZU1hcDsKKyAgICBC
YWc8RnJvemVuVmFsdWU+IG1fZnJvemVuVmFsdWVzOworICAgIAogICAgIFZlY3RvcjxTdG9yYWdl
QWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1f
YXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBt
X3ZhcmlhYmxlQWNjZXNzRGF0YTsKQEAgLTg2MSw3ICs3NTMsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlh
dGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludDMyOwogICAgICAgICAKQEAgLTg3
OCwzMCArNzcwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBieXRlY29k
ZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50
MzJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICB9Ci0gICAg
Ci0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBtdWwsIE5v
ZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaW1t
ZWRpYXRlLT5oYXNDb25zdGFudCgpKTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRp
YXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJ
bnQzMkZvckFyaXRobWV0aWMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigp
OwotICAgICAgICAvLyBEb3VibGVzIGhhdmUgYSA1MyBiaXQgbWFudGlzc2Egc28gd2UgZXhwZWN0
IGEgbXVsdGlwbGljYXRpb24gb2YgMl4zMSAodGhlIGhpZ2hlc3QKLSAgICAgICAgLy8gbWFnbml0
dWRlIHBvc3NpYmxlIGludDMyIHZhbHVlKSBhbmQgYW55IHZhbHVlIGxlc3MgdGhhbiAyXjIyIHRv
IG5vdCByZXN1bHQgaW4gYW55Ci0gICAgICAgIC8vIHJvdW5kaW5nIGluIGEgZG91YmxlIG11bHRp
cGxpY2F0aW9uIC0gaGVuY2UgaXQgd2lsbCBiZSBlcXVpdmFsZW50IHRvIGFuIGludGVnZXIKLSAg
ICAgICAgLy8gbXVsdGlwbGljYXRpb24sIGlmIHdlIGFyZSBkb2luZyBpbnQzMiB0cnVuY2F0aW9u
IGFmdGVyd2FyZHMgKHdoaWNoIGlzIHdoYXQKLSAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50MzIo
KSBpbXBsaWVzKS4KLSAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsK
LSAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUg
Pj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMy
KCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwotCi0gICAgICAg
IHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCk7Ci0gICAgfQogfTsKIAogI2RlZmluZSBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAg
ICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTEsMTIgKzE1MSwxMyBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFs
aXplKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2Rl
QmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211
c3RIYW5kbGVBYnN0cmFjdFZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9w
ZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBo
Lm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXNb
aV07CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICAgICAgdmFsdWUu
c2V0TW9zdFNwZWNpZmljKG1fZ3JhcGgsICptX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlc1tpXSk7
CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlID0gYmxvY2stPnZhbHVl
c0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9ybWF0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDE2OTU4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDIzICs2MiwyMSBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIE5vZGUq
IGluc2VydENvbnN0YW50KAotICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
LCBKU1ZhbHVlIHZhbHVlLAorICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2lu
LCBGcm96ZW5WYWx1ZSogdmFsdWUsCiAgICAgICAgIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkK
ICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50UmVnID0KLSAgICAgICAgICAgIG1fZ3Jh
cGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KHZhbHVlKTsKICAgICAgICAgcmV0dXJuIGlu
c2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleCwgc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUp
LCBvcCwgb3JpZ2luLCBPcEluZm8oY29uc3RhbnRSZWcpKTsKKyAgICAgICAgICAgIGluZGV4LCBz
cGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS0+dmFsdWUoKSksIG9wLCBvcmlnaW4sIE9wSW5mbyh2
YWx1ZSkpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBpbnNlcnRDb25zdGFudCgKLSAgICAgICAg
c2l6ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUg
b3AgPSBKU0NvbnN0YW50KQorICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2lu
LCBGcm96ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKICAgICB7CiAg
ICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudChpbmRleCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2
YWx1ZSwgb3ApOwogICAgIH0KICAgICAKICAgICBFZGdlIGluc2VydENvbnN0YW50Rm9yVXNlKAot
ICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBV
c2VLaW5kIHVzZUtpbmQpCisgICAgICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4s
IEZyb3plblZhbHVlKiB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKICAgICAgICAgTm9k
ZVR5cGUgb3A7CiAgICAgICAgIGlmIChpc0RvdWJsZSh1c2VLaW5kKSkKQEAgLTkxLDcgKzg5LDI3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRWRnZSBpbnNlcnRDb25zdGFudEZvclVzZSgK
LSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwg
VXNlS2luZCB1c2VLaW5kKQorICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2lu
LCBGcm96ZW5WYWx1ZSogdmFsdWUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnNlcnRDb25zdGFudEZvclVzZShpbmRleCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1
ZSwgdXNlS2luZCk7CisgICAgfQorCisgICAgTm9kZSogaW5zZXJ0Q29uc3RhbnQoc2l6ZV90IGlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0Nv
bnN0YW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50KGluZGV4LCBvcmln
aW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwgb3ApOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBp
bnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZh
bHVlLCBOb2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQpCisgICAgeworICAgICAgICByZXR1cm4gaW5z
ZXJ0Q29uc3RhbnQoaW5kZXgsIG9yaWdpbiwgbV9ncmFwaC5mcmVlemUodmFsdWUpLCBvcCk7Cisg
ICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBO
b2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBvcmlnaW4sIG1fZ3Jh
cGguZnJlZXplKHZhbHVlKSwgdXNlS2luZCk7CisgICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0
Q29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2
YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydENvbnN0
YW50Rm9yVXNlKGluZGV4LCBOb2RlT3JpZ2luKG9yaWdpbiksIHZhbHVlLCB1c2VLaW5kKTsKICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJp
bmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2VyQ2hlY2tDb21iaW5pbmdQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxMSwxMSArMzExLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gQXJpdGg6OkNoZWNrT3ZlcmZsb3cKICAgICAgICAg
ICAgICAgICAmJiBub2RlLT5hcml0aE1vZGUoKSAhPSBBcml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5l
Z2F0aXZlWmVybykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghbV9n
cmFwaC5pc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAg
IGlmICghbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKAogICAgICAgICAg
ICAgICAgIFJhbmdlS2V5OjphZGRpdGlvbihub2RlLT5jaGlsZDEoKSksCi0gICAgICAgICAgICAg
ICAgbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6IHsKQEAgLTMyNSwx
NSArMzI1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEVkZ2UgaW5k
ZXggPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fZ3Jh
cGguaXNJbnQzMkNvbnN0YW50KGluZGV4Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChpbmRl
eC0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBFZGdlKCk7
Ci0gICAgICAgICAgICAgICAgYWRkZW5kID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChp
bmRleC5ub2RlKCkpOworICAgICAgICAgICAgICAgIGFkZGVuZCA9IGluZGV4LT5hc0ludDMyKCk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKAogICAgICAgICAgICAgICAgIGluZGV4LT5vcCgpID09
IEFyaXRoQWRkCiAgICAgICAgICAgICAgICAgJiYgaW5kZXgtPmlzQmluYXJ5VXNlS2luZChJbnQz
MlVzZSkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBoLmlzSW50MzJDb25zdGFudChpbmRleC0+
Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAgICAgICYmIG5vZGUtPmNoaWxkMigpLT5p
c0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIHNvdXJjZSA9IGluZGV4LT5jaGls
ZDEoKTsKLSAgICAgICAgICAgICAgICBhZGRlbmQgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0
YW50KGluZGV4LT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGFkZGVuZCA9IGlu
ZGV4LT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBpbmRleDsKICAgICAgICAgICAgICAgICBhZGRlbmQgPSAwOwpAQCAt
MzQxLDcgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVy
biBSYW5nZUtleUFuZEFkZGVuZChSYW5nZUtleTo6YXJyYXlCb3VuZHMoc291cmNlLCBrZXkpLCBh
ZGRlbmQpOwogICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBtX2ppdENvZGUtPmNvbW1v
bi5kb3VibGVDb25zdGFudHMgPSBzdGQ6Om1vdmUobV9ncmFwaC5tX2RvdWJsZUNvbnN0YW50cyk7
CiAjZW5kaWYKKyAgICAKKyAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CiAKICAg
ICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7CiAgICAgZm9yIChCYWc8U3dpdGNoRGF0YT46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRl
cikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5j
cHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxNCArMzYsMTQgQEAgSlNWYWx1ZSBMYXp5
SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAg
ICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICByZXR1cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAg
ICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsK
ICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwg
dS5zdHJpbmdJbXBsKTsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gdmFsdWUoKTsKKyAgICByZXR1cm4gSlNWYWx1ZSgpOwogfQogCiBzdGF0aWMg
VHJpU3RhdGUgZXF1YWxUb1NpbmdsZUNoYXJhY3RlcihKU1ZhbHVlIHZhbHVlLCBVQ2hhciBjaGFy
YWN0ZXIpCkBAIC04MSwxMSArODEsMTEgQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVx
dWFsKGNvbnN0IAogICAgIGNhc2UgS25vd25WYWx1ZToKICAgICAgICAgc3dpdGNoIChvdGhlci5t
X2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSgpLCBvdGhlci52YWx1ZSgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjpwdXJlU3RyaWN0RXF1YWwodmFsdWUoKS0+dmFsdWUoKSwgb3Ro
ZXIudmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
OgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKSwgb3Ro
ZXIuY2hhcmFjdGVyKCkpOworICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0
ZXIodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuY2hhcmFjdGVyKCkpOwogICAgICAgICBjYXNlIEtu
b3duU3RyaW5nSW1wbDoKLSAgICAgICAgICAgIHJldHVybiBlcXVhbFRvU3RyaW5nSW1wbCh2YWx1
ZSgpLCBvdGhlci5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJp
bmdJbXBsKHZhbHVlKCktPnZhbHVlKCksIG90aGVyLnN0cmluZ0ltcGwoKSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CkBAIC0xMTcs
NyArMTE3LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cgogewog
ICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICB2YWx1
ZSgpLmR1bXBJbkNvbnRleHQob3V0LCBjb250ZXh0KTsKKyAgICAgICAgdmFsdWUoKS0+ZHVtcElu
Q29udGV4dChvdXQsIGNvbnRleHQpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBTaW5nbGVD
aGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIG91dC5wcmludCgiTGF6eTpTaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1
ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xh
enlKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZh
bHVlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CkBAIC00NCwxMCArNDQsMTAgQEAgZW51bSBMYXppbmVzc0tpbmQg
ewogCiBjbGFzcyBMYXp5SlNWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgTGF6eUpTVmFsdWUoSlNWYWx1
ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICBMYXp5SlNWYWx1ZShGcm96ZW5WYWx1ZSogdmFsdWUg
PSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKSkKICAgICAgICAgOiBtX2tpbmQoS25vd25W
YWx1ZSkKICAgICB7Ci0gICAgICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOwor
ICAgICAgICB1LnZhbHVlID0gdmFsdWU7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBMYXp5SlNW
YWx1ZSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIgY2hhcmFjdGVyKQpAQCAtNjYsMTkgKzY2
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAg
SlNWYWx1ZSB0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAgRnJvemVuVmFsdWUqIHRyeUdldFZhbHVl
KEdyYXBoJikgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2tpbmQgPT0gS25vd25WYWx1ZSkK
ICAgICAgICAgICAgIHJldHVybiB2YWx1ZSgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBnZXRWYWx1
ZShWTSYpIGNvbnN0OwogICAgIAotICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdAorICAgIEZyb3pl
blZhbHVlKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQobV9raW5kID09IEtu
b3duVmFsdWUpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUudmFsdWUpOworICAg
ICAgICByZXR1cm4gdS52YWx1ZTsKICAgICB9CiAgICAgCiAgICAgVUNoYXIgY2hhcmFjdGVyKCkg
Y29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGZvciBhIGtpbmQg
b2YgdmFsdWUgdGhhdCBjYW4ndC4KICAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICAgICAg
Y2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCkuYXNJbnQzMigpOwor
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVlKCkuYXNJbnQzMigpOwogICAgICAgICBj
YXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXIo
KTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgCiBw
cml2YXRlOgogICAgIHVuaW9uIHsKLSAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAg
ICAgIEZyb3plblZhbHVlKiB2YWx1ZTsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyOwogICAgICAg
ICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsOwogICAgIH0gdTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzksMTAgKzM5LDggQEAgTWluaWZpZWROb2RlIE1pbmlmaWVkTm9k
ZTo6ZnJvbU5vZGUoTm9kZQogICAgIE1pbmlmaWVkTm9kZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1f
aWQgPSBNaW5pZmllZElEKG5vZGUpOwogICAgIHJlc3VsdC5tX29wID0gbm9kZS0+b3AoKTsKLSAg
ICBpZiAoaGFzQ29uc3RhbnROdW1iZXIobm9kZS0+b3AoKSkpCi0gICAgICAgIHJlc3VsdC5tX2lu
Zm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOwotICAgIGVsc2UgaWYgKGhhc1dlYWtDb25zdGFu
dChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0Lm1faW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICBpZiAoaGFzQ29uc3RhbnQobm9kZS0+
b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBKU1ZhbHVlOjplbmNvZGUobm9kZS0+YXNK
U1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGFu
dG9tQXJndW1lbnRzKTsKICAgICAgICAgcmVzdWx0Lm1faW5mbyA9IDA7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE2OTU4OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQyLDcgKzQyLDYgQEAgaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChO
b2RlVAogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2Ug
UGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKQEAg
LTU5LDIyICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgTWluaWZpZWRJRCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNvbnN0IHsgcmV0dXJuIG1fb3A7IH0KICAg
ICAKLSAgICBib29sIGhhc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzQ29uc3RhbnROdW1i
ZXIoKSB8fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQorICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25z
dCB7IHJldHVybiBoYXNDb25zdGFudChtX29wKTsgfQogICAgIAotICAgIGJvb2wgaGFzQ29uc3Rh
bnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudE51bWJlcihtX29wKTsgfQotICAg
IAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkgY29uc3QKKyAgICBKU1ZhbHVlIGNvbnN0
YW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNDb25zdGFudE51bWJlcihtX29w
KSk7Ci0gICAgICAgIHJldHVybiBtX2luZm87Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzV2Vh
a0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzV2Vha0NvbnN0YW50KG1fb3ApOyB9Ci0gICAg
Ci0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KGhhc1dlYWtDb25zdGFudChtX29wKSk7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SlND
ZWxsKj4obV9pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZShiaXR3aXNlX2Nh
c3Q8RW5jb2RlZEpTVmFsdWU+KG1faW5mbykpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgTWlu
aWZpZWRJRCBnZXRJRChNaW5pZmllZE5vZGUqIG5vZGUpIHsgcmV0dXJuIG5vZGUtPmlkKCk7IH0K
QEAgLTg0LDE3ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogcHJpdmF0ZToKLSAgICBz
dGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2RlVHlwZSB0eXBlKQorICAgIHN0YXRpYyBi
b29sIGhhc0NvbnN0YW50KE5vZGVUeXBlIHR5cGUpCiAgICAgewogICAgICAgICByZXR1cm4gdHlw
ZSA9PSBKU0NvbnN0YW50IHx8IHR5cGUgPT0gSW50NTJDb25zdGFudCB8fCB0eXBlID09IERvdWJs
ZUNvbnN0YW50OwogICAgIH0KLSAgICBzdGF0aWMgYm9vbCBoYXNXZWFrQ29uc3RhbnQoTm9kZVR5
cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IFdlYWtKU0NvbnN0YW50Owot
ICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7Ci0gICAgdWludHB0cl90IG1faW5mbzsK
KyAgICB1aW50NjRfdCBtX2luZm87CiAgICAgTm9kZVR5cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDA2LDExICs0
MDYsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c1dlYWtDb25zdGFudCgpCi0gICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBXZWFrSlNDb25z
dGFudDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBpc1BoYW50b21Bcmd1bWVudHMoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50czsKQEAgLTQyMiw3ICs0MTcs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAgICAgY2Fz
ZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAgICBj
YXNlIFdlYWtKU0NvbnN0YW50OgogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTQzMCwxMyArNDI0LDE2
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIHVuc2lnbmVkIGNvbnN0
YW50TnVtYmVyKCkKKyAgICBGcm96ZW5WYWx1ZSogY29uc3RhbnQoKQogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzQ29uc3RhbnQoKSk7Ci0gICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICAgICAg
QVNTRVJUKGhhc0NvbnN0YW50KCkpOworICAgICAgICBpZiAob3AoKSA9PSBQaGFudG9tQXJndW1l
bnRzKQorICAgICAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEZyb3plblZhbHVlKj4obV9vcEluZm8pOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KHVuc2lnbmVkIGNvbnN0YW50TnVt
YmVyKQorICAgIC8vIERvbid0IGNhbGwgdGhpcyBkaXJlY3RseSAtIHVzZSBHcmFwaDo6Y29udmVy
dFRvQ29uc3RhbnQoKSBpbnN0ZWFkIQorICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoRnJvemVu
VmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYgKGhhc0RvdWJsZVJlc3VsdCgpKQogICAg
ICAgICAgICAgbV9vcCA9IERvdWJsZUNvbnN0YW50OwpAQCAtNDQ1LDE1ICs0NDIsNyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fb3AgPSBKU0NvbnN0YW50Owog
ICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2JiZXIg
fCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgIG1fb3BJbmZvID0gY29uc3RhbnROdW1iZXI7
Ci0gICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29udmVy
dFRvV2Vha0NvbnN0YW50KEpTQ2VsbCogY2VsbCkKLSAgICB7Ci0gICAgICAgIG1fb3AgPSBXZWFr
SlNDb25zdGFudDsKLSAgICAgICAgbV9mbGFncyAmPSB+KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
TWlnaHRDbG9iYmVyIHwgTm9kZUNsb2JiZXJzV29ybGQpOwotICAgICAgICBtX29wSW5mbyA9IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9
CiAgICAgCkBAIC01MTgsNTIgKzUwNyw3NyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3Ag
PSBUb1N0cmluZzsKICAgICB9CiAgICAgCi0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKQorICAg
IEpTVmFsdWUgYXNKU1ZhbHVlKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChvcCgpID09IFdlYWtK
U0NvbnN0YW50KTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxKU0NlbGwqPihtX29wSW5m
byk7CisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1ZSgpOwogICAgIH0KICAgICAKLSAg
ICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJv
b2wgaXNJbnQzMkNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAob3AoKSkgewotICAg
ICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUod2Vh
a0NvbnN0YW50KCkpOwotICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91
YmxlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICAgICAgICAgIHJl
dHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsKLSAgICAgICAgY2FzZSBQaGFudG9tQXJndW1l
bnRzOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOyAvLyBIYXZlIHRvIHJldHVybiBzb21ldGhpbmcgaW4gcmVsZWFzZSBtb2Rl
LgotICAgICAgICB9CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+
dmFsdWUoKS5pc0ludDMyKCk7CiAgICAgfQotCi0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgCisgICAgaW50MzJfdCBhc0ludDMyKCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2Nr
KS5pc0ludDMyKCk7CisgICAgICAgIHJldHVybiBhc0pTVmFsdWUoKS5hc0ludDMyKCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNEb3VibGVDb25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
KyAgICB1aW50MzJfdCBhc1VJbnQzMigpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGlz
Q29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzRG91YmxlKCk7Ci0g
ICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChj
b2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGFzSW50
MzIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KENvZGVCbG9jayog
Y29kZUJsb2NrKQorICAgIGJvb2wgaXNEb3VibGVDb25zdGFudCgpCiAgICAgewotICAgICAgICBi
b29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2sp
LmlzTnVtYmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQgPT0gKGlzSW50MzJDb25zdGFudChj
b2RlQmxvY2spIHx8IGlzRG91YmxlQ29uc3RhbnQoY29kZUJsb2NrKSkpOwotICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZh
bHVlKCkuaXNEb3VibGUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc051bWJlckNvbnN0YW50
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFs
dWUoKS5pc051bWJlcigpOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgYXNOdW1iZXIoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFzSlNWYWx1ZSgpLmFzTnVtYmVyKCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNNYWNoaW5lSW50Q29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzTWFjaGluZUludCgpOworICAgIH0K
KyAgICAKKyAgICBpbnQ2NF90IGFzTWFjaGluZUludCgpCisgICAgeworICAgICAgICByZXR1cm4g
YXNKU1ZhbHVlKCkuYXNNYWNoaW5lSW50KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCb29s
ZWFuQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25z
dGFudCgpLT52YWx1ZSgpLmlzQm9vbGVhbigpOworICAgIH0KKyAgICAKKyAgICBib29sIGFzQm9v
bGVhbigpCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RhbnQoKS0+dmFsdWUoKS5hc0Jvb2xl
YW4oKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NlbGxDb25zdGFudCgpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNDZWxsKCk7
CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogYXNDZWxsKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBjb25zdGFudCgpLT52YWx1ZSgpLmFzQ2VsbCgpOwogICAgIH0KICAgICAKLSAgICBib29sIGlz
Qm9vbGVhbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCBkeW5hbWljQ2FzdENvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBpc0NvbnN0YW50KCkgJiYgdmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4o
KTsKKyAgICAgICAgaWYgKCFpc0NlbGxDb25zdGFudCgpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBqc0R5bmFtaWNDYXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBjb250YWluc01vdkhpbnQoKQpAQCAtMTAxNiwxMSArMTAzMCwxMSBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU0NlbGwqIGZ1bmN0aW9u
KCkKKyAgICBGcm96ZW5WYWx1ZSogZnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgQVNTRVJUKGhh
c0Z1bmN0aW9uKCkpOwotICAgICAgICBKU0NlbGwqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
SlNGdW5jdGlvbio+KG1fb3BJbmZvKTsKLSAgICAgICAgQVNTRVJUKEpTVmFsdWUocmVzdWx0KS5p
c0Z1bmN0aW9uKCkpOworICAgICAgICBGcm96ZW5WYWx1ZSogcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC0+dmFs
dWUoKS5pc0Z1bmN0aW9uKCkpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2
OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIG1hY3JvKERvdWJsZUNvbnN0YW50LCBOb2RlUmVzdWx0RG91YmxlIHwgTm9kZURvZXNO
b3RFeGl0KSBcCiAgICAgbWFjcm8oSW50NTJDb25zdGFudCwgTm9kZVJlc3VsdEludDUyIHwgTm9k
ZURvZXNOb3RFeGl0KSBcCiAgICAgXAotICAgIC8qIEEgY29uc3RhbnQgbm90IGluIHRoZSBDb2Rl
QmxvY2sncyBjb25zdGFudCBwb29sLiBVc2VzIGdldCBwYXRjaGVkIHRvIGp1bXBzIHRoYXQgZXhp
dCB0aGUgKi9cCi0gICAgLyogY29kZSBibG9jay4gKi9cCi0gICAgbWFjcm8oV2Vha0pTQ29uc3Rh
bnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVEb2VzTm90RXhpdCkgXAotICAgIFwKICAgICAvKiBNYXJr
ZXIgdG8gaW5kaWNhdGUgdGhhdCBhbiBvcGVyYXRpb24gd2FzIG9wdGltaXplZCBlbnRpcmVseSBh
bmQgYWxsIHRoYXQgaXMgbGVmdCAqL1wKICAgICAvKiBpcyB0byBtYWtlIG9uZSBub2RlIGFsaWFz
IGFub3RoZXIuIENTRSB3aWxsIGxhdGVyIHVzdWFsbHkgZWxpbWluYXRlIHRoaXMgbm9kZSwgKi9c
CiAgICAgLyogdGhvdWdoIGl0IG1heSBjaG9vc2Ugbm90IHRvIGlmIGl0IHdvdWxkIGNvcnJ1cHQg
cHJlZGljdGlvbnMgKHZlcnkgcmFyZSkuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBl
eGVjKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmls
ZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAgICAgICAgZXhpdElu
ZGV4LCBQcm9maWxlcjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2Nv
ZGVPcmlnaW4pLAotICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBpc1dhdGNocG9pbnQoZXhp
dC5tX2tpbmQpKTsKKyAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0g
VW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwogICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9m
aWxlckV4aXQtPmNvdW50ZXJBZGRyZXNzKCkpKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTM1LDkgKzEzNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9
IGZhbHNlOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEpT
Q29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHR5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZK
U0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAg
ICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+YXNKU1Zh
bHVlKCkpOwogICAgICAgICAgICAgaWYgKHR5cGUgPT0gU3BlY0ludDUyQXNEb3VibGUgJiYgZW5h
YmxlSW50NTIoKSkKICAgICAgICAgICAgICAgICB0eXBlID0gU3BlY0ludDUyOwogICAgICAgICAg
ICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKHR5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNyArMTA5LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBl
JiBzdAogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAg
IGNhc2UgSW50NTJDb25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2Ug
SWRlbnRpdHk6CiAgICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCwyMSArODAsOSBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgCiAgICAgICAgIEdQUlJlZyBncHIgPSBh
bGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgICAg
IGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0ludDMyKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBqc051bWJlcih2YWx1ZU9mSW50MzJDb25z
dGFudChlZGdlLm5vZGUoKSkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAg
ICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTRG91Ymxl
KTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3Vi
bGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpOwotICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVl
KSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVChp
c0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Zh
bHVlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3By
KTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3Jt
YXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBT
cGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZv
cm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKQEAgLTcyNiw3ICs3MTQsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZpcnR1YWxSZWdpc3RlcigpOwogICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZp
cnR1YWxSZWdpc3Rlcik7CiAKLSAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQz
MkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpICYm
ICFlZGdlLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAvLyBQcm90ZWN0IHRoZSBzaWxl
bnQgc3BpbGwvZmlsbCBsb2dpYyBieSBmYWlsaW5nIGVhcmx5LiBJZiB3ZSAic3BlY3VsYXRlIiBv
bgogICAgICAgICAvLyB0aGUgY29uc3RhbnQgdGhlbiB0aGUgc2lsZW50IGZpbGxlciBtYXkgdGhp
bmsgdGhhdCB3ZSBoYXZlIGFuIGludDMyIGFuZCBhCiAgICAgICAgIC8vIGNvbnN0YW50LCBzbyBp
dCB3aWxsIHRyeSB0byBmaWxsIHRoaXMgYXMgYW4gaW50MzIgY29uc3RhbnQuIEJhZCB0aGluZ3Mg
d2lsbApAQCAtNzQyLDggKzczMCw4IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludDMKIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50
KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNv
bnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CisgICAgICAgICAgICBBU1NFUlQoZWRnZS0+aXNJ
bnQzMkNvbnN0YW50KCkpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoZWRnZS0+YXNJbnQzMigpKSwgZ3ByKTsKICAgICAgICAgICAgIGluZm8uZmlsbEludDMy
KCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJ
bnQzMjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBAIC04NzgsNyArODY2LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50NQogCiAgICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7Ci0gICAgICAgIGlm
ICgoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkp
LmlzTWFjaGluZUludCgpKSkgeworICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAh
ZWRnZS0+aXNNYWNoaW5lSW50Q29uc3RhbnQoKSkgewogICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDApOwogICAgICAg
ICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KQEAgLTg4Niw3ICs4NzQsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQ1CiAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAg
ICAgICAgICAgIEFTU0VSVChqc1ZhbHVlLmlzTWFjaGluZUludCgpKTsKICAgICAgICAgICAgIG1f
Z3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAg
ICAgICAgICAgICBpbnQ2NF90IHZhbHVlID0ganNWYWx1ZS5hc01hY2hpbmVJbnQoKTsKQEAgLTk2
Nyw5ICs5NTUsOSBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAg
ICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBHUFJSZWcgZ3By
ID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5u
b2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoZWRnZS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CiAg
ICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0lu
dDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkpKSwgZ3ByKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChyZWludGVycHJldERvdWJs
ZVRvSW50NjQoZWRnZS0+YXNOdW1iZXIoKSkpLCBncHIpOwogICAgICAgICAgICAgICAgIG1faml0
Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsK
IApAQCAtMTAxMCw3ICs5OTgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChl
ZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7
CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTEw
OTEsNyArMTA3OSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wK
ICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAKICAgICAgICAgaWYgKGVkZ2UtPmhh
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0Nv
bnN0YW50KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGVkZ2Ut
PmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsKICAg
ICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwpAQCAtMTc5MSwx
MSArMTc3OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAgICAgICAgYnJlYWs7CiAKLSAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPndl
YWtDb25zdGFudCgpKTsKLSAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICAgIAogICAgIGNhc2UgSWRlbnRpdHk6IHsKICAgICAgICAgLy8gQ1NFIHNo
b3VsZCBhbHdheXMgZWxpbWluYXRlIHRoaXMuCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkBAIC0xOTU5LDE4ICsxOTQyLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAg
IGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0ludDMyQ29uc3RhbnQo
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBv
cDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
Yml0T3Aob3AsIG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCksIG9wMi5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKIAogICAgICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAg
ICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkg
eworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkg
ewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEp
OwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0
T3Aob3AsIG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCksIG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKIAogICAgICAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTE5ODksMTEgKzE5NzIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNo
aWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJ
bnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgb3AxKTsKIAotICAgICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpICYgMHgxZiwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgbm9kZS0+Y2hpbGQy
KCktPmFzSW50MzIoKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludDMy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMjYzLDcg
KzIyNDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAg
ICBBU1NFUlQoaXNOdWxsQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CisgICAgICAg
IEFTU0VSVChub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVlKCkuaXNOdWxsKCkpOwogICAgICAgICBp
ZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2RlLCBub2RlLT5jaGlsZDEoKSkpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwpAQCAtMzcxOSw3ICszNzAyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAKICAgICBjYXNl
IENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24o
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZEZ1bmN0
aW9uLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChmdW5jdGlvbi5ncHIoKSksIG5vZGUtPmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rp
b24uZ3ByKCksIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRGdW5jdGlvbiwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoZnVuY3Rpb24uZ3ByKCkpLCBu
b2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IGZ1bmN0aW9uLmdwcigpLCBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpLmFzQ2VsbCgpKSk7CiAg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNzM3LDgg
KzM3MjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAgICAKICAgICAg
ICAgRXhpdEtpbmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBXZWFrSlNDb25zdGFudCkKLSAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkV2Vha0NvbnN0YW50
Q2FjaGU7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAg
ICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTY5NTg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNw
ZWN1bGF0aXZlSklUOjpzCiAgICAgICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CiAg
ICAgICAgIEFTU0VSVChpc0pTSW50MzIoaW5mby5yZWdpc3RlckZvcm1hdCgpKSk7CiAgICAgICAg
IGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNv
bnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIEFTU0VSVChub2RlLT5pc0ludDMyQ29uc3RhbnQo
KSk7CiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0SW50MzJDb25zdGFudDsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9hZDsKQEAgLTMzOSw4
ICszMzksNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAg
fSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCkgewogICAgICAgICBB
U1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3Rh
bnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUuaXNDZWxsKCkpOwor
ICAgICAgICAgICAgbm9kZS0+YXNDZWxsKCk7IC8vIFRvIGdldCB0aGUgYXNzZXJ0aW9uLgogICAg
ICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxDb25zdGFudDsKICAgICAgICAgfSBlbHNlIHsK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzgzLDggKzM4Miw5IEBAIFNpbGVudFJlZ2lzdGVyU2F2
ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBBU1NF
UlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzQ2VsbCgpKQor
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzQ2VsbENvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IFNldFRydXN0ZWRKU0NvbnN0YW50OworICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0NvbnN0YW50OwogICAgICAgICB9IGVsc2Ug
aWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50MzIpIHsKICAgICAgICAgICAg
IEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SlNJbnQzMik7CkBAIC00NDIsNyAr
NDQyLDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAgICAg
ICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgbm9kZS0+YXNO
dW1iZXIoKTsgLy8gVG8gZ2V0IHRoZSBhc3NlcnRpb24uCiAgICAgICAgIGZpbGxBY3Rpb24gPSBT
ZXREb3VibGVDb25zdGFudDsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoaW5mby5zcGls
bEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0RG91YmxlKTsKQEAgLTQ1MSw3ICs0NTEsNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFu
IFNwZWN1bGF0aXZlSklUOjpzCiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIEFTU0VSVChp
bmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7CiAgICAgaWYgKG5vZGUt
Pmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJUKGlzTnVtYmVyQ29uc3RhbnQobm9kZSkp
OworICAgICAgICBub2RlLT5hc051bWJlcigpOyAvLyBUbyBnZXQgdGhlIGFzc2VydGlvbi4KICAg
ICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0YW50OwogICAgIH0gZWxzZQogICAgICAg
ICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKQEAgLTQ5NiwyMSArNDk2LDIxIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICBjYXNlIERvTm90aGluZ0ZvckZp
bGw6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0SW50MzJDb25zdGFudDoKLSAgICAgICAg
bV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChwbGFuLm5vZGUoKSkpLCBwbGFu
LmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihwbGFuLm5vZGUoKS0+YXNJbnQzMigp
KSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
Y2FzZSBTZXRJbnQ1MkNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHZhbHVlT2ZK
U0NvbnN0YW50KHBsYW4ubm9kZSgpKS5hc01hY2hpbmVJbnQoKSA8PCBKU1ZhbHVlOjppbnQ1MlNo
aWZ0QW1vdW50KSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tNjQocGxhbi5u
b2RlKCktPmFzTWFjaGluZUludCgpIDw8IEpTVmFsdWU6OmludDUyU2hpZnRBbW91bnQpLCBwbGFu
LmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRTdHJpY3RJbnQ1MkNvbnN0YW50
OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgp
KS5hc01hY2hpbmVJbnQoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKEltbTY0
KHBsYW4ubm9kZSgpLT5hc01hY2hpbmVJbnQoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVh
azsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgU2V0Qm9vbGVhbkNvbnN0YW50
OgotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50
KHBsYW4ubm9kZSgpKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJ
bW0zMihwbGFuLm5vZGUoKS0+YXNCb29sZWFuKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbVB0cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGUoKSkuYXNDZWxsKCkpLCBwbGFuLmdw
cigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tUHRyKHBsYW4ubm9kZSgpLT5hc0Nl
bGwoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29uc3RhbnQ6CkBAIC01MjAsNyArNTIwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBTaQogICAgICAgICBtX2ppdC5tb3ZlKHZh
bHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGUoKSksIHBsYW4uZ3ByKCkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFNldERvdWJsZUNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3Zl
KEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQocGxh
bi5ub2RlKCkpKSksIGNhblRyYW1wbGUpOworICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHJlaW50
ZXJwcmV0RG91YmxlVG9JbnQ2NChwbGFuLm5vZGUoKS0+YXNOdW1iZXIoKSkpLCBjYW5UcmFtcGxl
KTsKICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoY2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTG9hZDMyUGF5bG9hZEJveEludDoKQEAgLTUzOCwx
MCArNTM4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kKICAg
ICAgICAgYnJlYWs7CiAjZWxzZQogICAgIGNhc2UgU2V0SlNDb25zdGFudFRhZzoKLSAgICAgICAg
bV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGUoKSkudGFnKCkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0zMihwbGFuLm5vZGUoKS0+YXNKU1Zh
bHVlKCkudGFnKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRK
U0NvbnN0YW50UGF5bG9hZDoKLSAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25z
dGFudChwbGFuLm5vZGUoKSkucGF5bG9hZCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1faml0
Lm1vdmUoSW1tMzIocGxhbi5ub2RlKCktPmFzSlNWYWx1ZSgpLnBheWxvYWQoKSksIHBsYW4uZ3By
KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldEludDMyVGFnOgogICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHBsYW4uZ3ByKCkpOwpAQCAt
ODU1LDEyICs4NTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9k
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7
CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwotICAgICAgICAKLSAgICBpZiAoaXND
b25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgIEpTU3RyaW5nKiBzdHJp
bmcgPQotICAgICAgICAgICAganNEeW5hbWljQ2FzdDxKU1N0cmluZyo+KHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAgICAgICBpZiAoc3RyaW5nICYmIHN0cmlu
Zy0+dHJ5R2V0VmFsdWVJbXBsKCkKLSAgICAgICAgICAgICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJ
bXBsKCktPmlzQXRvbWljKCkpIHsKKyAgICAKKyAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5v
ZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU3RyaW5nKj4oKSkgeworICAgICAg
ICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1w
bCgpLT5pc0F0b21pYygpKSB7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1YkluZm8oKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTEyMTgsMTMgKzEyMTUsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQm9vbAogICAgICAgICBub3RU
YWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBpZiAoaXNCb29sZWFuQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSkgewotICAgICAgICBib29sIGltbSA9IHZhbHVlT2ZCb29sZWFuQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzQm9v
bGVhbkNvbnN0YW50KCkpIHsKKyAgICAgICAgYm9vbCBpbW0gPSBub2RlLT5jaGlsZDEoKS0+YXNC
b29sZWFuKCk7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMih0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6Oklt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oaW1tKSkp
KSwgb3AyLmdwcigpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5Db25zdGFudChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDIoKS0+
aXNCb29sZWFuQ29uc3RhbnQoKSkgewogICAgICAgICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBv
cDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBib29sIGltbSA9IHZhbHVlT2ZCb29s
ZWFuQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgYm9vbCBpbW0gPSBu
b2RlLT5jaGlsZDIoKS0+YXNCb29sZWFuKCk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwg
b3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihpbW0pKSkpLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAg
LTEyNDksMTMgKzEyNDYsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
SW50MwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2
YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKKyAgICAgICAgaW50MzJfdCBpbW0gPSBu
b2RlLT5jaGlsZDEoKS0+YXNJbnQzMigpOwogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQg
b3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgYnJhbmNoMzIoY29uZGl0aW9uLCBK
SVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigpLCB0YWtlbik7Ci0gICAgfSBlbHNlIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgIH0gZWxzZSBp
ZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBpbnQzMl90
IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAg
ICAgIGludDMyX3QgaW1tID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgYnJh
bmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIEpJVENvbXBpbGVyOjpJbW0zMihpbW0pLCB0YWtl
bik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDE1LDExICsxNDEyLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIG1fbWluaWZpZWRHcmFw
aC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUobV9jdXJyZW50Tm9kZSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBXZWFr
SlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG1fY3Vy
cmVudE5vZGUtPndlYWtDb25zdGFudCgpKTsKLSAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3Jh
cGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2RlKG1fY3VycmVudE5vZGUpKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0
TG9jYWw6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODgsNyArMjA4MCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVEb3VibGVSZXAoTm8KIHsKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSkgewogICAgIGNhc2UgTnVtYmVyVXNlOiB7Ci0gICAgICAgIEFTU0VSVCghaXNO
dW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsgLy8gVGhpcyBzaG91bGQgaGF2
ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KKyAgICAgICAgQVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+
aXNOdW1iZXJDb25zdGFudCgpKTsgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnN0YW50IGZv
bGRlZC4KICAgICAKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
bik7CkBAIC0yMjg1LDcgKzIyNzcsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6anVtcEZvCiAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0gbV9qaXQuZ3JhcGgo
KS50cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEobm9kZSkpIHsKICAgICAgICAgdWludDMyX3Qg
bGVuZ3RoID0gdmlldy0+bGVuZ3RoKCk7CiAgICAgICAgIE5vZGUqIGluZGV4Tm9kZSA9IG1faml0
LmdyYXBoKCkuY2hpbGQobm9kZSwgMSkubm9kZSgpOwotICAgICAgICBpZiAobV9qaXQuZ3JhcGgo
KS5pc0ludDMyQ29uc3RhbnQoaW5kZXhOb2RlKSAmJiBzdGF0aWNfY2FzdDx1aW50MzJfdD4obV9q
aXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChpbmRleE5vZGUpKSA8IGxlbmd0aCkKKyAg
ICAgICAgaWYgKGluZGV4Tm9kZS0+aXNJbnQzMkNvbnN0YW50KCkgJiYgaW5kZXhOb2RlLT5hc1VJ
bnQzMigpIDwgbGVuZ3RoKQogICAgICAgICAgICAgcmV0dXJuIEpJVENvbXBpbGVyOjpKdW1wKCk7
CiAgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMigKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tMzIobGVuZ3Ro
KSk7CkBAIC0yMzgxLDcgKzIzNzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0
QnlWYWxGb3JJCiAgICAgR1BSUmVnIHZhbHVlR1BSID0gSW52YWxpZEdQUlJlZzsKICAgICAKICAg
ICBpZiAodmFsdWVVc2UtPmlzQ29uc3RhbnQoKSkgewotICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVVzZS5ub2RlKCkpOworICAgICAgICBKU1ZhbHVlIGpz
VmFsdWUgPSB2YWx1ZVVzZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051
bWJlcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAgICAgICAgICBub1Jlc3VsdChub2RlKTsK
QEAgLTI2NjksOCArMjY2MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9k
ZSogbm8KICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAgICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tO
ZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChp
c0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50
MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0ludDMyQ29uc3RhbnQoKSkgeworICAgICAg
ICAgICAgaW50MzJfdCBpbW0xID0gbm9kZS0+Y2hpbGQxKCktPmFzSW50MzIoKTsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIApAQCAtMjY4NCw5ICsyNjc2LDkg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5p
c0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1
ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50
MzJfdCBpbW0yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAo
IXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhNb2RlKCkpKSB7CkBAIC0yODY1LDkgKzI4
NTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhTdWIoTm9kCiAgICAgY2Fz
ZSBJbnQzMlVzZTogewogICAgICAgICBBU1NFUlQoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5v
ZGUtPmFyaXRoTW9kZSgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNOdW1iZXJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+
aXNOdW1iZXJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IHZh
bHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICBp
bnQzMl90IGltbTIgPSBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092
ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewpAQCAtMjg4Miw4ICsyODc0LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLT5pc051bWJlckNvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgaW1t
MSA9IG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQz
Mk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAgICAgCkBAIC0zMzIyLDggKzMzMTQsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIC8vIChp
biBjYXNlIG9mIHxkaXZpZGVuZHwgPCB8ZGl2aXNvcnwpLCBzbyB3ZSBzcGVjdWxhdGUgaXQgYXMg
c3RyaWN0IGludDMyLgogICAgICAgICBTcGVjdWxhdGVTdHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBkaXZpc29y
ID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaW50
MzJfdCBkaXZpc29yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIGlm
IChkaXZpc29yID4gMSAmJiBoYXNPbmVCaXRTZXQoZGl2aXNvcikpIHsKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb2dhcml0aG0gPSBXVEY6OmZhc3RMb2cyKGRpdmlzb3IpOwogICAgICAgICAg
ICAgICAgIEdQUlJlZyBkaXZpZGVuZEdQUiA9IG9wMS5ncHIoKTsKQEAgLTMzODQsOCArMzM3Niw4
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE1vZChOb2QKICAgICAgICAgfQog
ICAgICAgICAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQotICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3Qg
ZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7Cisg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKKyAgICAgICAg
ICAgIGludDMyX3QgZGl2aXNvciA9IG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAg
ICAgICBpZiAoZGl2aXNvciAmJiBkaXZpc29yICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgR1BS
UmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
NTYsMjkgKzU1Niw2IEBAIHB1YmxpYzoKICAgICBib29sIGlzS25vd25Ob3ROdW1iZXIoTm9kZSog
bm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUobm9kZSkubV90eXBlICYgU3BlY0Z1bGxO
dW1iZXIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90Q2VsbChOb2RlKiBub2RlKSB7IHJldHVybiAh
KG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiBTcGVjQ2VsbCk7IH0KICAgICAKLSAgICAv
LyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0
YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNDb25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBo
KCkuaXNKU0NvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSog
bm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQobm9kZSk7IH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgo
KS5pc0RvdWJsZUNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5v
ZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNOdW1iZXJDb25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS5pc0Jvb2xlYW5Db25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNGdW5jdGlvbkNv
bnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0
YW50KG5vZGUpOyB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChOb2RlKiBub2Rl
KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUpOyB9Ci0g
ICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsgfQotI2lmIFVTRShKU1ZBTFVF
MzJfNjQpCi0gICAgdm9pZCogYWRkcmVzc09mRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSk7IH0KLSNlbmRpZgotICAg
IEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3Jh
cGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZCb29sZWFu
Q29uc3RhbnQobm9kZSk7IH0KLSAgICBKU0Z1bmN0aW9uKiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFu
dChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZGdW5jdGlvbkNvbnN0
YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bGxDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuaXNOdWxsKCk7Ci0gICAg
fQotCiAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllclVJRCh1bnNpZ25lZCBpbmRleCkKICAgICB7
CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLmlkZW50aWZpZXJzKClbaW5kZXhdOwpAQCAt
NjE5LDkgKzU5Niw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUqIG5v
ZGUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJbW02NCB2YWx1ZU9mSlNDb25zdGFudEFz
SW1tNjQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKG5vZGUtPmFzSlNW
YWx1ZSgpKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTk1Nyw3ICs5MzQsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSB8fCBpc051bWJlckNvbnN0YW50KG5vZGUp
IHx8IGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNDb25zdGFu
dCgpKTsKICAgICAgICAgZ2VuZXJhdGlvbkluZm8obm9kZSkuaW5pdENvbnN0YW50KG5vZGUsIG5v
ZGUtPnJlZkNvdW50KCkpOwogICAgIH0KICAgICAKQEAgLTE5ODMsMTcgKzE5NjAsNiBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogbGFiZWwgPSAwKTsKIAotICAgIGJvb2wg
aXNJbnRlZ2VyKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAobm9kZS0+aGFzSW50MzJS
ZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmIChpc0ludDMy
Q29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1
cm4gZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNKU0ludDMyKCk7Ci0gICAgfQotICAgIAogICAgIGJv
b2wgYmV0dGVyVXNlU3RyaWN0SW50NTIoTm9kZSogbm9kZSkKICAgICB7CiAgICAgICAgIHJldHVy
biAhZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNJbnQ1MigpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsOSBAQCBwcml2
YXRlOgogICAgICAgICBjYXNlIEJpdE9yOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0
eSgpOwogCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNDb25zdGFudCgpKSB7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBvcDIgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAob3AyLmlzSW50
MzIoKSAmJiAhb3AyLmFzSW50MzIoKSkgewotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9J
ZGVudGl0eU92ZXJDaGlsZDEoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25z
dGFudCgpICYmICFtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAg
ICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkBAIC04OSwz
OCArODYsMjggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNh
c2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDIoKS0+aXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1
ZSBvcDIgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKLSAgICAgICAgICAgICAgICBpZiAob3AyLmlzSW50MzIoKSAmJiAhKG9wMi5hc0ludDMyKCkg
JiAweDFmKSkgewotICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGls
ZDEoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpICYmICEobV9u
b2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpICYgMHgxZikpIHsKKyAgICAgICAgICAgICAgICBjb252
ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
VUludDMyVG9OdW1iZXI6CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9
PSBCaXRVUlNoaWZ0Ci0gICAgICAgICAgICAgICAgJiYgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQy
KCktPmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgc2hpZnRBbW91bnQg
PSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KAotICAgICAgICAgICAgICAgICAgICBtX25vZGUt
PmNoaWxkMSgpLT5jaGlsZDIoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGlmIChzaGlmdEFt
b3VudC5pc0ludDMyKCkgJiYgKHNoaWZ0QW1vdW50LmFzSW50MzIoKSAmIDB4MWYpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvSWRlbnRpdHkoKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICYmIG1fbm9kZS0+Y2hpbGQxKCktPmNo
aWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKQorICAgICAgICAgICAgICAgICYmIChtX25vZGUtPmNo
aWxkMSgpLT5jaGlsZDIoKS0+YXNJbnQzMigpICYgMHgxZikpIHsKKyAgICAgICAgICAgICAgICBt
X25vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgICAg
ICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
X2dyYXBoLmlzSW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQzMl90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudCgK
LSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOwotICAgICAgICAg
ICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRp
dHlPdmVyQ2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQo
KSAmJiAhbV9ub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgY29u
dmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtMTI5LDkgKzEx
Niw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50
KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQy
KCktPmlzSW50MzJDb25zdGFudCgpCiAgICAgICAgICAgICAgICAgJiYgbV9ub2RlLT5pc0JpbmFy
eVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAgICAgICAgaW50MzJfdCB2YWx1ZSA9IG1f
Z3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAg
ICAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBtX25vZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7
CiAgICAgICAgICAgICAgICAgaWYgKC12YWx1ZSAhPSB2YWx1ZSkgewogICAgICAgICAgICAgICAg
ICAgICBtX25vZGUtPnNldE9wKEFyaXRoQWRkKTsKICAgICAgICAgICAgICAgICAgICAgbV9ub2Rl
LT5jaGlsZDIoKS5zZXROb2RlKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC04MSwyMCArODEsMTMgQEAgc3RydWN0IE1pbmlmaWVkR2Vu
ZXJhdGlvbkluZm8gewogCiB9IC8vIG5hbWVzcGFjZQogCi1ib29sIFZhcmlhYmxlRXZlbnRTdHJl
YW06OnRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5JiByZWNvdmVyeSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIE1pbmlmaWVkTm9kZSogbm9kZSkgY29uc3QKK2Jvb2wgVmFyaWFi
bGVFdmVudFN0cmVhbTo6dHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkmIHJl
Y292ZXJ5LCBNaW5pZmllZE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgaWYgKCFub2RlKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50TnVtYmVy
KCkpIHsKLSAgICAgICAgcmVjb3ZlcnkgPSBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudCgKLSAgICAg
ICAgICAgIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcigKLSAgICAgICAgICAgICAgICBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpLmdldCgpKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5oYXNXZWFr
Q29uc3RhbnQoKSkgewotICAgICAgICByZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50
KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewor
ICAgICAgICByZWNvdmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KG5vZGUtPmNvbnN0YW50
KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xODcsNyArMTgwLDcg
QEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgCiAgICAg
ICAgIEFTU0VSVChzb3VyY2Uua2luZCgpID09IEhhdmVOb2RlKTsKICAgICAgICAgTWluaWZpZWRO
b2RlKiBub2RlID0gZ3JhcGguYXQoc291cmNlLmlkKCkpOwotICAgICAgICBpZiAodHJ5VG9TZXRD
b25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgY29kZUJsb2NrLCBub2RlKSkKKyAg
ICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIG5v
ZGUpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBNaW5pZmllZEdl
bmVyYXRpb25JbmZvIGluZm8gPSBnZW5lcmF0aW9uSW5mb3MuZ2V0KHNvdXJjZS5pZCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0
cmVhbS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiYpIGNv
bnN0OwogCiBwcml2YXRlOgotICAgIGJvb2wgdHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KFZhbHVl
UmVjb3ZlcnkmLCBDb2RlQmxvY2sqLCBNaW5pZmllZE5vZGUqKSBjb25zdDsKKyAgICBib29sIHRy
eVRvU2V0Q29uc3RhbnRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5JiwgTWluaWZpZWROb2RlKikgY29u
c3Q7CiAgICAgCiAgICAgdm9pZCBsb2dFdmVudChjb25zdCBWYXJpYWJsZUV2ZW50Jik7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw5IEBAIHB1YmxpYzoKICAgICAg
ICAgdHJ5V2F0Y2gobV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7IAogICAgICAg
ICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKICAg
ICAgICAgCisgICAgICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9ncmFwaC5tX2Zyb3pl
blZhbHVlcykKKyAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLT5zdHJ1Y3R1cmUoKSk7CisgICAg
ICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBAIC01
OSwxNyArNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAgICAg
ICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNo
KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rp
b246Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmZ1bmN0aW9uKCkpOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9k
ZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+ZXhl
Y3V0YWJsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CkBAIC05
Myw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZz
ZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJp
YW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCht
X2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSktPnN0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBhbnl0aGluZyBp
biB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBE
b24ndCBuZWVkIHRvIHdhdGNoIHRoZQpAQCAtMTQzLDE4ICsxMzcsNiBAQCBwdWJsaWM6CiAgICAg
fQogCiBwcml2YXRlOgotICAgIHZvaWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLmFz
Q2VsbCgpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB0cnlXYXRjaChKU0NlbGwqIGNlbGwpCi0g
ICAgewotICAgICAgICBpZiAoY2VsbCkKLSAgICAgICAgICAgIHRyeVdhdGNoKGNlbGwtPnN0cnVj
dHVyZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGkt
LTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9p
bnQ6Ci0gICAgICAgICAgICBhZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1
bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAg
ICBhZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCktPnZhbHVl
KCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgY2FzZSBKU0NvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50c0xlbmd0aDoKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9j
YWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE2
OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICBpZiAo
IWdyYXBoLm1fcGxhbi5pbmxpbmVDYWxsRnJhbWVzLT5pc0VtcHR5KCkpCiAgICAgICAgIHN0YXRl
LmppdENvZGUtPmNvbW1vbi5pbmxpbmVDYWxsRnJhbWVzID0gZ3JhcGgubV9wbGFuLmlubGluZUNh
bGxGcmFtZXM7CiAgICAgCisgICAgZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKKwogICAg
IC8vIENyZWF0ZSB0aGUgZW50cnlwb2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9p
bnQgdG90YWxseSBkaWZmZXJlbnRseQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3Jl
IGRvaW5nIE9TUiBlbnRyeSBvciBub3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVC
bG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw5ICszMjcsNiBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb21w
aWxlSW50NTJDb25zdGFudCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2Vh
a0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBjb21waWxlV2Vha0pTQ29uc3RhbnQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAg
ICBjb21waWxlUGhhbnRvbUFyZ3VtZW50cygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03Mzks
MjIgKzczNiwxNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbnN0
YW50KCkKICAgICB7Ci0gICAgICAgIHNldERvdWJsZShtX291dC5jb25zdERvdWJsZShtX2dyYXBo
LnZhbHVlT2ZOdW1iZXJDb25zdGFudChtX25vZGUpKSk7CisgICAgICAgIHNldERvdWJsZShtX291
dC5jb25zdERvdWJsZShtX25vZGUtPmFzTnVtYmVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlSW50NTJDb25zdGFudCgpCiAgICAgewotICAgICAgICBpbnQ2NF90IHZhbHVlID0g
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUpLmFzTWFjaGluZUludCgpOworICAgICAg
ICBpbnQ2NF90IHZhbHVlID0gbV9ub2RlLT5hc01hY2hpbmVJbnQoKTsKICAgICAgICAgCiAgICAg
ICAgIHNldEludDUyKG1fb3V0LmNvbnN0SW50NjQodmFsdWUgPDwgSlNWYWx1ZTo6aW50NTJTaGlm
dEFtb3VudCkpOwogICAgICAgICBzZXRTdHJpY3RJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVl
KSk7CiAgICAgfQogCi0gICAgdm9pZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQotICAgIHsKLSAg
ICAgICAgc2V0SlNWYWx1ZSh3ZWFrUG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7Ci0g
ICAgfQotICAgIAogICAgIHZvaWQgY29tcGlsZVBoYW50b21Bcmd1bWVudHMoKQogICAgIHsKICAg
ICAgICAgc2V0SlNWYWx1ZShtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpKSk7CkBAIC0xNjA3LDggKzE1OTksOCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgY2Vs
bCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBFeGl0S2lu
ZCBleGl0S2luZDsKLSAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pT
Q29uc3RhbnQpCi0gICAgICAgICAgICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFudENhY2hlOwor
ICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAg
IGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ZXhpdEtpbmQgPSBCYWRDYWNoZTsKICAgICAgICAgCkBAIC0xNjQ2LDcgKzE2MzgsNyBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgQmFkRnVuY3Rp
b24sIGpzVmFsdWVWYWx1ZShjZWxsKSwgbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksCi0gICAgICAg
ICAgICBtX291dC5ub3RFcXVhbChjZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUtPmZ1bmN0aW9uKCkp
KSk7CisgICAgICAgICAgICBtX291dC5ub3RFcXVhbChjZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUt
PmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxsKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZUNoZWNrRXhlY3V0YWJsZSgpCkBAIC0zNDI3LDcgKzM0MTksNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KCkKICAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
KS5pc051bGwoKSk7CisgICAgICAgIEFTU0VSVChtX25vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUo
KS5pc051bGwoKSk7CiAgICAgICAgIHNldEJvb2xlYW4oCiAgICAgICAgICAgICBlcXVhbE51bGxP
clVuZGVmaW5lZCgKICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0Fy
ZUZhbHNlLCBFcXVhbE51bGxPclVuZGVmaW5lZCkpOwpAQCAtMzUyMCw3ICszNTEyLDcgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCgpCiAg
ICAgewotICAgICAgICBKU1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFu
dChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBt
X25vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUoKTsKIAogICAgICAgICBzZXRCb29sZWFuKAogICAg
ICAgICAgICAgbV9vdXQuZXF1YWwoCkBAIC00NzY5LDcgKzQ3NjEsNyBAQCBwcml2YXRlOgogICAg
ICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
IHx8IChlZGdlLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93
bkludDMyVXNlKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkg
ewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQo
ZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1
ZSgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAg
ICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5p
bnQzMlplcm87CkBAIC00ODgzLDcgKzQ4NzUsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRf
VU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IERGRzo6aXND
ZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+b3AoKSA9
PSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
ZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKSB7CiAg
ICAgICAgICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKQEAgLTQ5NDYsNyArNDkzOCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfHwgZWRnZS51c2VLaW5kKCkgPT0gQm9vbGVhblVzZSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Jv
b2xlYW4oKSkgewogICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmJvb2xlYW5GYWxzZTsKQEAgLTQ5OTIsOCArNDk4NCw4
IEBAIHByaXZhdGU6CiAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVz
ZUtpbmQoKSAhPSBJbnQ1MlJlcFVzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OmVuY29kZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSkpOwotICAgICAg
ICAKKyAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShl
ZGdlLT5hc0pTVmFsdWUoKSkpOworCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CkBAIC01ODk4LDggKzU4OTAs
NyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSW50
NTJDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBX
ZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZh
bHVlOjpjb25zdGFudChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAg
ICAgIGV4aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pT
VmFsdWUoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9t
QXJndW1lbnRzOgogICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6
OmFyZ3VtZW50c09iamVjdFRoYXRXYXNOb3RDcmVhdGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjk1
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIo
CiAgICAgICAgIAogICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29t
cGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAgICBleGl0SUQsIFByb2ZpbGVyOjpPcmln
aW5TdGFjayhkYXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAg
ICAgICBleGl0Lm1fa2luZCwgaXNXYXRjaHBvaW50KGV4aXQubV9raW5kKSk7CisgICAgICAgICAg
ICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwog
ICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVs
cGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEzIEBAIHZvaWQg
SlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KIAogdm9pZCBKU1ZhbHVlOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAog
eworICAgIGR1bXBJbkNvbnRleHRBc3N1bWluZ1N0cnVjdHVyZSgKKyAgICAgICAgb3V0LCBjb250
ZXh0LCAoISEqdGhpcyAmJiBpc0NlbGwoKSkgPyBhc0NlbGwoKS0+c3RydWN0dXJlKCkgOiBudWxs
cHRyKTsKK30KKwordm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUo
CisgICAgUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQsIFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdAorewogICAgIGlmICghKnRoaXMpCiAgICAgICAgIG91dC5wcmludCgi
PEpTVmFsdWUoKT4iKTsKICAgICBlbHNlIGlmIChpc0ludDMyKCkpCkBAIC0yMDcsNyArMjE0LDcg
QEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJgogICAgICAgICBvdXQu
cHJpbnRmKCJEb3VibGU6ICUwOHg6JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3
b0ludDMyc1swXSwgYXNEb3VibGUoKSk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzQ2VsbCgp
KSB7Ci0gICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoSlNTdHJpbmc6OmluZm8oKSkpIHsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihKU1N0cmlu
Zzo6aW5mbygpKSkgewogICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0
cmluZyo+KGFzQ2VsbCgpKTsKICAgICAgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7CiAgICAg
ICAgICAgICBpZiAoc3RyaW5nLT5pc1JvcGUoKSkKQEAgLTIyMywxMSArMjMwLDExIEBAIHZvaWQg
SlNWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYKICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiICh1bnJlc29sdmVkKSIpOwogICAgICAgICAgICAg
b3V0LnByaW50KCI6ICIsIGltcGwpOwotICAgICAgICB9IGVsc2UgaWYgKGFzQ2VsbCgpLT5pbmhl
cml0cyhTdHJ1Y3R1cmU6OmluZm8oKSkpCisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5j
bGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKFN0cnVjdHVyZTo6aW5mbygpKSkKICAgICAgICAgICAg
IG91dC5wcmludCgiU3RydWN0dXJlOiAiLCBpbkNvbnRleHQoKmpzQ2FzdDxTdHJ1Y3R1cmUqPihh
c0NlbGwoKSksIGNvbnRleHQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBvdXQucHJp
bnQoIkNlbGw6ICIsIFJhd1BvaW50ZXIoYXNDZWxsKCkpKTsKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiICgiLCBpbkNvbnRleHQoKmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAoIiwgaW5Db250ZXh0KCpzdHJ1Y3R1cmUsIGNvbnRl
eHQpLCAiKSIpOwogICAgICAgICB9CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgb3V0LnBy
aW50KCIsIElEOiAiLCBhc0NlbGwoKS0+c3RydWN0dXJlSUQoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgSlNTdHJpbmc7CiBjbGFzcyBQcm9wZXJ0eU5hbWU7CiBj
bGFzcyBQcm9wZXJ0eVNsb3Q7CiBjbGFzcyBQdXRQcm9wZXJ0eVNsb3Q7CitjbGFzcyBTdHJ1Y3R1
cmU7CiAjaWYgRU5BQkxFKERGR19KSVQpCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEpJVENvbXBp
bGVyOwpAQCAtMjc3LDYgKzI3OCw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0
QXNzdW1pbmdTdHJ1Y3R1cmUoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCosIFN0cnVjdHVyZSop
IGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90
b3R5cGUoRXhlY1N0YXRlKikgY29uc3Q7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232666</attachid>
            <date>2014-06-07 12:27:55 -0700</date>
            <delta_ts>2014-06-10 11:31:48 -0700</delta_ts>
            <desc>passes tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>186431</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5Njc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5OSBA
QAorMjAxNC0wNi0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQgdXNlIGl0cyBvd24gbm90aW9uIG9mIEpTVmFsdWUsIHdoaWNoIHdlIHNob3Vs
ZCBjYWxsIEZyb3plblZhbHVlLCB0aGF0IHdpbGwgY2FycnkgYXJvdW5kIGEgY29weSBvZiBpdHMg
c3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzM0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoZSBpbXBldHVzIGZvciB0aGlzIHdhcyB0byBwcm92aWRlIHNvbWUgc2Vuc2Ug
YW5kIHJlYXNvbiB0byByYWNlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tCisgICAgICAgIGNlbGwg
Y29uc3RhbnRzIGhhdmluZyB0aGVpciBzdHJ1Y3R1cmUgY2hhbmdlZCBvbiB0aGUgbWFpbiB0aHJl
YWQgLSB0aGlzIGlzIGhhcm1lc3MgYmVjYXVzZQorICAgICAgICB3ZSBkZWZlbmQgYWdhaW5zdCBp
dCwgYnV0IHdoZW4gaXQgZ29lcyB3cm9uZywgaXQgY2FuIGJlIGRpZmZpY3VsdCB0byByZXByb2R1
Y2UgYmVjYXVzZSBpdAorICAgICAgICByZXF1aXJlcyBhIHJhY2UuIEdpdmluZyB0aGUgREZHIHRo
ZSBhYmlsaXR5IHRvICJmcmVlemUiIGEgY2VsbCdzIHN0cnVjdHVyZSBmaXhlcyB0aGlzLgorICAg
ICAgICAKKyAgICAgICAgQnV0IHRoaXMgcGF0Y2ggZ29lcyBxdWl0ZSBhIGJpdCBmdXJ0aGVyLCBh
bmQgY29tcGxldGVseSByYXRpb25hbGl6ZXMgaG93IHRoZSBERkcgcmVhc29ucworICAgICAgICBh
Ym91dCBjb25zdGFudHMuIEl0IG5vIGxvbmdlciByZWxpZXMgb24gdGhlIENvZGVCbG9jayBjb25z
dGFudCBwb29sIGF0IGFsbCwgd2hpY2ggYWxsb3dzCisgICAgICAgIGZvciBhIG1vcmUgb2JqZWN0
LW9yaWVudGVkIGFwcHJvYWNoOiBmb3IgZXhhbXBsZSBhIE5vZGUgdGhhdCBoYXMgYSBjb25zdGFu
dCBjYW4gdGVsbCB5b3UKKyAgICAgICAgd2hhdCBjb25zdGFudCBpdCBoYXMgd2l0aG91dCBuZWVk
aW5nIGEgQ29kZUJsb2NrLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
SmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUV4aXRTaXRlRGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuY3BwOgor
ICAgICAgICAoSlNDOjpleGl0S2luZFRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6ZXhpdEtpbmRJ
c0NvdW50YWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuaDoKKyAgICAgICAgKEpT
Qzo6aXNXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlk
U3RhdHVzOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpmaWx0ZXJCeVZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpzZXRCdWlsdElu
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldENv
bnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJCeVZhbHVlKToKKyAgICAgICAgKiBkZmcvREZH
QWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6c2V0
TW9zdFNwZWNpZmljKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlckJ5VmFsdWUpOgorICAgICAg
ICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgICogZGZnL0RGR0FyZ3VtZW50c1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2U6OmlzTm90TmVnWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZTo6aXNOb3RQb3NaZXJvKToKKyAgICAgICAgKEpTQzo6REZHOjpCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlOjppc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6aXNXaXRoaW5Qb3dlck9mVHdvKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmpzQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjp3ZWFrSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OnJlbWFwT3BlcmFuZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3MpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jayk6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0SlNDb25zdGFudEZvclZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0SlNDb25zdGFu
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlzSlNDb25z
dGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlzSW50
MzJDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnZhbHVlT2ZKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6dmFsdWVPZkludDMyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpjb25zdGFudFVuZGVmaW5lZCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNvbnN0YW50TnVsbCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om9uZSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNvbnN0YW50TmFOKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5mZXJyZWRDb25zdGFudCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkNvbnN0YW50UmVjb3JkOjpDb25z
dGFudFJlY29yZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Y29uc3RhbnRDU0UpOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpjaGVj
a0Z1bmN0aW9uRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJm
b3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OndlYWtDb25zdGFudENT
RSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29tbW9uLmg6CisgICAgICAg
ICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6
Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayk6Cisg
ICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1
cE1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjp0cnVuY2F0ZUNvbnN0
YW50VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6YXR0ZW1wdFRvTWFr
ZUdldFR5cGVkQXJyYXlCeXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjppbmplY3RUeXBlQ29udmVyc2lvbnNGb3JFZGdlKToKKyAgICAgICAgKiBkZmcvREZHRnJvemVu
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6ZW1wdHlT
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVlOjpkdW1wSW5Db250ZXh0
KToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0Zyb3plblZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVl
OjpGcm96ZW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6Om9wZXJhdG9y
ISk6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OnZhbHVlKToKKyAgICAgICAgKEpT
Qzo6REZHOjpGcm96ZW5WYWx1ZTo6c3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96
ZW5WYWx1ZTo6bWFya1N0cm9uZ2x5KToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6
aXNTdHJvbmdseU1hcmtlZCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OmZyZWV6
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6R3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6R3Jh
cGg6OnRyeUdldEZvbGRhYmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnJlZ2lz
dGVyRnJvemVuVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZyZWV6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmZyZWV6ZVN0cm9uZ2x5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y29u
dmVydFRvQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9TdHJv
bmdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFzc2VydElzV2F0Y2hlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFk
ZEltbWVkaWF0ZVNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6Y29udmVydFRvQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
Ojpjb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjpnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjppc0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpHcmFwaDo6aXNKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6aXNJbnQzMkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
aXNEb3VibGVDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Omlz
TnVtYmVyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0Jv
b2xlYW5Db25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ2Vs
bENvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNGdW5jdGlv
bkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNJbnRlcm5h
bEZ1bmN0aW9uQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2
YWx1ZU9mSlNDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZh
bHVlT2ZJbnQzMkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
dmFsdWVPZk51bWJlckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6dmFsdWVPZkJvb2xlYW5Db25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6bXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIGRmZy9E
RkdJbnNlcnRpb25TZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6Omluc2VydENvbnN0
YW50Rm9yVXNlKToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2Uu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlOjpyYW5n
ZUtleUFuZEFkZGVuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0xhenlK
U1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUpOgor
ICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbCk6CisgICAgICAgIChK
U0M6OkRGRzo6TGF6eUpTVmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdM
YXp5SlNWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpMYXp5SlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Okxh
enlKU1ZhbHVlOjpzd2l0Y2hMb29rdXBWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVk
Tm9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpmcm9tTm9kZSk6Cisg
ICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmJlbG9u
Z3NJbk1pbmlmaWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFz
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnROdW1iZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnROdW1iZXIpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFu
dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjpoYXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0NvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjphc0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omlz
SW50MzJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNVSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OmlzRG91YmxlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzTnVtYmVyQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFzTnVtYmVyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjppc01hY2hpbmVJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6YXNNYWNoaW5lSW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0Jvb2xlYW5D
b25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNCb29sZWFuKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjppc0NlbGxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6YXNDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpkeW5hbWljQ2FzdENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpmdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aXNXZWFrQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OmNvbnN0YW50TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpj
b252ZXJ0VG9XZWFrQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OndlYWtDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVP
ZkpTQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpzaWxlbnRTYXZlUGxhbkZvckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNpbGVudFNhdmVQbGFuRm9yRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6c2lsZW50RmlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVJbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZUJvb2xlYW5CcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVJbnQzMkJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlRG91YmxlUmVwKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6anVtcEZvclR5cGVkQXJyYXlPdXRPZkJvdW5kcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFs
dWVPZkpTQ29uc3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6aW5pdENvbnN0YW50SW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmlzQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojppc0pTQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjppc0ludDMyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjppc0RvdWJsZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6aXNOdW1iZXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzQm9vbGVhbkNvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNGdW5jdGlvbkNvbnN0YW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkludDMyQ29u
c3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1
ZU9mTnVtYmVyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjphZGRyZXNzT2ZEb3VibGVDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkJvb2xlYW5Db25zdGFudCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZGdW5jdGlv
bkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
aXNOdWxsQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjppc0ludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFs
dWUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
MzJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3VibGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtOjp0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkpOgorICAgICAgICAoSlNDOjpERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBkZmcvREZHVmFy
aWFibGVFdmVudFN0cmVhbS5oOgorICAgICAgICAqIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U6OnRyeVdhdGNoKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZTo6aGFuZGxlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTGluay5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6bGluayk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlRG91YmxlQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW50NTJDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVja1N0
cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDaGVj
a0Z1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNv
bXBhcmVFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZUNvbXBhcmVTdHJpY3RFcUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6bG93SW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjps
b3dDZWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Qm9vbGVhbik6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0pTVmFsdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVdlYWtKU0NvbnN0
YW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjb21waWxlU3R1Yik6CisgICAgICAgICogcnVudGltZS9KU0NKU1Zh
bHVlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAg
IChKU0M6OkpTVmFsdWU6OmR1bXBJbkNvbnRleHRBc3N1bWluZ1N0cnVjdHVyZSk6CisgICAgICAg
ICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisKIDIwMTQtMDYtMDQgIE1hdHRoZXcgTWlybWFuICA8
bW1pcm1hbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkZWQgc3lzdGVtIGZvciBpbmxpbmluZyBu
YXRpdmUgZnVuY3Rpb25zIHZpYSB0aGUgRlRMLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2LDcgQEAgc2V0KEphdmFT
Y3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHRml4dXBQaGFzZS5jcHAKICAgICBkZmcvREZH
Rmx1c2hGb3JtYXQuY3BwCiAgICAgZGZnL0RGR0ZsdXNoZWRBdC5jcHAKKyAgICBkZmcvREZHRnJv
emVuVmFsdWUuY3BwCiAgICAgZGZnL0RGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcAogICAgIGRmZy9E
RkdHcmFwaC5jcHAKICAgICBkZmcvREZHR3JhcGhTYWZlcG9pbnQuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5Nyw2ICszOTcsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR0ZpeHVwUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHRmx1c2hGb3JtYXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZGZnXERGR0Zyb3plblZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHR3JhcGguY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZn
XERGR0dyYXBoU2FmZXBvaW50LmNwcCIgLz4KQEAgLTk2MSw2ICs5NjIsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoZWRBdC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZGZnXERGR0ZsdXNoRm9ybWF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHRlBSSW5mby5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
ZGZnXERGR0Zyb3plblZhbHVlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdc
REZHRnVuY3Rpb25XaGl0ZWxpc3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdHZW5lcmF0aW9uSW5mby5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR0dQUkluZm8uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzE2LDYgKzMxNiw4IEBA
CiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAw
QjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUx
NjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZH
RnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsg
fTsKKwkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBB
MDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNC
NjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVE
OTcgLyogQXJpdHlDaGVja01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjEzMSw2ICsyMTMzLDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAw
RDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2Uu
aDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0Fk
amFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNl
bmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFjZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0Vk
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2OUNDODYxOTNBQzYwQTAwNDU3
NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0Zyb3plblZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjlDQzg3MTkzQUM2MEEwMDQ1NzU5RSAv
KiBERkdGcm96ZW5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdG
cm96ZW5WYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Zyb3plblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNDYWxsLmNwcDsgcGF0
aCA9IGZ0bC9GVExKU0NhbGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZC
MUNCNDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTEpTQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTEpTQ2FsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlD
aGVja01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja01v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ3MTIsNiArNDcxNiw4IEBACiAJ
CQkJMEY5RDMzOTUxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oICovLAogCQkJCUE3
RDg5Q0U4MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgKi8sCiAJCQkJQTdE
ODlDRTkxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggKi8sCisJCQkJMEY2OUND
ODYxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLywKKwkJCQkwRjY5Q0M4
NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLywKIAkJCQkyQTg4MDY3NjE5
MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwICovLAogCQkJCTJBODgw
Njc3MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5oICovLAogCQkJCTg2
RUM5REI2MTMyOERGODIwMDJCMkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oICovLApAQCAtNTU3
Miw2ICs1NTc4LDcgQEAKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExpbmtJ
bmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyogQ2Fs
bExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0I5MTRCQ0Y5NUYwMDg4NUI0
RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjI0RTU0MjE3RUE5RjU5MDBBQkIyMTcgLyogQ0NhbGxIZWxwZXJzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzZBQUFFNTBFMUY0MjY1MDBBRDg3RDggLyogQ2xhc3NJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjczRDdBRjE2NUExNDMwMDBBQ0FCNzEgLyogQ2xvc3VyZUNh
bGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODcyLDYgKzY4NzksNyBAQAogCQkJ
CTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAvKiBCbG9ja0Fs
bG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBBMDA0NTc1OUUg
LyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NjMxMDdFQzEx
QTAwMTNFN0IyIC8qIEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDI4MDg2NDEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTQ3LDcgKzE0Nyw2IEBAIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgQ2FsbExpbmtTdGEK
ICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBleGl0U2l0ZURhdGEubV90YWtlc1Nsb3dQYXRoID0K
ICAgICAgICAgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50
RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUsIGV4aXRpbmdKSVRUeXBlKSkKLSAgICAg
ICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50LCBleGl0aW5nSklUVHlwZSkp
CiAgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEV4ZWN1dGFibGUsIGV4aXRpbmdKSVRUeXBl
KSk7CiAgICAgZXhpdFNpdGVEYXRhLm1fYmFkRnVuY3Rpb24gPQogICAgICAgICBwcm9maWxlZEJs
b2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUlu
ZGV4LCBCYWRGdW5jdGlvbiwgZXhpdGluZ0pJVFR5cGUpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsMTIgKzQ0LDggQEAgY29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBr
aQogICAgICAgICByZXR1cm4gIkJhZEV4ZWN1dGFibGUiOwogICAgIGNhc2UgQmFkQ2FjaGU6CiAg
ICAgICAgIHJldHVybiAiQmFkQ2FjaGUiOwotICAgIGNhc2UgQmFkQ2FjaGVXYXRjaHBvaW50Ogot
ICAgICAgICByZXR1cm4gIkJhZENhY2hlV2F0Y2hwb2ludCI7Ci0gICAgY2FzZSBCYWRXZWFrQ29u
c3RhbnRDYWNoZToKLSAgICAgICAgcmV0dXJuICJCYWRXZWFrQ29uc3RhbnRDYWNoZSI7Ci0gICAg
Y2FzZSBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiAiQmFk
V2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IjsKKyAgICBjYXNlIEJhZENvbnN0YW50Q2FjaGU6
CisgICAgICAgIHJldHVybiAiQmFkQ29uc3RhbnRDYWNoZSI7CiAgICAgY2FzZSBCYWRJbmRleGlu
Z1R5cGU6CiAgICAgICAgIHJldHVybiAiQmFkSW5kZXhpbmdUeXBlIjsKICAgICBjYXNlIE92ZXJm
bG93OgpAQCAtNzIsOCArNjgsNiBAQCBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRL
aW5kIGtpCiAgICAgICAgIHJldHVybiAiTm90U3RyaW5nT2JqZWN0IjsKICAgICBjYXNlIFVuY291
bnRhYmxlOgogICAgICAgICByZXR1cm4gIlVuY291bnRhYmxlIjsKLSAgICBjYXNlIFVuY291bnRh
YmxlV2F0Y2hwb2ludDoKLSAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZVdhdGNocG9pbnQiOwog
ICAgIGNhc2UgVW5jb3VudGFibGVJbnZhbGlkYXRpb246CiAgICAgICAgIHJldHVybiAiVW5jb3Vu
dGFibGVJbnZhbGlkYXRpb24iOwogICAgIGNhc2UgV2F0Y2hkb2dUaW1lckZpcmVkOgpAQCAtOTIs
NyArODYsNiBAQCBib29sIGV4aXRLaW5kSXNDb3VudGFibGUoRXhpdEtpbmQga2luZCkKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBjYXNlIEJhZFR5cGU6CiAgICAg
Y2FzZSBVbmNvdW50YWJsZToKLSAgICBjYXNlIFVuY291bnRhYmxlV2F0Y2hwb2ludDoKICAgICBj
YXNlIExvYWRGcm9tSG9sZTogLy8gQWxyZWFkeSBjb3VudGVkIGRpcmVjdGx5IGJ5IHRoZSBiYXNl
bGluZSBKSVQuCiAgICAgY2FzZSBTdG9yZVRvSG9sZTogLy8gQWxyZWFkeSBjb3VudGVkIGRpcmVj
dGx5IGJ5IHRoZSBiYXNlbGluZSBKSVQuCiAgICAgY2FzZSBPdXRPZkJvdW5kczogLy8gQWxyZWFk
eSBjb3VudGVkIGRpcmVjdGx5IGJ5IHRoZSBiYXNlbGluZSBKSVQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM0LDkgKzM0LDcgQEAgZW51bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEJhZEZ1bmN0aW9u
LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBtYWRlIGFuIGluY29ycmVjdCBhc3N1bXB0aW9uIGFi
b3V0IHdoYXQgZnVuY3Rpb24gd2Ugd291bGQgc2VlLgogICAgIEJhZEV4ZWN1dGFibGUsIC8vIFdl
IGV4aXRlZCBiZWNhdXNlIHdlIG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hh
dCBleGVjdXRhYmxlIHdlIHdvdWxkIHNlZS4KICAgICBCYWRDYWNoZSwgLy8gV2UgZXhpdGVkIGJl
Y2F1c2UgYW4gaW5saW5lIGNhY2hlIHdhcyB3cm9uZy4KLSAgICBCYWRXZWFrQ29uc3RhbnRDYWNo
ZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSBjYWNoZSBvbiBhIHdlYWsgY29uc3RhbnQgKHVzdWFs
bHkgYSBwcm90b3R5cGUpIHdhcyB3cm9uZy4KLSAgICBCYWRDYWNoZVdhdGNocG9pbnQsIC8vIFNh
bWUgYXMgQmFkQ2FjaGUgYnV0IGZyb20gYSB3YXRjaHBvaW50LgotICAgIEJhZFdlYWtDb25zdGFu
dENhY2hlV2F0Y2hwb2ludCwgLy8gU2FtZSBhcyBCYWRXZWFrQ29uc3RhbnRDYWNoZSBidXQgZnJv
bSBhIHdhdGNocG9pbnQuCisgICAgQmFkQ29uc3RhbnRDYWNoZSwgLy8gV2UgZXhpdGVkIGJlY2F1
c2UgYSBjYWNoZSBvbiBhIHdlYWsgY29uc3RhbnQgKHVzdWFsbHkgYSBwcm90b3R5cGUpIHdhcyB3
cm9uZy4KICAgICBCYWRJbmRleGluZ1R5cGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGluZGV4
aW5nIHR5cGUgd2FzIHdyb25nLgogICAgIE92ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBv
ZiBvdmVyZmxvdy4KICAgICBOZWdhdGl2ZVplcm8sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIGVu
Y291bnRlcmVkIG5lZ2F0aXZlIHplcm8uCkBAIC00OSw3ICs0Nyw2IEBAIGVudW0gRXhpdEtpbmQg
OiB1aW50OF90IHsKICAgICBOb3RTdHJpbmdPYmplY3QsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdl
IHNob3VsZG4ndCBoYXZlIGF0dGVtcHRlZCB0byBvcHRpbWl6ZSBzdHJpbmcgb2JqZWN0IGFjY2Vz
cy4KICAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9mIHRoZSBhYm92ZSBy
ZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2VzIG9mIHRoaXMgc2hv
dWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgogICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCAv
LyBXZSBleGl0ZWQgYmVjYXVzZSB0aGUgY29kZSBibG9jayB3YXMgaW52YWxpZGF0ZWQ7IHRoaXMg
bWVhbnMgdGhhdCB3ZSd2ZSBhbHJlYWR5IGNvdW50ZWQgdGhlIHJlYXNvbnMgd2h5IHRoZSBjb2Rl
IGJsb2NrIHdhcyBpbnZhbGlkYXRlZC4KLSAgICBVbmNvdW50YWJsZVdhdGNocG9pbnQsIC8vIFdl
IGV4aXRlZCBiZWNhdXNlIG9mIGEgd2F0Y2hwb2ludCwgd2hpY2ggaXNuJ3QgY291bnRlZCBiZWNh
dXNlIHdhdGNocG9pbnRzIGRvIHRyYWNraW5nIHRoZW1zZWx2ZXMuCiAgICAgV2F0Y2hkb2dUaW1l
ckZpcmVkLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIHdhdGNo
ZG9nIHRpbWVyLgogICAgIERlYnVnZ2VyRXZlbnQgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbmVl
ZCB0byBzZXJ2aWNlIHRoZSBkZWJ1Z2dlci4KIH07CkBAIC01NywxOCArNTQsNiBAQCBlbnVtIEV4
aXRLaW5kIDogdWludDhfdCB7CiBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5k
KTsKIGJvb2wgZXhpdEtpbmRJc0NvdW50YWJsZShFeGl0S2luZCk7CiAKLWlubGluZSBib29sIGlz
V2F0Y2hwb2ludChFeGl0S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNh
c2UgQmFkQ2FjaGVXYXRjaHBvaW50OgotICAgIGNhc2UgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRj
aHBvaW50OgotICAgIGNhc2UgVW5jb3VudGFibGVXYXRjaHBvaW50OgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNjk1
ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDcgQEAgYm9vbCBHZXRCeUlkU3RhdHVzOjphcHBl
bmRWYXJpYW50KGNvbnN0IAogYm9vbCBHZXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShjb25zdCBD
b25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKIHsKICAgICByZXR1
cm4gcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNp
dGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUsIGppdFR5cGUpKQotICAgICAgICB8fCBwcm9maWxl
ZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29k
ZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQsIGppdFR5cGUpKQotICAgICAgICB8fCBwcm9maWxl
ZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29k
ZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZSwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2Zp
bGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVj
b2RlSW5kZXgsIEJhZFdlYWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCwgaml0VHlwZSkpOworICAg
ICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRF
eGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hlLCBqaXRUeXBlKSk7CiB9CiAj
ZW5kaWYKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw5ICs1MSw3
IEBAIGJvb2wgUHV0QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCAKIGJvb2wgUHV0QnlJ
ZFN0YXR1czo6aGFzRXhpdFNpdGUoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRpbmdK
SVRUeXBlIGV4aXRUeXBlKQogewogICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0
ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNoZSwg
ZXhpdFR5cGUpKQotICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIs
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQs
IGV4aXRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2Vy
LCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50Q2Fj
aGUsIGV4aXRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9j
a2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0YW50
Q2FjaGVXYXRjaHBvaW50LCBleGl0VHlwZSkpOworICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5o
YXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRDb25zdGFudENhY2hlLCBleGl0VHlwZSkpOwogICAgIAogfQogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNiw3ICsxMzYsNyBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgRmlsdHJhdGlvblJl
c3VsdCBmaWx0ZXJCeVZhbHVlKFQgbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICBGaWx0cmF0aW9u
UmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBub2RlLCBGcm96ZW5WYWx1ZSB2YWx1ZSkKICAgICB7CiAg
ICAgICAgIHJldHVybiBmaWx0ZXJCeVZhbHVlKGZvck5vZGUobm9kZSksIHZhbHVlKTsKICAgICB9
CkBAIC0xNDQsNyArMTQ0LDcgQEAgcHVibGljOgogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVy
KEFic3RyYWN0VmFsdWUmLCBjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IGZpbHRlckFycmF5TW9kZXMoQWJzdHJhY3RWYWx1ZSYsIEFycmF5TW9kZXMpOwogICAgIEZp
bHRyYXRpb25SZXN1bHQgZmlsdGVyKEFic3RyYWN0VmFsdWUmLCBTcGVjdWxhdGVkVHlwZSk7Ci0g
ICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKEFic3RyYWN0VmFsdWUmLCBKU1ZhbHVl
KTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEZy
b3plblZhbHVlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3Qg
Q29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CkBAIC0xNjUsMTQgKzE2NSwxNCBA
QCBwcml2YXRlOgogICAgIH07CiAgICAgQm9vbGVhblJlc3VsdCBib29sZWFuUmVzdWx0KE5vZGUq
LCBBYnN0cmFjdFZhbHVlJik7CiAgICAgCi0gICAgdm9pZCBzZXRCdWlsdEluQ29uc3RhbnQoTm9k
ZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1aWx0SW5Db25zdGFudChOb2Rl
KiBub2RlLCBGcm96ZW5WYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUm
IGFic3RyYWN0VmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICBhYnN0cmFjdFZhbHVlLnNl
dChtX2dyYXBoLCB2YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAg
ICAgIGFic3RyYWN0VmFsdWUuZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKG5vZGUpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNldENvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCisg
ICAgdm9pZCBzZXRDb25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSB2YWx1ZSkKICAgICB7
CiAgICAgICAgIHNldEJ1aWx0SW5Db25zdGFudChub2RlLCB2YWx1ZSk7CiAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw5ICsxMzcsOCBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBKU0NvbnN0YW50
OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAg
IGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOiB7Ci0gICAg
ICAgIHNldEJ1aWx0SW5Db25zdGFudChub2RlLCBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpKTsKKyAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50KG5vZGUsICpub2RlLT5jb25zdGFudCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAgLTg1NSwzMiArODU0LDMyIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgYWJzdHJhY3RDaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBpZiAoY2hpbGQpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdHlwZVN0cmluZyA9IGpzVHlwZVN0
cmluZ0ZvclZhbHVlKCp2bSwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLCBjaGlsZCk7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB0eXBl
U3RyaW5nKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh0
eXBlU3RyaW5nKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKGlzRnVsbE51bWJlclNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkg
ewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5udW1iZXJT
dHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUo
dm0tPnNtYWxsU3RyaW5ncy5udW1iZXJTdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc1N0cmluZ1NwZWN1bGF0aW9uKGFic3Ry
YWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0tPnNt
YWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCAqbV9ncmFwaC5mcmVlemUodm0tPnNtYWxsU3RyaW5ncy5zdHJpbmdTdHJpbmcoKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0ZpbmFs
T2JqZWN0U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpIHx8IGlzQXJyYXlTcGVjdWxh
dGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcmd1bWVudHNTcGVjdWxhdGlvbihhYnN0
cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHZtLT5z
bWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgKm1fZ3JhcGguZnJlZXplKHZtLT5zbWFsbFN0cmluZ3Mub2JqZWN0U3RyaW5nKCkpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNGdW5j
dGlvblNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewotICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5mdW5jdGlvblN0cmluZygpKTsKKyAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdz
LmZ1bmN0aW9uU3RyaW5nKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5
cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLmJv
b2xlYW5TdHJpbmcoKSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5m
cmVlemUodm0tPnNtYWxsU3RyaW5ncy5ib29sZWFuU3RyaW5nKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKQEAgLTE0MzIsNyArMTQzMSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFNraXBTY29wZTogewogICAgICAgICBK
U1ZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAg
aWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGpzQ2Fz
dDxKU1Njb3BlKj4oY2hpbGQuYXNDZWxsKCkpLT5uZXh0KCkpKTsKKyAgICAgICAgICAgIHNldENv
bnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShKU1ZhbHVlKGpzQ2FzdDxKU1Njb3BlKj4oY2hp
bGQuYXNDZWxsKCkpLT5uZXh0KCkpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY09iamVjdE90aGVyKTsKQEAgLTE0Nzks
NyArMTQ3OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0YXR1c1sw
XS5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29u
c3RhbnQobm9kZSwgc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoc3RhdHVzWzBdLnNwZWNp
ZmljVmFsdWUoKSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAg
ICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkpOwpAQCAt
MTc2MywxNCArMTc2MiwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUg
PT0gbm9kZS0+ZnVuY3Rpb24oKSkgeworICAgICAgICBpZiAodmFsdWUgPT0gbm9kZS0+ZnVuY3Rp
b24oKS0+dmFsdWUoKSkgewogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKICAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsgLy8gTGll
cyEgV2UgY2FuIGRvIGJldHRlci4KLSAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEo
KSwgbm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgIGZpbHRlckJ5VmFsdWUobm9kZS0+Y2hpbGQx
KCksICpub2RlLT5mdW5jdGlvbigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAK
QEAgLTIxMjQsNyArMjEyMyw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnMKIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBGaWx0cmF0aW9u
UmVzdWx0IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJCeVZh
bHVlKAotICAgIEFic3RyYWN0VmFsdWUmIGFic3RyYWN0VmFsdWUsIEpTVmFsdWUgY29uY3JldGVW
YWx1ZSkKKyAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlLCBGcm96ZW5WYWx1ZSBjb25j
cmV0ZVZhbHVlKQogewogICAgIGlmIChhYnN0cmFjdFZhbHVlLmZpbHRlckJ5VmFsdWUoY29uY3Jl
dGVWYWx1ZSkgPT0gRmlsdHJhdGlvbk9LKQogICAgICAgICByZXR1cm4gRmlsdHJhdGlvbk9LOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAgdm9pZCBBYnN0
cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoYwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
IH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgmIGdyYXBoLCBK
U1ZhbHVlIHZhbHVlKQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgm
IGdyYXBoLCBjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCEhdmFsdWUgJiYg
dmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5p
c0NlbGwoKSkgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVy
ZSgpOwogICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CiAg
ICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBh
c0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CkBAIC01OSwxNyArNTksMTcg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgICAgICBtX2Fy
cmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAgICAgCi0gICAgbV90eXBlID0gc3BlY3VsYXRpb25G
cm9tVmFsdWUodmFsdWUpOwotICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBzcGVj
dWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gdmFsdWUudmFs
dWUoKTsKICAgICAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGFzc2VydElzV2F0
Y2hlZChncmFwaCk7CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwg
SlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3ZvaWQg
QWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgRnJvemVuVmFsdWUmIHZhbHVl
LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQogewotICAgIGlmICghIXZhbHVl
ICYmIHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOworICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVl
KCkuaXNDZWxsKCkpIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1
Y3R1cmUoKTsKICAgICAgICAgaWYgKGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0
dXJlKSkgewogICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gYXNzdW1lIHRoYXQg
dGhlIHdhdGNocG9pbnQgZm9yIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAg
ICAvLyBCdXQgd2UgY2FuJ3QgYmVjYXVzZSBvdXIgdmlldyBvZiB3aGF0IHN0cnVjdHVyZSBhIHZh
bHVlIGhhcyBrZWVwcyBjaGFuZ2luZy4gVGhhdCdzCkBAIC05MCw4ICs5MCw4IEBAIHZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlMKICAgICAgICAgbV9hcnJheU1vZGVzID0g
MDsKICAgICB9CiAgICAgCi0gICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUp
OwotICAgIG1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICAKICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKQEAgLTIy
MSwxMSArMjIxLDExIEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMK
ICAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlckJ5VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK0ZpbHRyYXRpb25SZXN1
bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPSBmaWx0ZXIoc3BlY3VsYXRpb25Gcm9t
VmFsdWUodmFsdWUpKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IGZpbHRlcihzcGVj
dWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS52YWx1ZSgpKSk7CiAgICAgaWYgKG1fdHlwZSkKLSAgICAg
ICAgbV92YWx1ZSA9IHZhbHVlOworICAgICAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkFycmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0ZpbHRyYXRp
b25SZXN1bHQuaCIKKyNpbmNsdWRlICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1ZGUgIkRGR05v
ZGVGbGFncy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNs
dWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKQEAgLTE3Myw4ICsxNzQsOCBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc2V0TW9zdFNwZWNpZmljKEdyYXBoJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBzZXQo
R3JhcGgmLCBKU1ZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgIHZvaWQgc2V0TW9z
dFNwZWNpZmljKEdyYXBoJiwgY29uc3QgRnJvemVuVmFsdWUmKTsKKyAgICB2b2lkIHNldChHcmFw
aCYsIGNvbnN0IEZyb3plblZhbHVlJiwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICB2b2lk
IHNldChHcmFwaCYsIFN0cnVjdHVyZSopOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3QgU3Ry
dWN0dXJlU2V0Jik7CiAgICAgCkBAIC0yNjIsNyArMjYzLDcgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgIAogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5
cGUpOwogICAgIAotICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShKU1ZhbHVlIHZh
bHVlKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoY29uc3QgRnJvemVuVmFs
dWUmIHZhbHVlKTsKICAgICAKICAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsOCArMjA4LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBzaW5jZSBpdCB0cmVhdHMgQ3Jl
YXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2Fs
IHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0J3MgZWFzaWVyIHRvCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzIGhlcmUuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3RhbnQKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2so
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29uc3Rh
bnQgJiYgISpzb3VyY2UtPmNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIElmIHRoZSB2YXJpYWJsZSBpcyB0b3RhbGx5IGRlYWQsIHRoZW4gaWdub3JlIGl0LgpAQCAt
NTExLDcgKzUxMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwgb3JpZ2luKTsKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29u
c3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBqc051bWJlcihvcmlnaW4uc2Vt
YW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gMSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAganNOdW1iZXIob3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSAtIDEpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CkBAIC01MjgsMTIg
KzUyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+
aXNJbnQzMkNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNoaWxkMSgpLT52YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5oYXNDb25z
dGFudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
ICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7CisgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgaW5kZXggPSBub2RlLT5jaGlsZDEoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoaW5kZXggPCAwCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGluZGV4ICsgMSkgPj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NywxNyArNjcsMTcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBib29sIGlz
Tm90TmVnWmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgaWYgKCFtX2dyYXBoLmlzTnVt
YmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgIGlmICghbm9kZS0+aXNOdW1iZXJDb25zdGFudCgp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBtX2dy
YXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKKyAgICAgICAgZG91YmxlIHZhbHVlID0g
bm9kZS0+YXNOdW1iZXIoKTsKICAgICAgICAgcmV0dXJuICh2YWx1ZSB8fCAxLjAgLyB2YWx1ZSA+
IDAuMCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNOb3RQb3NaZXJvKE5vZGUqIG5vZGUpCiAg
ICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25zdGFudChub2RlKSkKKyAgICAg
ICAgaWYgKCFub2RlLT5pc051bWJlckNvbnN0YW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50
KG5vZGUpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBub2RlLT5hc051bWJlcigpOwogICAgICAg
ICByZXR1cm4gKHZhbHVlIHx8IDEuMCAvIHZhbHVlIDwgMC4wKTsKICAgICB9CiAKQEAgLTg1LDcg
Kzg1LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93ZXI+CiAgICAgYm9vbCBpc1dp
dGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgSlNW
YWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaygp
KTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPmFzSlNWYWx1ZSgpOwog
ICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIGRvdWJsZSBpbW1lZGlhdGUgPSBpbW1lZGlhdGVWYWx1ZS5hc051
bWJlcigpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlKiBz
aGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKICAgICAgICAgICAgIGlmIChzaGlm
dEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBzaGlmdEFtb3VudC0+dmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAgICAgSlNWYWx1ZSBpbW1lZGlh
dGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghaW1t
ZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZS5hc0ludDMyKCkgPiAzMiAtIHBvd2VyOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTggKzEzMiwxNiBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBtX2N1cnJlbnRCbG9jaygw
KQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCi0gICAgICAgICwgbV9jb25zdGFudFVuZGVm
aW5lZChVSU5UX01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50TnVsbChVSU5UX01BWCkKLSAgICAg
ICAgLCBtX2NvbnN0YW50TmFOKFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnQxKFVJTlRf
TUFYKQotICAgICAgICAsIG1fY29uc3RhbnRzKG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50
UmVnaXN0ZXJzKCkpCisgICAgICAgICwgbV9jb25zdGFudFVuZGVmaW5lZChncmFwaC5mcmVlemUo
anNVbmRlZmluZWQoKSkpCisgICAgICAgICwgbV9jb25zdGFudE51bGwoZ3JhcGguZnJlZXplKGpz
TnVsbCgpKSkKKyAgICAgICAgLCBtX2NvbnN0YW50TmFOKGdyYXBoLmZyZWV6ZShqc051bWJlcihQ
TmFOKSkpCisgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5mcmVlemUoanNOdW1iZXIoMSkp
KQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkp
CiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
KQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAgICAgLCBtX251bVBhc3NlZFZh
ckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDApCiAgICAgICAgICwgbV9oYXZl
QnVpbHRPcGVyYW5kTWFwcyhmYWxzZSkKLSAgICAgICAgLCBtX2VtcHR5SlNWYWx1ZUluZGV4KFVJ
TlRfTUFYKQogICAgICAgICAsIG1fY3VycmVudEluc3RydWN0aW9uKDApCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKQEAgLTIxNywxMiArMjE1LDcgQEAgcHJpdmF0ZToK
ICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2YgYSBieXRlY29kZSBpbnN0cnVj
dGlvbi4KICAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpCiAgICAg
ewotICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/Ci0gICAgICAgIGlmIChvcGVyYW5kLmlz
Q29uc3RhbnQoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgY29uc3RhbnQgPSBvcGVyYW5kLnRv
Q29uc3RhbnRJbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKGNvbnN0YW50IDwgbV9jb25zdGFu
dHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50KTsK
LSAgICAgICAgfQorICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKIAogICAg
ICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBpZiAob3BlcmFuZC5pc0FyZ3Vt
ZW50KCkpCkBAIC0yMzQsMTMgKzIyNywzMCBAQCBwcml2YXRlOgogCiAgICAgTm9kZSogZ2V0KFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmQuaXNDb25z
dGFudCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gb3BlcmFuZC50
b0NvbnN0YW50SW5kZXgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG9sZFNpemUgPSBtX2NvbnN0
YW50cy5zaXplKCk7CisgICAgICAgICAgICBpZiAoY29uc3RhbnRJbmRleCA+PSBvbGRTaXplIHx8
ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQob3BlcmFu
ZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0YW50SW5kZXggPj0gb2xkU2l6
ZSkgeworICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5ncm93KGNvbnN0YW50SW5kZXgg
KyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkU2l6ZTsgaSA8
IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9jb25z
dGFudHNbaV0gPSBudWxscHRyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
X2NvbnN0YW50c1tjb25zdGFudEluZGV4XSA9CisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nbHkodmFsdWUpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHNbY29uc3RhbnRJbmRl
eF0pOworICAgICAgICAgICAgcmV0dXJuIG1fY29uc3RhbnRzW2NvbnN0YW50SW5kZXhdOworICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKCktPmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgICAg
ICAgICAgICBKU0Z1bmN0aW9uKiBjYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVlQ29u
c3RhbnQoKTsKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNr
OjpDYWxsZWUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnQoY2FsbGVl
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzQ29uc3RhbnQoY2FsbGVlKTsKICAgICAg
ICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpTY29wZUNoYWluKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50KGNhbGxlZS0+c2NvcGUoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc0NvbnN0YW50KGNhbGxlZS0+c2NvcGUoKSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBK
U1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUp
OwpAQCAtMzA5LDE0ICszMTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gc2V0LT5pbmZlcnJlZFZhbHVlKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50LCBPcEluZm8obV9jb2RlQmxvY2st
PnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJs
ZVdhdGNocG9pbnQsIE9wSW5mbyhzZXQpKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTog
dGhpcyBpcyB2ZXJ5IHNwZWNpYWwgZnJvbSBhbiBPU1IgZXhpdCBzdGFuZHBvaW50LiBXZSB3b3Vs
ZG4ndCBiZQotICAgICAgICAgICAgICAgICAgICAvLyBhYmxlIHRvIGRvIHRoaXMgZm9yIG1vc3Qg
bG9jYWxzLCBidXQgaXQgd29ya3MgaGVyZSBiZWNhdXNlIHdlJ3JlIGRlYWxpbmcKLSAgICAgICAg
ICAgICAgICAgICAgLy8gd2l0aCBhIGZsdXNoZWQgbG9jYWwuIEZvciBtb3N0IGxvY2FscyB3ZSB3
b3VsZCBuZWVkIHRvIGlzc3VlIGEgR2V0TG9jYWwKLSAgICAgICAgICAgICAgICAgICAgLy8gaGVy
ZSBhbmQgZW5zdXJlIHRoYXQgd2UgaGF2ZSB1c2VzIGluIERGRyBJUiB3aGVyZXZlciB0aGVyZSB3
b3VsZCBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8vIGJlZW4gdXNlcyBpbiBieXRlY29kZS4g
Q2xlYXJseSB0aGlzIG9wdGltaXphdGlvbiBkb2VzIG5vdCBkbyB0aGlzLiBCdXQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gdGhhdCdzIGZpbmUsIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmFj
ayBsaXZlbmVzcyBmb3IgY2FwdHVyZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gbG9jYWxzLCBh
bmQgdGhpcyBvcHRpbWl6YXRpb24gb25seSBraWNrcyBpbiBmb3IgY2FwdHVyZWQgbG9jYWxzLgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mZXJyZWRDb25zdGFudCh2YWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBqc0NvbnN0YW50KHZhbHVlKTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM2Nyw4ICszNzAsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gbmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQsIGlzQ2FwdHVyZWQpOwogICAgICAgICB2YXJpYWJs
ZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKLSAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZENhY2hlKQotICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50KSk7
CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEt
Pm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSW5kZXhp
bmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcElu
Zm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwpAQCAtNDI0LDggKzQyNiw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU2hvdWxkTmV2ZXJVbmJv
eCh0cnVlKTsKICAgICAgICAgCiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VTdHJ1
Y3R1cmVDaGVja0hvaXN0aW5nRmFpbGVkKAotICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpCi0gICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQpKTsKKyAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSk7CiAgICAgICAgIHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VDaGVja0FycmF5SG9pc3Rp
bmdGYWlsZWQoCiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhh
c0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgTm9k
ZSogbm9kZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEp
LCB2YWx1ZSk7CkBAIC00NjYsMTggKzQ2Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBm
aW5kQXJndW1lbnRQb3NpdGlvbkZvckxvY2FsKG9wZXJhbmQpOwogICAgIH0KIAotICAgIHZvaWQg
YWRkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0
YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsKLSAgICAgICAgaW5p
dGlhbGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JDb25zdGFudCgKLSAgICAgICAgICAgIG1fZ3JhcGgu
bV9wbGFuLndyaXRlQmFycmllcnMsCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRz
KClbY29uc3RhbnRJbmRleF0sCi0gICAgICAgICAgICBtX2NvZGVCbG9jaywKLSAgICAgICAgICAg
IGNvbnN0YW50SW5kZXgsCi0gICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIAotICAgICAgICAgICAgdmFsdWUpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGZsdXNoKFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKICAgICAgICAgZmx1c2hEaXJlY3QobV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKQEAgLTU1NCwzMiArNTQzLDE1IEBA
IHByaXZhdGU6CiAgICAgICAgIGZsdXNoRm9yVGVybWluYWwoKTsKICAgICB9CiAKLSAgICAvLyBO
T1RFOiBPbmx5IHVzZSB0aGlzIHRvIGNvbnN0cnVjdCBjb25zdGFudHMgdGhhdCBhcmlzZSBmcm9t
IG5vbi1zcGVjdWxhdGl2ZQotICAgIC8vIGNvbnN0YW50IGZvbGRpbmcuIEkuZS4gY3JlYXRpbmcg
Y29uc3RhbnRzIHVzaW5nIHRoaXMgaWYgd2UgaGFkIGNvbnN0YW50Ci0gICAgLy8gZmllbGQgaW5m
ZXJlbmNlIHdvdWxkIGJlIGEgYmFkIGlkZWEsIHNpbmNlIHRoZSBieXRlY29kZSBwYXJzZXIncyBm
b2xkaW5nCi0gICAgLy8gZG9lc24ndCBoYW5kbGUgbGl2ZW5lc3MgcHJlc2VydmF0aW9uLgotICAg
IE5vZGUqIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCisgICAg
Ly8gQXNzdW1lcyB0aGF0IHRoZSBjb25zdGFudCBzaG91bGQgYmUgc3Ryb25nbHkgbWFya2VkLgor
ICAgIE5vZGUqIGpzQ29uc3RhbnQoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQogICAgIHsKLSAgICAg
ICAgdW5zaWduZWQgY29uc3RhbnRJbmRleDsKLSAgICAgICAgaWYgKCFtX2NvZGVCbG9jay0+Zmlu
ZENvbnN0YW50KGNvbnN0YW50VmFsdWUsIGNvbnN0YW50SW5kZXgpKSB7Ci0gICAgICAgICAgICBh
ZGRDb25zdGFudChjb25zdGFudFZhbHVlKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVu
ZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgQVNTRVJU
KG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lz
dGVycygpKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KGNvbnN0YW50
SW5kZXgpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9n
cmFwaC5mcmVlemVTdHJvbmdseShjb25zdGFudFZhbHVlKSkpOwogICAgIH0KIAotICAgIE5vZGUq
IGdldEpTQ29uc3RhbnQodW5zaWduZWQgY29uc3RhbnQpCisgICAgTm9kZSogd2Vha0pTQ29uc3Rh
bnQoSlNWYWx1ZSBjb25zdGFudFZhbHVlKQogICAgIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1f
Y29uc3RhbnRzW2NvbnN0YW50XS5hc0pTVmFsdWU7Ci0gICAgICAgIGlmIChub2RlKQotICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7Ci0KLSAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8oY29uc3RhbnQpKTsKLSAgICAgICAgbV9jb25zdGFudHNbY29uc3Rh
bnRdLmFzSlNWYWx1ZSA9IHJlc3VsdDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
cmV0dXJuIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNvbnN0
YW50VmFsdWUpKSk7CiAgICAgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBnZXQvc2V0
IHRoZSB0aGlzIHZhbHVlLgpAQCAtNTkzLDE0OSArNTY1LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
c2V0KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSwgdmFsdWUp
OwogICAgIH0KIAotICAgIC8vIENvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGNoZWNraW5nIG5vZGVz
IGZvciBjb25zdGFudHMuCi0gICAgYm9vbCBpc0pTQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBub2RlLT5vcCgpID09IEpTQ29uc3RhbnQ7Ci0gICAgfQotICAgIGJv
b2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gaXNK
U0NvbnN0YW50KG5vZGUpICYmIHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzSW50MzIoKTsKLSAg
ICB9Ci0gICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcyBmb3IgZ2V0dGluZyBjb25zdGFudCB2YWx1
ZXMuCi0gICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAgIHJldHVybiBtX2NvZGVC
bG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBub2RlLT5jb25z
dGFudE51bWJlcigpKTsKLSAgICB9Ci0gICAgaW50MzJfdCB2YWx1ZU9mSW50MzJDb25zdGFudChO
b2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7
Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudChub2RlKS5hc0ludDMyKCk7Ci0gICAg
fQotICAgIAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBKU0NvbnN0YW50IHdpdGggdGhl
IHZhbHVlICd1bmRlZmluZWQnLgotICAgIE5vZGUqIGNvbnN0YW50VW5kZWZpbmVkKCkKLSAgICB7
Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50VW5kZWZpbmVkIGJlZW4gc2V0IHVwIHlldD8KLSAg
ICAgICAgaWYgKG1fY29uc3RhbnRVbmRlZmluZWQgPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAg
IC8vIFNlYXJjaCB0aGUgY29uc3RhbnQgcG9vbCBmb3IgdW5kZWZpbmVkLCBpZiB3ZSBmaW5kIGl0
LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZD
b25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAg
ICAgICAgICAgZm9yIChtX2NvbnN0YW50VW5kZWZpbmVkID0gMDsgbV9jb25zdGFudFVuZGVmaW5l
ZCA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnRVbmRlZmluZWQpIHsKLSAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENv
bnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRVbmRlZmluZWQpOwotICAgICAgICAgICAg
ICAgIGlmICh0ZXN0TWUuaXNVbmRlZmluZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGdldEpTQ29uc3RhbnQobV9jb25zdGFudFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIC8vIEFkZCB1bmRlZmluZWQgdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywg
YW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAg
IEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAg
ICAgICAgYWRkQ29uc3RhbnQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50
cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFu
dHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFudFVuZGVmaW5lZCBtdXN0IHJlZmVyIHRv
IGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2
YWx1ZSAndW5kZWZpbmVkJy4KLSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFu
dChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRVbmRlZmluZWQpLmlzVW5k
ZWZpbmVkKCkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50VW5kZWZp
bmVkKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgSlNDb25zdGFudCB3
aXRoIHRoZSB2YWx1ZSAnbnVsbCcuCi0gICAgTm9kZSogY29uc3RhbnROdWxsKCkKLSAgICB7Ci0g
ICAgICAgIC8vIEhhcyBtX2NvbnN0YW50TnVsbCBiZWVuIHNldCB1cCB5ZXQ/Ci0gICAgICAgIGlm
IChtX2NvbnN0YW50TnVsbCA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRo
ZSBjb25zdGFudCBwb29sIGZvciBudWxsLCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVz
ZSB0aGlzIQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVC
bG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAgICAgZm9yIChtX2Nv
bnN0YW50TnVsbCA9IDA7IG1fY29uc3RhbnROdWxsIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9j
b25zdGFudE51bGwpIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRO
dWxsKTsKLSAgICAgICAgICAgICAgICBpZiAodGVzdE1lLmlzTnVsbCgpKQotICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TnVsbCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCBudWxsIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFu
dHMsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAg
ICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAg
ICAgICAgICAgIGFkZENvbnN0YW50KGpzTnVsbCgpKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRz
LmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50
cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBtX2NvbnN0YW50TnVsbCBtdXN0IHJlZmVyIHRvIGFuIGVu
dHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRoZSB2YWx1ZSAn
bnVsbCcuCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25z
dGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TnVsbCkuaXNOdWxsKCkpOwotICAgICAgICBy
ZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TnVsbCk7Ci0gICAgfQotCi0gICAgLy8gVGhp
cyBtZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIDEuCi0gICAg
Tm9kZSogb25lKCkKLSAgICB7Ci0gICAgICAgIC8vIEhhcyBtX2NvbnN0YW50MSBiZWVuIHNldCB1
cCB5ZXQ/Ci0gICAgICAgIGlmIChtX2NvbnN0YW50MSA9PSBVSU5UX01BWCkgewotICAgICAgICAg
ICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZvciB0aGUgdmFsdWUgMSwgaWYgd2UgZmlu
ZCBpdCwgd2UgY2FuIGp1c3QgcmV1c2UgdGhpcyEKLSAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mQ29uc3RhbnRzID0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsK
LSAgICAgICAgICAgIGZvciAobV9jb25zdGFudDEgPSAwOyBtX2NvbnN0YW50MSA8IG51bWJlck9m
Q29uc3RhbnRzOyArK21fY29uc3RhbnQxKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSB0ZXN0
TWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgg
KyBtX2NvbnN0YW50MSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RNZS5pc0ludDMyKCkgJiYg
dGVzdE1lLmFzSW50MzIoKSA9PSAxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlND
b25zdGFudChtX2NvbnN0YW50MSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFk
ZCB0aGUgdmFsdWUgMSB0byB0aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29y
cmVzcG9uZGluZyBzbG90IGluIG1fY29uc3RhbnRzLgotICAgICAgICAgICAgQVNTRVJUKG1fY29u
c3RhbnRzLnNpemUoKSA9PSBudW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAgICAgICBhZGRDb25z
dGFudChqc051bWJlcigxKSk7Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3Rh
bnRSZWNvcmQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1f
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gbV9jb25zdGFudDEgbXVzdCByZWZlciB0byBhbiBlbnRyeSBpbiB0aGUgQ29kZUJs
b2NrJ3MgY29uc3RhbnQgcG9vbCB0aGF0IGhhcyB0aGUgaW50ZWdlciB2YWx1ZSAxLgotICAgICAg
ICBBU1NFUlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ICsgbV9jb25zdGFudDEpLmlzSW50MzIoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50MSku
YXNJbnQzMigpID09IDEpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50
MSk7Ci0gICAgfQotICAgIAotICAgIC8vIFRoaXMgbWV0aG9kIHJldHVybnMgYSBEb3VibGVDb25z
dGFudCB3aXRoIHRoZSB2YWx1ZSBOYU4uCi0gICAgTm9kZSogY29uc3RhbnROYU4oKQotICAgIHsK
LSAgICAgICAgSlNWYWx1ZSBuYW4gPSBqc05hTigpOwotICAgICAgICAKLSAgICAgICAgLy8gSGFz
IG1fY29uc3RhbnROYU4gYmVlbiBzZXQgdXAgeWV0PwotICAgICAgICBpZiAobV9jb25zdGFudE5h
TiA9PSBVSU5UX01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29s
IGZvciB0aGUgdmFsdWUgTmFOLCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlz
IQotICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50
TmFOID0gMDsgbV9jb25zdGFudE5hTiA8IG51bWJlck9mQ29uc3RhbnRzOyArK21fY29uc3RhbnRO
YU4pIHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRD
b25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnROYU4pOwotICAg
ICAgICAgICAgICAgIGlmIChKU1ZhbHVlOjplbmNvZGUodGVzdE1lKSA9PSBKU1ZhbHVlOjplbmNv
ZGUobmFuKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEpTQ29uc3RhbnQobV9jb25z
dGFudE5hTik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUg
bmFuIHRvIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudHMsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5n
IHNsb3QgaW4gbV9jb25zdGFudHMuCi0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6
ZSgpID09IG51bWJlck9mQ29uc3RhbnRzKTsKLSAgICAgICAgICAgIGFkZENvbnN0YW50KG5hbik7
Ci0gICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG1fY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gbV9jb25zdGFu
dE5hTiBtdXN0IHJlZmVyIHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBw
b29sIHRoYXQgaGFzIHRoZSB2YWx1ZSBuYW4uCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50TmFOKS5p
c0RvdWJsZSgpKTsKLSAgICAgICAgQVNTRVJUKHN0ZDo6aXNuYW4obV9jb2RlQmxvY2stPmdldENv
bnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE5hTikuYXNEb3Vi
bGUoKSkpOwotICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsKLSAg
ICB9Ci0gICAgCi0gICAgTm9kZSogY2VsbENvbnN0YW50KEpTQ2VsbCogY2VsbCkKLSAgICB7Ci0g
ICAgICAgIEhhc2hNYXA8SlNDZWxsKiwgTm9kZSo+OjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9jZWxs
Q29uc3RhbnROb2Rlcy5hZGQoY2VsbCwgbnVsbHB0cik7Ci0gICAgICAgIGlmIChyZXN1bHQuaXNO
ZXdFbnRyeSkgewotICAgICAgICAgICAgQVNTRVJUKCFIZWFwOjppc1pvbWJpZmllZChjZWxsKSk7
Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRkVG9HcmFwaChXZWFrSlND
b25zdGFudCwgT3BJbmZvKGNlbGwpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci0gICAgfQotICAgIAotICAgIE5vZGUqIGluZmVy
cmVkQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBjZWxsQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOwot
ICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudEZvclZhbHVlKHZhbHVlKTsKLSAgICB9Ci0gICAg
CiAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lOwpAQCAtODMxLDE0ICs2
NjAsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICBOb2RlKiBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soSlNDZWxsKiBvYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKLSAg
ICAgICAgTm9kZSogb2JqZWN0Tm9kZSA9IGNlbGxDb25zdGFudChvYmplY3QpOworICAgICAgICBO
b2RlKiBvYmplY3ROb2RlID0ganNDb25zdGFudChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBo
KENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJl
KSksIG9iamVjdE5vZGUpOwogICAgICAgICByZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAg
CiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhv
YmplY3QsIG9iamVjdC0+c3RydWN0dXJlKCkpOworICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50
V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwgbV9ncmFwaC5mcmVlemUob2JqZWN0KS0+c3RydWN0
dXJlKCkpOwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0
T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQpAQCAtOTk3LDM2ICs4MjYsMTEgQEAgcHJp
dmF0ZToKICAgICAvLyBUaGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rp
b24gYmVpbmcgZ2VuZXJhdGVkLgogICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogCi0gICAg
Ly8gV2UgdXNlIHRoZXNlIHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLCBhbmQgdG8gYXZv
aWQgdGhlIG5lZWQgZm9yCi0gICAgLy8gc3BlY2lhbCBoYW5kbGluZyB3ZSBtYWtlIHN1cmUgdGhl
eSBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBpbiB0aGUKLSAgICAvLyBDb2RlQmxvY2sncyBj
b25zdGFudCBwb29sLiBUaGVzZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIHRvCi0gICAgLy8g
VUlOVF9NQVgsIGFuZCBsYXppbHkgdXBkYXRlZCB0byBob2xkIGFuIGluZGV4IGludG8gdGhlIENv
ZGVCbG9jaydzCi0gICAgLy8gY29uc3RhbnQgcG9vbCwgYXMgbmVjZXNzYXJ5LgotICAgIHVuc2ln
bmVkIG1fY29uc3RhbnRVbmRlZmluZWQ7Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudE51bGw7Ci0g
ICAgdW5zaWduZWQgbV9jb25zdGFudE5hTjsKLSAgICB1bnNpZ25lZCBtX2NvbnN0YW50MTsKLSAg
ICBIYXNoTWFwPEpTQ2VsbCosIHVuc2lnbmVkPiBtX2NlbGxDb25zdGFudHM7Ci0gICAgSGFzaE1h
cDxKU0NlbGwqLCBOb2RlKj4gbV9jZWxsQ29uc3RhbnROb2RlczsKLQotICAgIC8vIEEgY29uc3Rh
bnQgaW4gdGhlIGNvbnN0YW50IHBvb2wgbWF5IGJlIHJlcHJlc2VudGVkIGJ5IG1vcmUgdGhhbiBv
bmUKLSAgICAvLyBub2RlIGluIHRoZSBncmFwaCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGlu
IHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQuCi0gICAgc3RydWN0IENvbnN0YW50UmVjb3JkIHsKLSAg
ICAgICAgQ29uc3RhbnRSZWNvcmQoKQotICAgICAgICAgICAgOiBhc0ludDMyKDApCi0gICAgICAg
ICAgICAsIGFzTnVtZXJpYygwKQotICAgICAgICAgICAgLCBhc0pTVmFsdWUoMCkKLSAgICAgICAg
ewotICAgICAgICB9Ci0KLSAgICAgICAgTm9kZSogYXNJbnQzMjsKLSAgICAgICAgTm9kZSogYXNO
dW1lcmljOwotICAgICAgICBOb2RlKiBhc0pTVmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIFRyYWNr
IHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9zZSByZXN1bHQgaXMgdGhlIGN1cnJlbnQgdmFsdWUg
Zm9yIGV2ZXJ5Ci0gICAgLy8gcmVnaXN0ZXIgdmFsdWUgaW4gdGhlIGJ5dGVjb2RlIC0gYXJndW1l
bnQsIGxvY2FsLCBhbmQgdGVtcG9yYXJ5LgotICAgIFZlY3RvcjxDb25zdGFudFJlY29yZCwgMTY+
IG1fY29uc3RhbnRzOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50VW5kZWZpbmVkOworICAg
IEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFu
dE5hTjsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE9uZTsKKyAgICBWZWN0b3I8Tm9kZSos
IDE2PiBtX2NvbnN0YW50czsKIAogICAgIC8vIFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3Nl
ZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5zaWduZWQgbV9udW1Bcmd1bWVudHM7CkBAIC0xMDYx
LDcgKzg2NSw2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vICh0aGUgbWFjaGluZSBjb2RlIGJsb2Nr
LCB3aGljaCBpcyB0aGUgdHJhbnNpdGl2ZSwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseQogICAgICAg
ICAvLyBkaXJlY3QsIGNhbGxlcikuCiAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pZGVudGlm
aWVyUmVtYXA7Ci0gICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudFJlbWFwOwogICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRCdWZmZXJSZW1hcDsKICAgICAgICAgVmVj
dG9yPHVuc2lnbmVkPiBtX3N3aXRjaFJlbWFwOwogICAgICAgICAKQEAgLTExMzIsMTEgKzkzNSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAg
ICAgICAgICAgIHJldHVybiBvcGVyYW5kOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
cmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1fY29uc3RhbnRSZW1hcFtvcGVyYW5kLnRvQ29uc3Rh
bnRJbmRleCgpXSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdC5pc0NvbnN0YW50KCkp
OwotICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25zdGFudCgpKTsKIAogICAgICAgICAgICAgcmV0dXJu
IFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9mZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0KTsKICAgICAgICAgfQpAQCAtMTE3MCwxMSArOTY5LDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHM7CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVuIGlk
ZW50aWZpZXIgbmFtZXMgYW5kIG51bWJlcnMuCiAgICAgQm9ycm93ZWRJZGVudGlmaWVyTWFwIG1f
aWRlbnRpZmllck1hcDsKLSAgICAvLyBNYXBwaW5nIGJldHdlZW4gdmFsdWVzIGFuZCBjb25zdGFu
dCBudW1iZXJzLgotICAgIEpTVmFsdWVNYXAgbV9qc1ZhbHVlTWFwOwotICAgIC8vIEluZGV4IG9m
IHRoZSBlbXB0eSB2YWx1ZSwgb3IgVUlOVF9NQVggaWYgdGhlcmUgaXMgbm8gbWFwcGluZy4gVGhp
cyBpcyBhIGhvcnJpYmxlCi0gICAgLy8gd29yay1hcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNW
YWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5IiB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbV9lbXB0
eUpTVmFsdWVJbmRleDsKICAgICAKICAgICBDb2RlQmxvY2sqIG1fZGZnQ29kZUJsb2NrOwogICAg
IENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwIG1fY2FsbENvbnRleHRNYXA7CkBAIC0xMjIyLDEw
ICsxMDE2LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICBBU1NFUlQo
cmVnaXN0ZXJPZmZzZXQgPD0gMCk7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFs
aXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5k
KTsKICAgICAKLSAgICBpZiAobV9ncmFwaC5pc0NvbnN0YW50KGNhbGxUYXJnZXQpKSB7Ci0gICAg
ICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoCi0gICAgICAgICAgICBtX2dyYXBo
LnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKLSAgICB9
CisgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0NvbnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3Rh
dHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRhcmdldC0+YXNKU1ZhbHVlKCkpLnNldElzUHJvdmVk
KHRydWUpOwogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewog
ICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1
dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkK
QEAgLTEyOTAsNyArMTA4Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNo
ZWNrcygKICAgICBBU1NFUlQoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSk7CiAgICAgCiAg
ICAgaWYgKEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSkK
LSAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oZnVuY3Rpb24pLCBjYWxs
VGFyZ2V0LCB0aGlzQXJndW1lbnQpOworICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24s
IE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpLCBjYWxsVGFyZ2V0LCB0aGlzQXJndW1l
bnQpOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlQoY2FsbExpbmtTdGF0dXMuc3RydWN0dXJl
KCkpOwogICAgICAgICBBU1NFUlQoY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKTsKQEAgLTE0
NDcsNiArMTIzOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUK
ICAgICBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLmFwcGVuZChpbmxpbmVWYXJpYWJsZURh
dGEpOwogICAgIAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CisgICAgcHJlcGFyZVRvUGFyc2VCbG9j
aygpOyAvLyBSZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIg
Y29kZS4KICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OwogICAgIApAQCAtMTUz
Niw3ICsxMzI5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQog
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2Rl
VHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0
aC5taW4oKQotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjb25z
dGFudE5hTigpKTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
YWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKQEAgLTE1NjEsNyArMTM1NCw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBzd2l0Y2ggKGludHJpbnNpYykg
ewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKLSAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNvbnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAKQEAgLTE1ODUsNyArMTM3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
dHJpbnNpYyhpbnQKICAgICBjYXNlIENvc0ludHJpbnNpYzoKICAgICBjYXNlIFNpbkludHJpbnNp
YzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgewotICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4o
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNzMyLDE5ICsxNTI1LDE5IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNpYzogewotICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKHJlc3VsdE9wZXJhbmQpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKHRydWUp
KSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGpzQ29uc3Rh
bnQoanNCb29sZWFuKHRydWUpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBPU1JFeGl0SW50cmluc2ljOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoRm9y
Y2VPU1JFeGl0KTsKLSAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwg
Y29uc3RhbnRVbmRlZmluZWQoKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmlu
ZWQpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJ
c0ZpbmFsVGllckludHJpbnNpYzogewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3Vs
dE9wZXJhbmQpLAotICAgICAgICAgICAgZ2V0SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihP
cHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkp
KTsKKyAgICAgICAgICAgIGpzQ29uc3RhbnQoanNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgp
ID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgOiB0cnVlKSkpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTgzOSw3ICsxNjMyLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAg
ICAgIAogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKLSAgICAg
ICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFudChtX3ZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJp
bmcoKSk7CisgICAgICAgICAgICByZXN1bHQgPSBqc0NvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5n
cy5lbXB0eVN0cmluZygpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gYWRk
VG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSkpOwogICAgICAgICAKQEAgLTE5ODAsNyArMTc3Myw3IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgCiAgICAgTm9kZSogbG9hZGVkVmFsdWU7CiAg
ICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IGNl
bGxDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKSk7CisgICAgICAgIGxv
YWRlZFZhbHVlID0ganNDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgICAgICAg
ICBwcmVkaWN0aW9uLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLApA
QCAtMjE1NCw5ICsxOTQ3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgK
IAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJlcGFyZVRvUGFyc2VCbG9jaygpCiB7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQotICAgICAgICBt
X2NvbnN0YW50c1tpXSA9IENvbnN0YW50UmVjb3JkKCk7Ci0gICAgbV9jZWxsQ29uc3RhbnROb2Rl
cy5jbGVhcigpOworICAgIG1fY29uc3RhbnRzLnJlc2l6ZSgwKTsKIH0KIAogTm9kZSogQnl0ZUNv
ZGVQYXJzZXI6OmdldFNjb3BlKGJvb2wgc2tpcFRvcCwgdW5zaWduZWQgc2tpcENvdW50KQpAQCAt
MjE4OCw4ICsxOTc5LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YSgKICAgICAgICAgICAgICAgICB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChh
cmd1bWVudCksIG1fY29kZUJsb2NrLT5pc0NhcHR1cmVkKHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGFyZ3VtZW50KSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlU3RydWN0dXJlQ2hl
Y2tIb2lzdGluZ0ZhaWxlZCgKLSAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAg
ICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQpKTsKKyAgICAgICAgICAgICAgICBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBC
YWRDYWNoZSkpOwogICAgICAgICAgICAgdmFyaWFibGUtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5n
RmFpbGVkKAogICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUu
aGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAgICAg
ICAgCkBAIC0yMjM1LDEzICsyMDI1LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICAvLyA9PT0gRnVuY3Rpb24gZW50cnkgb3Bjb2RlcyA9PT0K
IAotICAgICAgICBjYXNlIG9wX2VudGVyOgorICAgICAgICBjYXNlIG9wX2VudGVyOiB7CisgICAg
ICAgICAgICBOb2RlKiB1bmRlZmluZWQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICAvLyBJbml0aWFsaXplIGFsbCBsb2Nh
bHMgdG8gdW5kZWZpbmVkLgogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2lubGlu
ZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+bV9udW1WYXJzOyArK2kpCi0gICAgICAgICAgICAgICAg
c2V0KHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLCBjb25zdGFudFVuZGVmaW5lZCgpLCBJbW1l
ZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckxv
Y2FsKGkpLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkgPT0gQ29k
ZUZvckNvbnN0cnVjdCkKLSAgICAgICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCksIGNvbnN0YW50VW5kZWZpbmVkKCksIEltbWVkaWF0ZU5ha2VkU2V0KTsKKyAgICAg
ICAgICAgICAgICBzZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCksIHVuZGVmaW5lZCwg
SW1tZWRpYXRlTmFrZWRTZXQpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50ZXIpOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAg
ICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUo
KS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKQpAQCAtMjI1Niw3ICsyMDQ4
LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgICAgICB8fCBjYWNoZWRTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS50
b1RoaXMgIT0gSlNPYmplY3Q6OmluZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzCiAgICAgICAgICAg
ICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtl
U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCiAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKQotICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9m
aWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQpCiAgICAg
ICAgICAgICAgICAgICAgIHx8IChvcDEtPm9wKCkgPT0gR2V0TG9jYWwgJiYgb3AxLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+c3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgpKSkgewogICAgICAg
ICAgICAgICAgICAgICBzZXRUaGlzKGFkZFRvR3JhcGgoVG9UaGlzLCBvcDEpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewpAQCAtMjI3MywxMyArMjA2NCw5IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGludCBjYWxsZWVPcGVyYW5kID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIGNhbGxl
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlT3BlcmFuZCkpOwogICAgICAgICAgICAgYm9v
bCBhbHJlYWR5RW1pdHRlZCA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKGNhbGxlZS0+b3AoKSA9
PSBXZWFrSlNDb25zdGFudCkgewotICAgICAgICAgICAgICAgIEpTQ2VsbCogY2VsbCA9IGNhbGxl
ZS0+d2Vha0NvbnN0YW50KCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNlbGwtPmluaGVyaXRz
KEpTRnVuY3Rpb246OmluZm8oKSkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihjZWxsKTsKKyAgICAg
ICAgICAgIGlmIChKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNhbGxlZS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU0Z1bmN0aW9uKj4oKSkgewogICAgICAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGZ1bmN0aW9uLT5hbGxvY2F0aW9uU3RydWN0dXJlKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQsIE9wSW5mbyhm
dW5jdGlvbikpOworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEFsbG9jYXRpb25Qcm9m
aWxlV2F0Y2hwb2ludCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSkpOwogICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgY2FsbGVlIGlzIHN0aWxsIGxpdmUgdXAgdG8gdGhpcyBwb2lu
dC4KICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsZWUpOwogICAg
ICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKE5ld09iamVjdCwgT3BJbmZvKHN0cnVjdHVyZSkpKTsK
QEAgLTIzNTEsMTAgKzIxMzgsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZEZ1bmN0aW9uKSkgewogICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGdldChWaXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5m
cmVlemUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIEFTU0VSVChjYWNoZWRGdW5j
dGlvbi0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSk7CiAgICAgICAgICAgICAgICAgTm9k
ZSogYWN0dWFsQ2FsbGVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpKTsK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhjYWNoZWRG
dW5jdGlvbiksIGFjdHVhbENhbGxlZSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChXZWFrSlND
b25zdGFudCwgT3BJbmZvKGNhY2hlZEZ1bmN0aW9uKSkpOworICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tGdW5jdGlvbiwgT3BJbmZvKGZyb3plbiksIGFjdHVhbENhbGxlZSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8oZnJvemVuKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2NhbGxlZSk7CiAgICAgICAg
IH0KQEAgLTI0MTgsNyArMjIwNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdp
c3RlciA9IFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwogICAgICAgICAgICAgTm9kZSogb3AgPSBn
ZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFs
UmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhBZGQsIG9wLCBvbmUoKSkpKTsKKyAg
ICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgo
QXJpdGhBZGQsIG9wLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25l
KSkpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbmMpOwogICAgICAgICB9CiAKQEAg
LTI0MjYsNyArMjIxNCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHNyY0RzdFZpcnR1YWxSZWdpc3RlciA9
IFZpcnR1YWxSZWdpc3RlcihzcmNEc3QpOwogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoc3Jj
RHN0VmlydHVhbFJlZ2lzdGVyKTsKLSAgICAgICAgICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0
ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhTdWIsIG9wLCBvbmUoKSkpKTsKKyAgICAgICAg
ICAgIHNldChzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIsIG1ha2VTYWZlKGFkZFRvR3JhcGgoQXJpdGhT
dWIsIG9wLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50T25lKSkpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWMpOwogICAgICAgICB9CiAKQEAgLTI2NDMs
NyArMjQzMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAog
ICAgICAgICBjYXNlIG9wX2VxX251bGw6IHsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7Ci0gICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkp
KTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRUb0dy
YXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKSk7CiAgICAgICAgICAgICBO
RVhUX09QQ09ERShvcF9lcV9udWxsKTsKICAgICAgICAgfQogCkBAIC0yNjYzLDcgKzI0NTEsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2Fz
ZSBvcF9uZXFfbnVsbDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRv
R3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNv
bnN0YW50TnVsbCgpKSkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChMb2dpY2FsTm90LCBhZGRUb0dy
YXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9jb25zdGFudE51bGwpKSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX25lcV9u
dWxsKTsKICAgICAgICAgfQogCkBAIC0yNzg4LDcgKzI1NzYsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfamVxX251bGw6IHsKICAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBj
b25kaXRpb24gPSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnRO
dWxsKCkpOworICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJl
RXFDb25zdGFudCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3Rh
bnROdWxsKSkpOwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hE
YXRhKG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQsIG1fY3VycmVudEluZGV4ICsgT1BD
T0RFX0xFTkdUSChvcF9qZXFfbnVsbCkpKSwgY29uZGl0aW9uKTsKICAgICAgICAgICAgIExBU1Rf
T1BDT0RFKG9wX2plcV9udWxsKTsKICAgICAgICAgfQpAQCAtMjc5Niw3ICsyNTg0LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2pu
ZXFfbnVsbDogewogICAgICAgICAgICAgdW5zaWduZWQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAg
ICAgICAgIE5vZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZh
bHVlLCBjb25zdGFudE51bGwoKSk7CisgICAgICAgICAgICBOb2RlKiBjb25kaXRpb24gPSBhZGRU
b0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE51bGwpKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyYW5jaCwg
T3BJbmZvKGJyYW5jaERhdGEobV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFf
bnVsbCksIG1fY3VycmVudEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKSwgY29uZGl0aW9uKTsKICAg
ICAgICAgICAgIExBU1RfT1BDT0RFKG9wX2puZXFfbnVsbCk7CiAgICAgICAgIH0KQEAgLTI4ODUs
NyArMjY3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJy
YW5jaE9mZnNldHNbaV07CiAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxU
aHJvdWdoLmJ5dGVjb2RlSW5kZXgoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2Rl
SW5kZXgoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpLCB0YXJn
ZXQpKTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlOjp3aXRo
Qnl0ZWNvZGVJbmRleChtX2dyYXBoLmZyZWV6ZShqc051bWJlcihzdGF0aWNfY2FzdDxpbnQzMl90
Pih0YWJsZS5taW4gKyBpKSkpLCB0YXJnZXQpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGZsdXNoSWZUZXJtaW5hbChkYXRhKTsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBP
cEluZm8oJmRhdGEpLCBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKSk7CkBAIC0zMDM2LDcgKzI4MjQsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBBU1NFUlQocG9pbnRlcklzRnVuY3Rpb24o
Y3VycmVudEluc3RydWN0aW9uWzJdLnUuc3BlY2lhbFBvaW50ZXIpKTsKICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoCiAgICAgICAgICAgICAgICAgQ2hlY2tGdW5jdGlvbiwKLSAgICAgICAgICAgICAg
ICBPcEluZm8oYWN0dWFsUG9pbnRlckZvcihtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jaywg
Y3VycmVudEluc3RydWN0aW9uWzJdLnUuc3BlY2lhbFBvaW50ZXIpKSwKKyAgICAgICAgICAgICAg
ICBPcEluZm8obV9ncmFwaC5mcmVlemUoc3RhdGljX2Nhc3Q8SlNDZWxsKj4oYWN0dWFsUG9pbnRl
ckZvcigKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2ss
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnNwZWNpYWxQb2ludGVyKSkpKSwKICAgICAgICAgICAg
ICAgICBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
KSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCAr
IE9QQ09ERV9MRU5HVEgob3Bfam5lcV9wdHIpKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF9qbmVxX3B0cik7CkBAIC0zMDU1LDcgKzI4NDQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAg
ICAgIGNhc2UgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgotICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFy
SW5qZWN0aW9uQ2hlY2tzOiB7CkBAIC0zMDYzLDcgKzI4NTIsNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2YXRpb24K
ICAgICAgICAgICAgICAgICAgICAgJiYgYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKS0+bV9mdW5j
dGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoRnVuY3Rpb25SZWVudHJ5V2F0Y2hwb2ludCwgT3BJbmZvKGFjdGl2YXRpb24tPnN5
bWJvbFRhYmxlKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBjZWxsQ29uc3RhbnQoYWN0aXZhdGlvbikpOworICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGFjdGl2YXRpb24pKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwKQEAgLTMxMTIsNyArMjkwMSw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBOb2RlKiBi
YXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVz
WzBdLnN0cnVjdHVyZVNldCgpLm9ubHlTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAg
ICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1
ZSgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGNlbGxD
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwganNDb25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgp
KSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50
aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTMxMzEs
NyArMjkyMCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHNwZWNp
ZmljVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KHNwZWNpZmljVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKQEAgLTMxNDcsNyArMjkz
Niw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gd2F0Y2hwb2ludFNldC0+aW5mZXJy
ZWRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBzY29wZU5vZGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
VmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaW5mZXJyZWRDb25zdGFu
dCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMzI0OCw3ICszMDM3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9pbml0
X2xhenlfcmVnOiB7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBnZXRKU0NvbnN0YW50Rm9yVmFsdWUoSlNWYWx1ZSgpKSk7
CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpLCBqc0NvbnN0YW50KEpTVmFsdWUoKSkpOwogICAgICAgICAgICAgQVNTRVJUKG9w
ZXJhbmRJc0xvY2FsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAg
ICAgIG1fZ3JhcGgubV9sYXp5VmFycy5zZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpLnRvTG9jYWwoKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9pbml0X2xhenlfcmVnKTsKQEAgLTM0MDMsMTMgKzMxOTIsNiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpidWlsZE9wZXJhbmRNYXBzSWZOCiAgICAgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgIG1faWRl
bnRpZmllck1hcC5hZGQobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoaSkuaW1wbCgpLCBpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCk7ICsraSkgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9jb2RlQmxvY2stPmdl
dENvbnN0YW50KGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7Ci0gICAgICAgIGlmICgh
dmFsdWUpCi0gICAgICAgICAgICBtX2VtcHR5SlNWYWx1ZUluZGV4ID0gaSArIEZpcnN0Q29uc3Rh
bnRSZWdpc3RlckluZGV4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2pzVmFsdWVNYXAu
YWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRl
eCk7Ci0gICAgfQogICAgIAogICAgIG1faGF2ZUJ1aWx0T3BlcmFuZE1hcHMgPSB0cnVlOwogfQpA
QCAtMzUwNyw3ICszMjg5LDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICAgICBieXRlQ29kZVBhcnNlci0+YnVpbGRPcGVyYW5kTWFwc0lmTmVjZXNzYXJ5
KCk7CiAgICAgICAgIAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2Nr
LT5udW1iZXJPZklkZW50aWZpZXJzKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXpl
KGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25z
dGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJz
KCkpOwogICAgICAgICBtX3N3aXRjaFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dp
dGNoSnVtcFRhYmxlcygpKTsKIApAQCAtMzUxOCwyNCArMzI5OSw2IEBAIEJ5dGVDb2RlUGFyc2Vy
OjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNl
ci0+bV9ncmFwaC5pZGVudGlmaWVycygpLmFkZExhemlseShyZXApOwogICAgICAgICAgICAgbV9p
ZGVudGlmaWVyUmVtYXBbaV0gPSByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogICAgICAgICB9Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50
UmVnaXN0ZXJzKCk7ICsraSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNvZGVCbG9j
ay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAg
ICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAgICAgICBpZiAoYnl0ZUNvZGVQYXJzZXItPm1f
ZW1wdHlKU1ZhbHVlSW5kZXggPT0gVUlOVF9NQVgpIHsKLSAgICAgICAgICAgICAgICAgICAgYnl0
ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1ZhbHVlSW5kZXggPSBieXRlQ29kZVBhcnNlci0+bV9jb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3Rl
ckluZGV4OwotICAgICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+YWRkQ29uc3RhbnQo
SlNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fY29uc3Rh
bnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgbV9jb25zdGFudFJlbWFwW2ldID0gYnl0ZUNvZGVQYXJzZXItPm1fZW1wdHlKU1Zh
bHVlSW5kZXg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBKU1ZhbHVlTWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gYnl0ZUNvZGVQYXJzZXItPm1f
anNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKSwgYnl0ZUNvZGVQYXJzZXItPm1f
Y29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkgKyBGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCk7Ci0gICAgICAgICAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAg
ICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+YWRkQ29uc3RhbnQodmFsdWUpOwotICAgICAgICAg
ICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQo
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBbaV0gPSByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICB9CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UgaW5saW5lIHRoZSBzYW1lIGNvZGUgYmxvY2sgbXVsdGlwbGUgdGlt
ZXMsIHdlIGRvbid0IHdhbnQgdG8gbmVlZGxlc3NseQogICAgICAgICAgICAgLy8gZHVwbGljYXRl
IGl0cyBjb25zdGFudCBidWZmZXJzLgpAQCAtMzU2NiwxMyArMzMyOSwxMCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
ID0gMDsKIAogICAgICAgICBtX2lkZW50aWZpZXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCkpOwotICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXplKGNvZGVC
bG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25zdGFudEJ1
ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCkpOwog
ICAgICAgICBtX3N3aXRjaFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mU3dpdGNoSnVt
cFRhYmxlcygpKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51
bWJlck9mSWRlbnRpZmllcnMoKTsgKytpKQogICAgICAgICAgICAgbV9pZGVudGlmaWVyUmVtYXBb
aV0gPSBpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpOyArK2kpCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVtYXBb
aV0gPSBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpOyArK2kpCiAg
ICAgICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXBbaV0gPSBpOwogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCk7ICsr
aSkKQEAgLTM1ODAsMTQgKzMzNDAsMTMgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50
cnk6OklubGluZQogICAgICAgICBtX2NhbGxzaXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFs
c2U7CiAgICAgfQogICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb25zdGFudFJl
bWFwLnNpemUoKTsgKytpKQotICAgICAgICBBU1NFUlQobV9jb25zdGFudFJlbWFwW2ldID49IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCkpOwotICAgIAog
ICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wID0gdGhpczsKIH0KIAogdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogeworICAgIHByZXBhcmVUb1BhcnNlQmxv
Y2soKTsKKyAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1faW5saW5lU3RhY2tUb3At
Pm1fY29kZUJsb2NrOwogICAgIAogICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDcgKzE1MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIC8vIFN3aXRjaCBvbiBjb25zdGFudCAtPiBqZXR0aXNvbiBhbGwgb3RoZXIgdGFy
Z2V0cyBhbmQgbWVyZ2UuCiAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5j
aGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoYmxvY2stPmxhc3QoKS0+Y2hpbGQx
KCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZSA9
IGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5jb25zdGFudCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgVHJpU3RhdGUgZm91bmQgPSBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2sgPSAwOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRy
aVN0YXRlICYmIGktLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4LDIyICsxNjgsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBub2RlLT5vcCgpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3Ro
ZXJOb2RlLT5jb25zdGFudE51bWJlcigpICE9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJldHVybiBv
dGhlck5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAotICAg
IE5vZGUqIHdlYWtDb25zdGFudENTRShOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTspIHsKLSAgICAgICAgICAgIE5v
ZGUqIG90aGVyTm9kZSA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgIGlmIChv
dGhlck5vZGUtPm9wKCkgIT0gV2Vha0pTQ29uc3RhbnQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPndlYWtDb25zdGFu
dCgpICE9IG5vZGUtPndlYWtDb25zdGFudCgpKQorICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+
Y29uc3RhbnQoKSAhPSBub2RlLT5jb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gb3RoZXJOb2RlOwpAQCAtNDIwLDcg
KzQwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGJvb2wg
Y2hlY2tGdW5jdGlvbkVsaW1pbmF0aW9uKEpTQ2VsbCogZnVuY3Rpb24sIE5vZGUqIGNoaWxkMSkK
KyAgICBib29sIGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihGcm96ZW5WYWx1ZSogZnVuY3Rpb24s
IE5vZGUqIGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGVuZEluZGV4
Rm9yUHVyZUNTRSgpOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9jdXJyZW50
QmxvY2stPmF0KGkpOwpAQCAtMTI3MCwxMyArMTI1NSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBzZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAg
aWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBoYXZlIENTRSBmb3Igd2VhayBjb25zdGFudHMgYWdhaW5z
dCBzdHJvbmcgY29uc3RhbnRzIGFuZCB2aWNlLXZlcnNhLgotICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQod2Vha0NvbnN0YW50Q1NFKG5vZGUpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKICAgICAgICAgICAg
IGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCiAgICAgICAgICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNv
bnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgSGFyZFBo
YW50b206CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9u
IDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTk4LDYgKzk4LDggQEAgaW5saW5lIGJvb2wgZW5hYmxlSW50NTIoKQogCiBl
bnVtIE5vUmVzdWx0VGFnIHsgTm9SZXN1bHQgfTsKIAorZW51bSBTdHJ1Y3R1cmVXYXRjaHBvaW50
U3RhdGUgeyBIYXZlTm90U3RhcnRlZFdhdGNoaW5nLCBXYXRjaGluZ0FsbFdhdGNoYWJsZVN0cnVj
dHVyZXMgfTsKKwogZW51bSBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIHsgQmVmb3JlRml4cG9p
bnQsIEZpeHBvaW50Tm90Q29udmVyZ2VkLCBGaXhwb2ludENvbnZlcmdlZCB9OwogCiAvLyBEZXNj
cmliZXMgdGhlIGZvcm0geW91IGNhbiBleHBlY3QgdGhlIGVudGlyZSBncmFwaCB0byBiZSBpbi4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
LDcgKzExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKLSAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0aW9uKCkp
CisgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFs
dWUoKSAhPSBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpKQogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAg
ICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CkBAIC0yNzMsOCArMjczLDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSB8
fCBtX3N0YXRlLmRpZENsb2JiZXIoKSB8fCBub2RlLT5oYXNDb25zdGFudCgpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9y
Tm9kZShub2RlKS52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IEZyb3plblZhbHVlKiB2YWx1ZSA9IG1fZ3JhcGguZnJlZXplKG1fc3RhdGUuZm9yTm9kZShub2Rl
KS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlmICghKnZhbHVlKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBDaGVjayBpZiBtZXJnaW5nIHRo
ZSBhYnN0cmFjdCB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgaW50byB0aGUgYWJzdHJhY3QgdmFsdWUK
QEAgLTI4Myw3ICsyODMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gdGhlbiB3ZSByZWZ1
c2UgdG8gZm9sZC4KICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgb2xkVmFsdWUgPSBtX3N0YXRl
LmZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIGNvbnN0YW50VmFsdWU7
Ci0gICAgICAgICAgICBjb25zdGFudFZhbHVlLnNldChtX2dyYXBoLCB2YWx1ZSwgbV9zdGF0ZS5z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CisgICAgICAgICAgICBjb25zdGFudFZhbHVlLnNldCht
X2dyYXBoLCAqdmFsdWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAg
ICAgICAgY29uc3RhbnRWYWx1ZS5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obm9kZSk7CiAgICAg
ICAgICAgICBpZiAob2xkVmFsdWUubWVyZ2UoY29uc3RhbnRWYWx1ZSkpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CkBAIC0zMzAsNyArMzMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KTsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5m
cmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTQ1Myw3ICs0NTMsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogCiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZh
bHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOworICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgSlNDb25zdGFu
dCwgb3JpZ2luLAorICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGNlbGwpKSk7CiAg
ICAgICAgIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0
eToKICAgICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NTEsNyArODUxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4sCiAgICAgICAg
ICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBPdGhlclVzZSkpOwogICAg
ICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPE90aGVyVXNlPihub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1dlYWtDb25zdGFudCht
X2dyYXBoLmdsb2JhbFRoaXNPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSk7CisgICAg
ICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudCgKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZSwgbV9ncmFwaC5nbG9iYWxUaGlzT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
CkBAIC0xMDM0LDggKzEwMzUsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgY2FzZSBQ
dXRHbG9iYWxWYXI6IHsKICAgICAgICAgICAgIE5vZGUqIGdsb2JhbE9iamVjdE5vZGUgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgV2Vha0pTQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwgCi0gICAgICAgICAgICAgICAg
T3BJbmZvKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKTsK
KyAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIEpTQ29uc3RhbnQsIG5v
ZGUtPm9yaWdpbiwgCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZnJlZXplKG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpKSk7CiAgICAgICAgICAg
ICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBzaG91bGRuJ3QgaGF2ZSBhbiB1bmNvbmRpdGlvbmFs
IGJhcnJpZXIuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMTA0CiAgICAgICAgICAgICBOb2RlKiBiYXJyaWVyTm9kZSA9IG1fZ3JhcGgu
YWRkTm9kZSgKQEAgLTEwNjcsNyArMTA2OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEhhdmUg
dGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBh
ZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogog
ICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICBj
YXNlIEZsdXNoOgpAQCAtMTE5Myw5ICsxMTkzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlm
ICghZWRnZSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVkZ2Uuc2V0VXNl
S2luZChLbm93blN0cmluZ1VzZSk7Ci0gICAgICAgICAgICBpZiAoIW1fZ3JhcGguaXNDb25zdGFu
dChlZGdlLm5vZGUoKSkpCisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gZWRnZS0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCk7CisgICAgICAgICAgICBpZiAoIXN0cmluZykK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcg
PSBqc0Nhc3Q8SlNTdHJpbmcqPihtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgp
KS5hc0NlbGwoKSk7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5sZW5ndGgoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIApAQCAtMTYxOCwyNyArMTYxOCwxNSBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgTm9kZSogb2xkTm9kZSA9IGVkZ2Uubm9kZSgpOwogICAg
ICAgICAKLSAgICAgICAgQVNTRVJUKG9sZE5vZGUtPmhhc0NvbnN0YW50KCkpOwotICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChvbGROb2RlKTsKKyAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IG9sZE5vZGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAodmFs
dWUuaXNJbnQzMigpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgdmFs
dWUgPSBqc051bWJlcihKU0M6OnRvSW50MzIodmFsdWUuYXNOdW1iZXIoKSkpOwogICAgICAgICBB
U1NFUlQodmFsdWUuaXNJbnQzMigpKTsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRSZWdpc3Rl
cjsKLSAgICAgICAgaWYgKCFjb2RlQmxvY2soKS0+ZmluZENvbnN0YW50KHZhbHVlLCBjb25zdGFu
dFJlZ2lzdGVyKSkgewotICAgICAgICAgICAgY29uc3RhbnRSZWdpc3RlciA9IGNvZGVCbG9jaygp
LT5hZGRDb25zdGFudExhemlseSgpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUxhenlXcml0ZUJh
cnJpZXJGb3JDb25zdGFudCgKLSAgICAgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi53cml0ZUJh
cnJpZXJzLAotICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5jb25zdGFudHMoKVtjb25zdGFu
dFJlZ2lzdGVyXSwKLSAgICAgICAgICAgICAgICBjb2RlQmxvY2soKSwKLSAgICAgICAgICAgICAg
ICBjb25zdGFudFJlZ2lzdGVyLAotICAgICAgICAgICAgICAgIGNvZGVCbG9jaygpLT5vd25lckV4
ZWN1dGFibGUoKSwKLSAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgIH0KICAgICAgICAg
ZWRnZS5zZXROb2RlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBtX2lu
ZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0YW50LCBtX2N1cnJlbnROb2RlLT5vcmlnaW4s
Ci0gICAgICAgICAgICBPcEluZm8oY29uc3RhbnRSZWdpc3RlcikpKTsKKyAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdHJ1
bmNhdGVDb25zdGFudHNJZk5lY2Vzc2FyeShOb2RlKiBub2RlLCBBZGRTcGVjdWxhdGlvbk1vZGUg
bW9kZSkKQEAgLTE3NDEsNyArMTcyOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBO
b2RlKiBzaGlmdEFtb3VudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBKU0NvbnN0YW50LCBub2RlLT5vcmlnaW4sCi0g
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5jb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQoanNO
dW1iZXIobG9nRWxlbWVudFNpemUodHlwZSkpKSkpOworICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguZnJlZXplKGpzTnVtYmVyKGxvZ0VsZW1lbnRTaXplKHR5cGUpKSkpKTsKICAgICAgICAgCiAg
ICAgICAgIC8vIFdlIGNhbiB1c2UgYSBCaXRMU2hpZnQgaGVyZSBiZWNhdXNlIHR5cGVkIGFycmF5
cyB3aWxsIG5ldmVyIGhhdmUgYSBieXRlTGVuZ3RoCiAgICAgICAgIC8vIHRoYXQgb3ZlcmZsb3dz
IGludDMyLgpAQCAtMTkxNSw3ICsxOTAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGVkZ2UtPm9wKCkgPT0gSlNDb25zdGFudCk7CiAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MkNvbnN0YW50
LCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIE9wSW5mbyhlZGdlLT5jb25zdGFu
dE51bWJlcigpKSk7CisgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhlZGdlLT5jb25zdGFudCgp
KSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3plblZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdGcm96ZW5WYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworRnJvemVuVmFsdWUqIEZyb3plblZhbHVlOjplbXB0eVNpbmds
ZXRvbigpCit7CisgICAgc3RhdGljIEZyb3plblZhbHVlIGVtcHR5OworICAgIHJldHVybiAmZW1w
dHk7Cit9CisKK3ZvaWQgRnJvemVuVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKG1fc3Ryb25nKQorICAg
ICAgICBvdXQucHJpbnQoIlN0cm9uZzoiKTsKKyAgICBtX3ZhbHVlLmR1bXBJbkNvbnRleHRBc3N1
bWluZ1N0cnVjdHVyZShvdXQsIGNvbnRleHQsIG1fc3RydWN0dXJlKTsKK30KKwordm9pZCBGcm96
ZW5WYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zyb3pl
blZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96
ZW5WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
cm96ZW5WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRnJvemVuVmFs
dWVfaAorI2RlZmluZSBERkdGcm96ZW5WYWx1ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJT
dHJ1Y3R1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBH
cmFwaDsKKworY2xhc3MgRnJvemVuVmFsdWUgeworcHVibGljOgorICAgIEZyb3plblZhbHVlKCkK
KyAgICAgICAgOiBtX3N0cnVjdHVyZShudWxscHRyKQorICAgICAgICAsIG1fc3Ryb25nKGZhbHNl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUoSlNWYWx1ZSB2YWx1ZSkKKyAg
ICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgICAgICAsIG1fc3RydWN0dXJlKG51bGxwdHIpCisg
ICAgICAgICwgbV9zdHJvbmcoZmFsc2UpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
dmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKTsKKyAgICB9CisgICAgCisgICAgRnJvemVuVmFsdWUo
SlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogbV92YWx1ZSh2
YWx1ZSkKKyAgICAgICAgLCBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zdHJv
bmcoZmFsc2UpCisgICAgeworICAgICAgICBBU1NFUlQoKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxs
KCkpID09ICEhc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXND
ZWxsKCkgfHwgdmFsdWUuYXNDZWxsKCktPmNsYXNzSW5mbygpID09IHN0cnVjdHVyZS0+Y2xhc3NJ
bmZvKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRnJvemVuVmFsdWUqIGVtcHR5U2luZ2xl
dG9uKCk7CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YWx1
ZTsgfQorICAgIAorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsg
fQorICAgIAorICAgIHZvaWQgbWFya1N0cm9uZ2x5KCkKKyAgICB7CisgICAgICAgIGlmICghIW1f
dmFsdWUgJiYgbV92YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIG1fc3Ryb25nID0gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1N0cm9uZ2x5TWFya2VkKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJvbmc7IH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgYSB1dGlsaXR5IG1ldGhvZCBmb3IgREZHOjpHcmFwaDo6ZnJl
ZXplKCkuIFlvdSBzaG91bGQgYWxtb3N0IGFsd2F5cyBjYWxsCisgICAgLy8gR3JhcGg6OmZyZWV6
ZSgpIGRpcmVjdGx5LiBDYWxsaW5nIHRoaXMgaW5zdGVhZCBvZiBHcmFwaDo6ZnJlZXplKCkgY2Fu
IHJlc3VsdCBpbgorICAgIC8vIHRoZSBzYW1lIGNvbnN0YW50IGJlaW5nIHZpZXdlZCBhcyBoYXZp
bmcgZGlmZmVyZW50IHN0cnVjdHVyZXMgZHVyaW5nIHRoZSBjb3Vyc2UKKyAgICAvLyBvZiBjb21w
aWxhdGlvbiwgd2hpY2ggY2FuIHNvbWV0aW1lcyBjYXVzZSBiYWQgdGhpbmdzIHRvIGhhcHBlbi4g
Rm9yIGV4YW1wbGUsIHdlCisgICAgLy8gbWF5IG9ic2VydmUgdGhhdCBvbmUgdmVyc2lvbiBvZiB0
aGUgY29uc3RhbnQgaGFzIGFuIHVud2F0Y2hhYmxlIHN0cnVjdHVyZSBidXQKKyAgICAvLyB0aGVu
IGEgbGF0ZXIgdmVyc2lvbiBtYXkgc3RhcnQgdG8gaGF2ZSBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUg
ZHVlIHRvIGEgdHJhbnNpdGlvbi4KKyAgICAvLyBUaGUgcG9pbnQgb2YgZnJlZXppbmcgaXMgdG8g
ZW5zdXJlIHRoYXQgd2UgZ2VuZXJhbGx5IG9ubHkgc2VlIG9uZSB2ZXJzaW9uIG9mCisgICAgLy8g
Y29uc3RhbnRzLCBidXQgdGhhdCByZXF1aXJlcyBmcmVlemluZyB0aHJvdWdoIHRoZSBHcmFwaC4K
KyAgICBzdGF0aWMgRnJvemVuVmFsdWUgZnJlZXplKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gRnJvemVuVmFsdWUoCisgICAgICAgICAgICB2YWx1ZSwgKCEhdmFsdWUgJiYg
dmFsdWUuaXNDZWxsKCkpID8gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpIDogbnVsbHB0cik7
CisgICAgfQorCisgICAgSlNWYWx1ZSBtX3ZhbHVlOworICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1
cmU7CisgICAgYm9vbCBtX3N0cm9uZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHRnJvemVuVmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDE5ICs2MCwyMCBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBw
bGFuLCBMb25nTGl2CiAgICAgLCBtX2NvZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrLmdldCgpKQog
ICAgICwgbV9wcm9maWxlZEJsb2NrKG1fY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwg
bV9hbGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUubV9hbGxvY2F0b3IpCi0gICAgLCBtX211c3RIYW5k
bGVBYnN0cmFjdFZhbHVlcyhPcGVyYW5kc0xpa2UsIHBsYW4ubXVzdEhhbmRsZVZhbHVlcykKKyAg
ICAsIG1fbXVzdEhhbmRsZVZhbHVlcyhPcGVyYW5kc0xpa2UsIHBsYW4ubXVzdEhhbmRsZVZhbHVl
cykKICAgICAsIG1faGFzQXJndW1lbnRzKGZhbHNlKQogICAgICwgbV9uZXh0TWFjaGluZUxvY2Fs
KDApCiAgICAgLCBtX21hY2hpbmVDYXB0dXJlU3RhcnQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkKICAgICAsIG1fZml4cG9pbnRTdGF0ZShCZWZvcmVGaXhwb2ludCkKKyAgICAsIG1f
c3RydWN0dXJlV2F0Y2hwb2ludFN0YXRlKEhhdmVOb3RTdGFydGVkV2F0Y2hpbmcpCiAgICAgLCBt
X2Zvcm0oTG9hZFN0b3JlKQogICAgICwgbV91bmlmaWNhdGlvblN0YXRlKExvY2FsbHlVbmlmaWVk
KQogICAgICwgbV9yZWZDb3VudFN0YXRlKEV2ZXJ5dGhpbmdJc0xpdmUpCiB7CiAgICAgQVNTRVJU
KG1fcHJvZmlsZWRCbG9jayk7CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFu
ZGxlQWJzdHJhY3RWYWx1ZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX211c3RIYW5kbGVBYnN0
cmFjdFZhbHVlc1tpXS5zZXRNb3N0U3BlY2lmaWMoKnRoaXMsIHBsYW4ubXVzdEhhbmRsZVZhbHVl
c1tpXSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9tdXN0SGFuZGxlVmFsdWVzLnNpemUoKTsg
aS0tOykKKyAgICAgICAgbV9tdXN0SGFuZGxlVmFsdWVzW2ldID0gZnJlZXplKHBsYW4ubXVzdEhh
bmRsZVZhbHVlc1tpXSk7CiB9CiAKIEdyYXBoOjp+R3JhcGgoKQpAQCAtMTc4LDcgKzE3OSw2IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAvLyAoNSkgVGhl
IGFyZ3VtZW50cyB0byB0aGUgb3BlcmF0aW9uLiBUaGUgbWF5IGJlIG9mIHRoZSBmb3JtOgogICAg
IC8vICAgICAgICAgQCMgICAtIGEgTm9kZUluZGV4IHJlZmVyZW5jaW5nIGEgcHJpb3Igbm9kZSBp
biB0aGUgZ3JhcGguCiAgICAgLy8gICAgICAgICBhcmcjIC0gYW4gYXJndW1lbnQgbnVtYmVyLgot
ICAgIC8vICAgICAgICAgJCMgICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGEgY29u
c3RhbnQgeyBmb3IgbnVtZXJpYyBjb25zdGFudHMgdGhlIHZhbHVlIGlzIGRpc3BsYXllZCB8IGZv
ciBpbnRlZ2VycywgaW4gYm90aCBkZWNpbWFsIGFuZCBoZXggfS4KICAgICAvLyAgICAgICAgIGlk
IyAgLSB0aGUgaW5kZXggaW4gdGhlIENvZGVCbG9jayBvZiBhbiBpZGVudGlmaWVyIHsgaWYgY29k
ZUJsb2NrIGlzIHBhc3NlZCB0byBkdW1wKCksIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaXMg
ZGlzcGxheWVkIH0uCiAgICAgLy8gICAgICAgICB2YXIjIC0gdGhlIGluZGV4IG9mIGEgdmFyIG9u
IHRoZSBnbG9iYWwgb2JqZWN0LCB1c2VkIGJ5IEdldEdsb2JhbFZhci9QdXRHbG9iYWxWYXIgb3Bl
cmF0aW9ucy4KICAgICBvdXQucHJpbnRmKCIlIDRkOiVzPCVjJXU6IiwgKGludClub2RlLT5pbmRl
eCgpLCBza2lwcGVkID8gIiAgc2tpcHBlZCAgIiA6ICIgICAgICAgICAgICIsIG11c3RHZW5lcmF0
ZSA/ICchJyA6ICcgJywgcmVmQ291bnQpOwpAQCAtMjI0LDkgKzIyNCwxMCBAQCB2b2lkIEdyYXBo
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgaWYgKG5vZGUtPmhhc1RyYW5zaXRp
b24oKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2Rl
LT50cmFuc2l0aW9uKCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkg
ewotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUt
PmZ1bmN0aW9uKCkpLCAiLCAiKTsKLSAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVy
aXRzKEpTRnVuY3Rpb246OmluZm8oKSkpIHsKLSAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiZnVuY3Rpb24oIiwgcG9pbnRlckR1bXAobm9kZS0+ZnVuY3Rpb24oKSks
ICIsICIpOworICAgICAgICBpZiAobm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKS5pc0NlbGwoKQor
ICAgICAgICAgICAgJiYgbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKS5hc0NlbGwoKS0+aW5oZXJp
dHMoSlNGdW5jdGlvbjo6aW5mbygpKSkgeworICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rp
b24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG5vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkuYXNDZWxs
KCkpOwogICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5pc0hvc3RGdW5jdGlvbigpKQogICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiPGhvc3QgZnVuY3Rpb24+Iik7CiAgICAgICAgICAgICBlbHNl
CkBAIC0zMDYsNyArMzA3LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBj
b25zdAogICAgICAgICBvdXQucHJpbnQobm9kZS0+c3RhcnRDb25zdGFudCgpLCAiOlsiKTsKICAg
ICAgICAgQ29tbWFQcmludGVyIGFub3RoZXJDb21tYTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG5vZGUtPm51bUNvbnN0YW50cygpOyArK2kpCi0gICAgICAgICAgICBvdXQucHJp
bnQoYW5vdGhlckNvbW1hLCBpbkNvbnRleHQobV9jb2RlQmxvY2stPmNvbnN0YW50QnVmZmVyKG5v
ZGUtPnN0YXJ0Q29uc3RhbnQoKSlbaV0sIGNvbnRleHQpKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChhbm90aGVyQ29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KGZyZWV6ZShtX2NvZGVCbG9jay0+
Y29uc3RhbnRCdWZmZXIobm9kZS0+c3RhcnRDb25zdGFudCgpKVtpXSksIGNvbnRleHQpKTsKICAg
ICAgICAgb3V0LnByaW50KCJdIik7CiAgICAgfQogICAgIGlmIChub2RlLT5oYXNJbmRleGluZ1R5
cGUoKSkKQEAgLTMyMywxMyArMzI0LDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dChKU1ZhbHVlKG5v
ZGUtPnR5cGVkQXJyYXkoKSksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBv
aW50ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3Jh
Z2VQb2ludGVyKCkpKTsKLSAgICBpZiAobm9kZS0+aXNDb25zdGFudCgpKSB7Ci0gICAgICAgIG91
dC5wcmludChjb21tYSwgIiQiLCBub2RlLT5jb25zdGFudE51bWJlcigpKTsKLSAgICAgICAgSlNW
YWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICBvdXQucHJpbnQo
IiA9ICIsIGluQ29udGV4dCh2YWx1ZSwgY29udGV4dCkpOwotICAgIH0KLSAgICBpZiAob3AgPT0g
V2Vha0pTQ29uc3RhbnQpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2Rl
LT53ZWFrQ29uc3RhbnQoKSksICIgKCIsIGluQ29udGV4dCgqbm9kZS0+d2Vha0NvbnN0YW50KCkt
PnN0cnVjdHVyZSgpLCBjb250ZXh0KSwgIikiKTsKKyAgICBpZiAobm9kZS0+aXNDb25zdGFudCgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPmNv
bnN0YW50KCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aXNKdW1wKCkpCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgIlQ6IiwgKm5vZGUtPnRhcmdldEJsb2NrKCkpOwogICAgIGlmIChub2Rl
LT5pc0JyYW5jaCgpKQpAQCAtNzkyLDkgKzc4OCw3IEBAIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3IKIAogSlNBY3RpdmF0aW9uKiBHcmFwaDo6dHJ5R2V0QWN0aXZhdGlv
bihOb2RlKiBub2RlKQogewotICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8SlNBY3RpdmF0aW9uKj4odmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkpOworICAgIHJldHVybiBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50
PEpTQWN0aXZhdGlvbio+KCk7CiB9CiAKIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIEdyYXBo
Ojp0cnlHZXRSZWdpc3RlcnMoTm9kZSogbm9kZSkKQEAgLTgwOSwxMyArODAzLDExIEBAIFdyaXRl
QmFycmllckJhc2U8VW5rbm93bj4qIEdyYXBoOjp0cnlHZXQKIAogSlNBcnJheUJ1ZmZlclZpZXcq
IEdyYXBoOjp0cnlHZXRGb2xkYWJsZVZpZXcoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUt
Pmhhc0NvbnN0YW50KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpKTsKKyAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IG5vZGUtPmR5bmFtaWND
YXN0Q29uc3RhbnQ8SlNBcnJheUJ1ZmZlclZpZXcqPigpOwogICAgIGlmICghdmlldykKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGlmICghdmlldy0+bGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBX
VEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICByZXR1cm4gdmlldzsKIH0KQEAgLTgzMiw4ICs4MjQs
MzMgQEAgSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZQogICAgIHJldHVy
biB0cnlHZXRGb2xkYWJsZVZpZXcoY2hpbGQobm9kZSwgMCkubm9kZSgpLCBub2RlLT5hcnJheU1v
ZGUoKSk7CiB9CiAKK3ZvaWQgR3JhcGg6OnJlZ2lzdGVyRnJvemVuVmFsdWVzKCkKK3sKKyAgICBt
X2NvZGVCbG9jay0+Y29uc3RhbnRzKCkucmVzaXplKDApOworICAgIGZvciAoRnJvemVuVmFsdWUq
IHZhbHVlIDogbV9mcm96ZW5WYWx1ZXMpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5pc1N0cm9uZ2x5
TWFya2VkKCkpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVC
bG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3Jp
dGVCYXJyaWVyRm9yQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgbV9wbGFuLndyaXRlQmFycmll
cnMsCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50SW5k
ZXhdLAorICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLAorICAgICAgICAgICAgICAgIGNvbnN0
YW50SW5kZXgsCisgICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LAorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIGlmICh2YWx1ZS0+dmFsdWUoKS5pc0NlbGwoKSkKKyAgICAgICAgICAgIG1fcGxhbi53ZWFr
UmVmZXJlbmNlcy5hZGRMYXppbHkodmFsdWUtPnZhbHVlKCkuYXNDZWxsKCkpOworICAgIH0KKyAg
ICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKCkuc2hyaW5rVG9GaXQoKTsKK30KKwogdm9pZCBHcmFw
aDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKKyAgICBmb3IgKEZyb3pl
blZhbHVlKiB2YWx1ZSA6IG1fZnJvemVuVmFsdWVzKSB7CisgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRSZWFkT25seVZhbHVlKHZhbHVlLT52YWx1ZSgpKTsKKyAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih2YWx1ZS0+c3RydWN0dXJlKCkpOwor
ICAgIH0KKyAgICAKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2Nrcygp
OyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+Ymxv
Y2soYmxvY2tJbmRleCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC04NDMsMTUgKzg2MCw2IEBA
IHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0g
ICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVZhbHVlKHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNh
c2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6
CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihub2RlLT5leGVjdXRhYmxlKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTA5LDgg
KzkxNyw1MSBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAg
fQogfQogCitGcm96ZW5WYWx1ZSogR3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlKQoreworICAg
IGlmIChVTkxJS0VMWSghdmFsdWUpKQorICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5
U2luZ2xldG9uKCk7CisgICAgCisgICAgYXV0byByZXN1bHQgPSBtX2Zyb3plblZhbHVlTWFwLmFk
ZChKU1ZhbHVlOjplbmNvZGUodmFsdWUpLCBudWxscHRyKTsKKyAgICBpZiAoTElLRUxZKCFyZXN1
bHQuaXNOZXdFbnRyeSkpCisgICAgICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwor
ICAgIAorICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gbV9mcm96ZW5WYWx1ZXMu
YWRkKEZyb3plblZhbHVlOjpmcmVlemUodmFsdWUpKTsKK30KKworRnJvemVuVmFsdWUqIEdyYXBo
OjpmcmVlemVTdHJvbmdseShKU1ZhbHVlIHZhbHVlKQoreworICAgIEZyb3plblZhbHVlKiByZXN1
bHQgPSBmcmVlemUodmFsdWUpOworICAgIHJlc3VsdC0+bWFya1N0cm9uZ2x5KCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBHcmFwaDo6Y29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9k
ZSwgRnJvemVuVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS0+c3RydWN0dXJlKCkpCisg
ICAgICAgIGFzc2VydElzV2F0Y2hlZCh2YWx1ZS0+c3RydWN0dXJlKCkpOworICAgIGlmIChub2Rl
LT5vcCgpID09IEdldExvY2FsKQorICAgICAgICBkZXRocmVhZCgpOworICAgIGVsc2UKKyAgICAg
ICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKTsKKyAgICBub2Rl
LT5jb252ZXJ0VG9Db25zdGFudCh2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGg6OmNvbnZlcnRUb0Nv
bnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgY29udmVydFRvQ29uc3Rh
bnQobm9kZSwgZnJlZXplKHZhbHVlKSk7Cit9CisKK3ZvaWQgR3JhcGg6OmNvbnZlcnRUb1N0cm9u
Z0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgY29udmVydFRvQ29u
c3RhbnQobm9kZSwgZnJlZXplU3Ryb25nbHkodmFsdWUpKTsKK30KKwogdm9pZCBHcmFwaDo6YXNz
ZXJ0SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogeworICAgIGlmIChtX3N0cnVjdHVy
ZVdhdGNocG9pbnRTdGF0ZSA9PSBIYXZlTm90U3RhcnRlZFdhdGNoaW5nKQorICAgICAgICByZXR1
cm47CisgICAgCiAgICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBpZiAod2F0Y2hwb2ludHMoKS5pc1dhdGNoZWQoc3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0Fy
Z3VtZW50UG9zaXRpb24uaCIKICNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAi
REZHRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSAi
REZHTG9uZ0xpdmVkU3RhdGUuaCIKICNpbmNsdWRlICJERkdOYXR1cmFsTG9vcHMuaCIKICNpbmNs
dWRlICJERkdOb2RlLmgiCkBAIC0xNDQsNDMgKzE0NSwxNSBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IGRldGhyZWFkKCk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2Rl
LCB1bnNpZ25lZCBjb25zdGFudE51bWJlcikKLSAgICB7Ci0gICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEdldExvY2FsKQotICAgICAgICAgICAgZGV0aHJlYWQoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgQVNTRVJUKCFub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpKTsKLSAg
ICAgICAgbm9kZS0+Y29udmVydFRvQ29uc3RhbnQoY29uc3RhbnROdW1iZXIpOwotICAgIH0KKyAg
ICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOworICAgIEZyb3plblZhbHVlKiBm
cmVlemVTdHJvbmdseShKU1ZhbHVlIHZhbHVlKTsgLy8gU2hvcnRoYW5kIGZvciBmcmVlemUodmFs
dWUpLT5tYXJrU3Ryb25nbHkoKS4KICAgICAKLSAgICB1bnNpZ25lZCBjb25zdGFudFJlZ2lzdGVy
Rm9yQ29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0
YW50UmVnaXN0ZXI7Ci0gICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZpbmRDb25zdGFudCh2YWx1
ZSwgY29uc3RhbnRSZWdpc3RlcikpIHsKLSAgICAgICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBt
X2NvZGVCbG9jay0+YWRkQ29uc3RhbnRMYXppbHkoKTsKLSAgICAgICAgICAgIGluaXRpYWxpemVM
YXp5V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgbV9wbGFuLndyaXRl
QmFycmllcnMsCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0
YW50UmVnaXN0ZXJdLAotICAgICAgICAgICAgICAgIG1fY29kZUJsb2NrLAotICAgICAgICAgICAg
ICAgIGNvbnN0YW50UmVnaXN0ZXIsCi0gICAgICAgICAgICAgICAgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLAotICAgICAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKLSAgICB9CisgICAgdm9pZCBjb252ZXJ0VG9Db25z
dGFudChOb2RlKiBub2RlLCBGcm96ZW5WYWx1ZSogdmFsdWUpOworICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0VG9T
dHJvbmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKTsKICAgICAKICAgICB2b2lk
IGFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgdm9pZCBj
b252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKQot
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgY29uc3Rh
bnRSZWdpc3RlckZvckNvbnN0YW50KHZhbHVlKSk7Ci0gICAgfQotCiAgICAgLy8gQ29kZUJsb2Nr
IGlzIG9wdGlvbmFsLCBidXQgbWF5IGFsbG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUg
ZHVtcGVkIChlLmcuIElkZW50aWZpZXIgbmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgPSBXVEY6OmRhdGFGaWxlKCksIER1bXBDb250ZXh0KiA9IDApOwogICAgIGVudW0gUGhpTm9k
ZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlzT25seSwgRHVtcEFsbFBoaXMgfTsKQEAgLTE5NCwxMSAr
MTY3LDYgQEAgcHVibGljOgogICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYg
YW55dGhpbmcgd2FzIHByaW50ZWQuCiAgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVh
bSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50
Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlND
b25zdGFudFNwZWN1bGF0aW9uKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsK
LSAgICB9Ci0gICAgCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShO
b2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxk
U3BlY3VsYXRlSW50MzIpCiAgICAgewogICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVl
QWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwpA
QCAtMzAzLDg4ICsyNzEsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9j
a0Zvcihjb2RlT3JpZ2luKS0+YXJndW1lbnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCkpOwog
ICAgIH0KICAgICAKLSAgICAvLyBIZWxwZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29u
c3RhbnRzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50
KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsK
LSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBub2RlLT5pc0ludDMyQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAg
ICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBub2RlLT5pc0RvdWJsZUNvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgYm9vbCBp
c051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+
aXNOdW1iZXJDb25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNCb29sZWFu
Q29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xl
YW5Db25zdGFudChtX2NvZGVCbG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQo
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVl
OwotICAgIH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKQotICAgIHsK
LSAgICAgICAgaWYgKCFpc0pTQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmICghZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBib29sIGlzSW50ZXJuYWxGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICBpZiAoIWlzSlNDb25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAg
ICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpIHx8ICF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlm
ICghY2VsbC0+aW5oZXJpdHMoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIEhlbHBl
ciBtZXRob2RzIGdldCBjb25zdGFudCB2YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZh
bHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+
dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBpbnQzMl90IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigp
KSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJWYWx1ZSBpc24ndCBpbnQzMjogIiwgdmFsdWUsICJc
biIpOwotICAgICAgICAgICAgZHVtcCgpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwot
ICAgIH0KLSAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAg
ewotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKLSAg
ICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSkuYXNCb29sZWFuKCk7Ci0gICAg
fQotICAgIEpTRnVuY3Rpb24qIHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0g
ICAgewotICAgICAgICBKU0NlbGwqIGZ1bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlND
b25zdGFudChub2RlKSk7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbik7Ci0gICAgICAgIHJldHVy
biBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgY29u
c3QgY2hhciAqb3BOYW1lKE5vZGVUeXBlKTsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0
cnVjdHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCkKQEAgLTgwMiw2ICs2
ODgsOCBAQCBwdWJsaWM6CiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmll
dyhOb2RlKiwgQXJyYXlNb2RlKTsKICAgICBKU0FycmF5QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFi
bGVWaWV3Rm9yQ2hpbGQxKE5vZGUqKTsKICAgICAKKyAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFs
dWVzKCk7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
KSBvdmVycmlkZTsKICAgICAKICAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxl
QXNzZXJ0aW9uRmFpbHVyZSgKQEAgLTgxNSwxMCArNzAzLDE0IEBAIHB1YmxpYzoKICAgICAKICAg
ICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9jYXRvcjsKIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+IG1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzOworICAgIE9wZXJhbmRzPEZyb3plblZhbHVl
Kj4gbV9tdXN0SGFuZGxlVmFsdWVzOwogICAgIAogICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxv
Y2s+ICwgOD4gbV9ibG9ja3M7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVu
OworCisgICAgSGFzaE1hcDxFbmNvZGVkSlNWYWx1ZSwgRnJvemVuVmFsdWUqLCBFbmNvZGVkSlNW
YWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVlSGFzaFRyYWl0cz4gbV9mcm96ZW5WYWx1ZU1hcDsKKyAg
ICBCYWc8RnJvemVuVmFsdWU+IG1fZnJvemVuVmFsdWVzOworICAgIAogICAgIFZlY3RvcjxTdG9y
YWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdlQWNjZXNzRGF0YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+
IG1fYXJndW1lbnRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2
PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKQEAgLTg0OSw2ICs3NDEsNyBAQCBwdWJsaWM6CiAjZW5k
aWYKICAgICAKICAgICBPcHRpbWl6YXRpb25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsK
KyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50U3RhdGUgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50U3RhdGU7
CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsKICAgICBVbmlmaWNhdGlvblN0YXRlIG1fdW5pZmljYXRp
b25TdGF0ZTsKICAgICBSZWZDb3VudFN0YXRlIG1fcmVmQ291bnRTdGF0ZTsKQEAgLTg2MSw3ICs3
NTQsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS0+aGFzQ29u
c3RhbnQoKSk7CiAgICAgICAgIAotICAgICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1t
ZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIEpTVmFsdWUg
aW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWlt
bWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0
ZUludDMyOwogICAgICAgICAKQEAgLTg3OCwzMCArNzcxLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBieXRlY29kZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9k
ZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50MzJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVj
dWxhdGVJbnQzMjsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVj
dWxhdGVJbnQzMihOb2RlKiBtdWwsIE5vZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLT5oYXNDb25zdGFudCgpKTsKLSAgICAgICAg
Ci0gICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0Nv
bnN0YW50KG1fY29kZUJsb2NrKTsKLSAgICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMy
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZh
cmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFyaXRobWV0aWMoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0g
aW1tZWRpYXRlVmFsdWUuYXNJbnQzMigpOwotICAgICAgICAvLyBEb3VibGVzIGhhdmUgYSA1MyBi
aXQgbWFudGlzc2Egc28gd2UgZXhwZWN0IGEgbXVsdGlwbGljYXRpb24gb2YgMl4zMSAodGhlIGhp
Z2hlc3QKLSAgICAgICAgLy8gbWFnbml0dWRlIHBvc3NpYmxlIGludDMyIHZhbHVlKSBhbmQgYW55
IHZhbHVlIGxlc3MgdGhhbiAyXjIyIHRvIG5vdCByZXN1bHQgaW4gYW55Ci0gICAgICAgIC8vIHJv
dW5kaW5nIGluIGEgZG91YmxlIG11bHRpcGxpY2F0aW9uIC0gaGVuY2UgaXQgd2lsbCBiZSBlcXVp
dmFsZW50IHRvIGFuIGludGVnZXIKLSAgICAgICAgLy8gbXVsdGlwbGljYXRpb24sIGlmIHdlIGFy
ZSBkb2luZyBpbnQzMiB0cnVuY2F0aW9uIGFmdGVyd2FyZHMgKHdoaWNoIGlzIHdoYXQKLSAgICAg
ICAgLy8gY2FuU3BlY3VsYXRlSW50MzIoKSBpbXBsaWVzKS4KLSAgICAgICAgY29uc3QgaW50MzJf
dCB0d29Ub1RoZTIyID0gMSA8PCAyMjsKLSAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdv
VG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUgPj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVy
biBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRo
Tm9kZUZsYWdzKCkpOwotCi0gICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCk7
Ci0gICAgfQogfTsKIAogI2RlZmluZSBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9k
ZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAgICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9u
IDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0
U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTEsMTIgKzE1MSwxMyBAQCB2b2lkIEluUGxh
Y2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAoYmxvY2stPmJ5dGVjb2RlQmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlC
eXRlY29kZUluZGV4KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211c3RIYW5kbGVBYnN0cmFjdFZhbHVlcy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZUFic3Ry
YWN0VmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgaW50IG9wZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5k
ZXgoaSk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9t
dXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXNbaV07CisgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHZh
bHVlOworICAgICAgICAgICAgdmFsdWUuc2V0TW9zdFNwZWNpZmljKG1fZ3JhcGgsICptX2dyYXBo
Lm1fbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0
cmFjdFZhbHVlID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNo
Rm9ybWF0KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9u
U2V0LmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDIzICs2MiwyMSBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogICAgIE5vZGUqIGluc2VydENvbnN0YW50KAotICAgICAgICBzaXplX3Qg
aW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLAorICAgICAgICBzaXplX3Qg
aW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsCiAgICAgICAgIE5v
ZGVUeXBlIG9wID0gSlNDb25zdGFudCkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50
UmVnID0KLSAgICAgICAgICAgIG1fZ3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KHZh
bHVlKTsKICAgICAgICAgcmV0dXJuIGluc2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleCwgc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpLCBvcCwgb3JpZ2luLCBPcEluZm8oY29uc3RhbnRSZWcp
KTsKKyAgICAgICAgICAgIGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS0+dmFsdWUo
KSksIG9wLCBvcmlnaW4sIE9wSW5mbyh2YWx1ZSkpOwogICAgIH0KICAgICAKICAgICBOb2RlKiBp
bnNlcnRDb25zdGFudCgKLSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2RlT3JpZ2luIG9yaWdpbiwg
SlNWYWx1ZSB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgICAgICBzaXplX3Qg
aW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsIE5vZGVUeXBlIG9w
ID0gSlNDb25zdGFudCkKICAgICB7CiAgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudChpbmRl
eCwgTm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgb3ApOwogICAgIH0KICAgICAKICAgICBFZGdl
IGluc2VydENvbnN0YW50Rm9yVXNlKAotICAgICAgICBzaXplX3QgaW5kZXgsIE5vZGVPcmlnaW4g
b3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIHNpemVfdCBp
bmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwgVXNlS2luZCB1c2VL
aW5kKQogICAgIHsKICAgICAgICAgTm9kZVR5cGUgb3A7CiAgICAgICAgIGlmIChpc0RvdWJsZSh1
c2VLaW5kKSkKQEAgLTkxLDcgKzg5LDI3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgRWRn
ZSBpbnNlcnRDb25zdGFudEZvclVzZSgKLSAgICAgICAgc2l6ZV90IGluZGV4LCBDb2RlT3JpZ2lu
IG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgICAgICBzaXplX3Qg
aW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBGcm96ZW5WYWx1ZSogdmFsdWUsIFVzZUtpbmQgdXNl
S2luZCkKKyAgICB7CisgICAgICAgIHJldHVybiBpbnNlcnRDb25zdGFudEZvclVzZShpbmRleCwg
Tm9kZU9yaWdpbihvcmlnaW4pLCB2YWx1ZSwgdXNlS2luZCk7CisgICAgfQorCisgICAgTm9kZSog
aW5zZXJ0Q29uc3RhbnQoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2
YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlu
c2VydENvbnN0YW50KGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwgb3ApOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChzaXplX3QgaW5kZXgsIENvZGVP
cmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQpCisg
ICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5kZXgsIG9yaWdpbiwgbV9ncmFw
aC5mcmVlemUodmFsdWUpLCBvcCk7CisgICAgfQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29uc3Rh
bnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwg
VXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9y
VXNlKGluZGV4LCBvcmlnaW4sIG1fZ3JhcGguZnJlZXplKHZhbHVlKSwgdXNlS2luZCk7CisgICAg
fQorICAgIAorICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRGb3JVc2Uoc2l6ZV90IGluZGV4LCBDb2Rl
T3JpZ2luIG9yaWdpbiwgSlNWYWx1ZSB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBOb2RlT3JpZ2luKG9yaWdp
biksIHZhbHVlLCB1c2VLaW5kKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnRlZ2Vy
Q2hlY2tDb21iaW5pbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwxMSArMzExLDEx
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobm9kZS0+YXJpdGhNb2RlKCkgIT0gQXJpdGg6
OkNoZWNrT3ZlcmZsb3cKICAgICAgICAgICAgICAgICAmJiBub2RlLT5hcml0aE1vZGUoKSAhPSBB
cml0aDo6Q2hlY2tPdmVyZmxvd0FuZE5lZ2F0aXZlWmVybykKICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmICghbV9ncmFwaC5pc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQy
KCkubm9kZSgpKSkKKyAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25z
dGFudCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIFJhbmdl
S2V5QW5kQWRkZW5kKAogICAgICAgICAgICAgICAgIFJhbmdlS2V5OjphZGRpdGlvbihub2RlLT5j
aGlsZDEoKSksCi0gICAgICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSW50MzJDb25zdGFudChu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKS0+
YXNJbnQzMigpKTsKICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICBjYXNlIENo
ZWNrSW5Cb3VuZHM6IHsKQEAgLTMyNSwxNSArMzI1LDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIEVkZ2UgaW5kZXggPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50KGluZGV4Lm5vZGUoKSkp
IHsKKyAgICAgICAgICAgIGlmIChpbmRleC0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAg
ICAgICAgICBzb3VyY2UgPSBFZGdlKCk7Ci0gICAgICAgICAgICAgICAgYWRkZW5kID0gbV9ncmFw
aC52YWx1ZU9mSW50MzJDb25zdGFudChpbmRleC5ub2RlKCkpOworICAgICAgICAgICAgICAgIGFk
ZGVuZCA9IGluZGV4LT5hc0ludDMyKCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKAogICAgICAg
ICAgICAgICAgIGluZGV4LT5vcCgpID09IEFyaXRoQWRkCiAgICAgICAgICAgICAgICAgJiYgaW5k
ZXgtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkKLSAgICAgICAgICAgICAgICAmJiBtX2dyYXBo
LmlzSW50MzJDb25zdGFudChpbmRleC0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICAgICAg
ICAgICYmIG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
ICAgIHNvdXJjZSA9IGluZGV4LT5jaGlsZDEoKTsKLSAgICAgICAgICAgICAgICBhZGRlbmQgPSBt
X2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KGluZGV4LT5jaGlsZDIoKS5ub2RlKCkpOworICAg
ICAgICAgICAgICAgIGFkZGVuZCA9IGluZGV4LT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBzb3VyY2UgPSBpbmRleDsKICAgICAgICAg
ICAgICAgICBhZGRlbmQgPSAwOwpAQCAtMzQxLDcgKzM0MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIHJldHVybiBSYW5nZUtleUFuZEFkZGVuZChSYW5nZUtleTo6YXJy
YXlCb3VuZHMoc291cmNlLCBrZXkpLCBhZGRlbmQpOwogICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Miw2ICsxNjIsOCBAQCB2b2lk
IEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAjaWYgVVNFKEpTVkFMVUUzMl82
NCkKICAgICBtX2ppdENvZGUtPmNvbW1vbi5kb3VibGVDb25zdGFudHMgPSBzdGQ6Om1vdmUobV9n
cmFwaC5tX2RvdWJsZUNvbnN0YW50cyk7CiAjZW5kaWYKKyAgICAKKyAgICBtX2dyYXBoLnJlZ2lz
dGVyRnJvemVuVmFsdWVzKCk7CiAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBUYWJsZXM7CiAgICAg
Zm9yIChCYWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0
YS5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwx
NCArMzYsMTQgQEAgSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjbwogewog
ICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICByZXR1
cm4gdmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVlKCk7CiAgICAgY2FzZSBT
aW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0
cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKICAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCZ2bSwgdS5zdHJpbmdJbXBsKTsKICAgICB9CiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdmFsdWUoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZSgpOwogfQogCiBzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1NpbmdsZUNoYXJhY3RlcihK
U1ZhbHVlIHZhbHVlLCBVQ2hhciBjaGFyYWN0ZXIpCkBAIC04MSwxMSArODEsMTEgQEAgVHJpU3Rh
dGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNvbnN0IAogICAgIGNhc2UgS25vd25WYWx1ZToK
ICAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVl
OgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSgpLCBv
dGhlci52YWx1ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpwdXJlU3RyaWN0RXF1
YWwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIudmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgICAgIGNh
c2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TaW5n
bGVDaGFyYWN0ZXIodmFsdWUoKSwgb3RoZXIuY2hhcmFjdGVyKCkpOworICAgICAgICAgICAgcmV0
dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuY2hhcmFj
dGVyKCkpOwogICAgICAgICBjYXNlIEtub3duU3RyaW5nSW1wbDoKLSAgICAgICAgICAgIHJldHVy
biBlcXVhbFRvU3RyaW5nSW1wbCh2YWx1ZSgpLCBvdGhlci5zdHJpbmdJbXBsKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsVG9TdHJpbmdJbXBsKHZhbHVlKCktPnZhbHVlKCksIG90aGVyLnN0
cmluZ0ltcGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTaW5nbGVD
aGFyYWN0ZXJTdHJpbmc6CkBAIC0xMTcsNyArMTE3LDcgQEAgdm9pZCBMYXp5SlNWYWx1ZTo6ZHVt
cEluQ29udGV4dChQcmludFN0cgogewogICAgIHN3aXRjaCAobV9raW5kKSB7CiAgICAgY2FzZSBL
bm93blZhbHVlOgotICAgICAgICB2YWx1ZSgpLmR1bXBJbkNvbnRleHQob3V0LCBjb250ZXh0KTsK
KyAgICAgICAgdmFsdWUoKS0+ZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CiAgICAgICAgIG91dC5wcmlu
dCgiTGF6eTpTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5oCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDcg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR0Zyb3plblZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00NCwxMCArNDQs
MTAgQEAgZW51bSBMYXppbmVzc0tpbmQgewogCiBjbGFzcyBMYXp5SlNWYWx1ZSB7CiBwdWJsaWM6
Ci0gICAgTGF6eUpTVmFsdWUoSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICBMYXp5SlNW
YWx1ZShGcm96ZW5WYWx1ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKSkK
ICAgICAgICAgOiBtX2tpbmQoS25vd25WYWx1ZSkKICAgICB7Ci0gICAgICAgIHUudmFsdWUgPSBK
U1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICB1LnZhbHVlID0gdmFsdWU7CiAgICAgfQog
ICAgIAogICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVUNoYXIg
Y2hhcmFjdGVyKQpAQCAtNjYsMTkgKzY2LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSB0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAg
RnJvemVuVmFsdWUqIHRyeUdldFZhbHVlKEdyYXBoJikgY29uc3QKICAgICB7CiAgICAgICAgIGlm
IChtX2tpbmQgPT0gS25vd25WYWx1ZSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZSgpOwotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAg
ICAgCiAgICAgSlNWYWx1ZSBnZXRWYWx1ZShWTSYpIGNvbnN0OwogICAgIAotICAgIEpTVmFsdWUg
dmFsdWUoKSBjb25zdAorICAgIEZyb3plblZhbHVlKiB2YWx1ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQobV9raW5kID09IEtub3duVmFsdWUpOwotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZGVjb2RlKHUudmFsdWUpOworICAgICAgICByZXR1cm4gdS52YWx1ZTsKICAgICB9CiAgICAg
CiAgICAgVUNoYXIgY2hhcmFjdGVyKCkgY29uc3QKQEAgLTEwMiw3ICsxMDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIC8vIGZvciBhIGtpbmQgb2YgdmFsdWUgdGhhdCBjYW4ndC4KICAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKICAgICAgICAgY2FzZSBLbm93blZhbHVlOgotICAgICAgICAgICAgcmV0
dXJuIHZhbHVlKCkuYXNJbnQzMigpOworICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCktPnZhbHVl
KCkuYXNJbnQzMigpOwogICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAg
ICAgICAgIHJldHVybiBjaGFyYWN0ZXIoKTsKICAgICAgICAgZGVmYXVsdDoKQEAgLTExNiw3ICsx
MTYsNyBAQCBwdWJsaWM6CiAgICAgCiBwcml2YXRlOgogICAgIHVuaW9uIHsKLSAgICAgICAgRW5j
b2RlZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIEZyb3plblZhbHVlKiB2YWx1ZTsKICAgICAgICAg
VUNoYXIgY2hhcmFjdGVyOwogICAgICAgICBTdHJpbmdJbXBsKiBzdHJpbmdJbXBsOwogICAgIH0g
dTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5j
cHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWlu
aWZpZWROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzksMTAgKzM5LDggQEAg
TWluaWZpZWROb2RlIE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUoTm9kZQogICAgIE1pbmlmaWVkTm9k
ZSByZXN1bHQ7CiAgICAgcmVzdWx0Lm1faWQgPSBNaW5pZmllZElEKG5vZGUpOwogICAgIHJlc3Vs
dC5tX29wID0gbm9kZS0+b3AoKTsKLSAgICBpZiAoaGFzQ29uc3RhbnROdW1iZXIobm9kZS0+b3Ao
KSkpCi0gICAgICAgIHJlc3VsdC5tX2luZm8gPSBub2RlLT5jb25zdGFudE51bWJlcigpOwotICAg
IGVsc2UgaWYgKGhhc1dlYWtDb25zdGFudChub2RlLT5vcCgpKSkKLSAgICAgICAgcmVzdWx0Lm1f
aW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPndlYWtDb25zdGFudCgpKTsKKyAg
ICBpZiAoaGFzQ29uc3RhbnQobm9kZS0+b3AoKSkpCisgICAgICAgIHJlc3VsdC5tX2luZm8gPSBK
U1ZhbHVlOjplbmNvZGUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKTsKICAgICAgICAgcmVzdWx0Lm1f
aW5mbyA9IDA7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWRO
b2RlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQyLDcgKzQyLDYgQEAgaW5saW5lIGJvb2wg
YmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKLSAgICBjYXNlIFdl
YWtKU0NvbnN0YW50OgogICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgZGVmYXVsdDoKQEAgLTU5LDIyICs1OCwxMSBAQCBwdWJsaWM6CiAgICAgTWlu
aWZpZWRJRCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KICAgICBOb2RlVHlwZSBvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3A7IH0KICAgICAKLSAgICBib29sIGhhc0NvbnN0YW50KCkgY29uc3Qg
eyByZXR1cm4gaGFzQ29uc3RhbnROdW1iZXIoKSB8fCBoYXNXZWFrQ29uc3RhbnQoKTsgfQorICAg
IGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25zdGFudChtX29wKTsgfQog
ICAgIAotICAgIGJvb2wgaGFzQ29uc3RhbnROdW1iZXIoKSBjb25zdCB7IHJldHVybiBoYXNDb25z
dGFudE51bWJlcihtX29wKTsgfQotICAgIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkg
Y29uc3QKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VS
VChoYXNDb25zdGFudE51bWJlcihtX29wKSk7Ci0gICAgICAgIHJldHVybiBtX2luZm87Ci0gICAg
fQotICAgIAotICAgIGJvb2wgaGFzV2Vha0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4gaGFzV2Vh
a0NvbnN0YW50KG1fb3ApOyB9Ci0gICAgCi0gICAgSlNDZWxsKiB3ZWFrQ29uc3RhbnQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1dlYWtDb25zdGFudChtX29wKSk7Ci0gICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4obV9pbmZvKTsKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShiaXR3aXNlX2Nhc3Q8RW5jb2RlZEpTVmFsdWU+KG1faW5mbykpOwogICAg
IH0KICAgICAKICAgICBzdGF0aWMgTWluaWZpZWRJRCBnZXRJRChNaW5pZmllZE5vZGUqIG5vZGUp
IHsgcmV0dXJuIG5vZGUtPmlkKCk7IH0KQEAgLTg0LDE3ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAg
fQogICAgIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgYm9vbCBoYXNDb25zdGFudE51bWJlcihOb2Rl
VHlwZSB0eXBlKQorICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50KE5vZGVUeXBlIHR5cGUpCiAg
ICAgewogICAgICAgICByZXR1cm4gdHlwZSA9PSBKU0NvbnN0YW50IHx8IHR5cGUgPT0gSW50NTJD
b25zdGFudCB8fCB0eXBlID09IERvdWJsZUNvbnN0YW50OwogICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBoYXNXZWFrQ29uc3RhbnQoTm9kZVR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0
eXBlID09IFdlYWtKU0NvbnN0YW50OwotICAgIH0KICAgICAKICAgICBNaW5pZmllZElEIG1faWQ7
Ci0gICAgdWludHB0cl90IG1faW5mbzsKKyAgICB1aW50NjRfdCBtX2luZm87CiAgICAgTm9kZVR5
cGUgbV9vcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNDA2LDExICs0MDYsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1dlYWtDb25zdGFudCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gb3AoKSA9PSBXZWFrSlNDb25zdGFudDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBpc1Bo
YW50b21Bcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gUGhhbnRvbUFy
Z3VtZW50czsKQEAgLTQyMiw3ICs0MTcsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNhc2Ug
SlNDb25zdGFudDoKICAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKICAgICAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgICAgICBjYXNl
IFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVm
YXVsdDoKQEAgLTQzMCwxMyArNDI0LDE2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAg
IH0KIAotICAgIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKCkKKyAgICBGcm96ZW5WYWx1ZSogY29u
c3RhbnQoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7Ci0gICAgICAgIHJl
dHVybiBtX29wSW5mbzsKKyAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50KCkpOworICAgICAgICBp
ZiAob3AoKSA9PSBQaGFudG9tQXJndW1lbnRzKQorICAgICAgICAgICAgcmV0dXJuIEZyb3plblZh
bHVlOjplbXB0eVNpbmdsZXRvbigpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEZyb3pl
blZhbHVlKj4obV9vcEluZm8pOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0
YW50KHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQorICAgIC8vIERvbid0IGNhbGwgdGhpcyBkaXJl
Y3RseSAtIHVzZSBHcmFwaDo6Y29udmVydFRvQ29uc3RhbnQoKSBpbnN0ZWFkIQorICAgIHZvaWQg
Y29udmVydFRvQ29uc3RhbnQoRnJvemVuVmFsdWUqIHZhbHVlKQogICAgIHsKICAgICAgICAgaWYg
KGhhc0RvdWJsZVJlc3VsdCgpKQogICAgICAgICAgICAgbV9vcCA9IERvdWJsZUNvbnN0YW50OwpA
QCAtNDQ1LDE1ICs0NDIsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIG1fb3AgPSBKU0NvbnN0YW50OwogICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgIG1f
b3BJbmZvID0gY29uc3RhbnROdW1iZXI7Ci0gICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgY29udmVydFRvV2Vha0NvbnN0YW50KEpTQ2VsbCogY2VsbCkKLSAg
ICB7Ci0gICAgICAgIG1fb3AgPSBXZWFrSlNDb25zdGFudDsKLSAgICAgICAgbV9mbGFncyAmPSB+
KE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyIHwgTm9kZUNsb2JiZXJzV29ybGQp
OwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGNlbGwpOworICAg
ICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICAgICAg
Y2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCkBAIC01MTgsNTIgKzUwNyw3NyBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fb3AgPSBUb1N0cmluZzsKICAgICB9CiAgICAgCi0gICAgSlND
ZWxsKiB3ZWFrQ29uc3RhbnQoKQorICAgIEpTVmFsdWUgYXNKU1ZhbHVlKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChvcCgpID09IFdlYWtKU0NvbnN0YW50KTsKLSAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxKU0NlbGwqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52
YWx1ZSgpOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KENvZGVC
bG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KCkKICAgICB7Ci0gICAg
ICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWUod2Vha0NvbnN0YW50KCkpOwotICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6Ci0gICAgICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6Ci0gICAgICAgIGNhc2UgSW50NTJD
b25zdGFudDoKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIo
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBjb25zdGFudE51bWJlcigpKS5nZXQoKTsKLSAg
ICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOyAvLyBIYXZlIHRvIHJldHVybiBz
b21ldGhpbmcgaW4gcmVsZWFzZSBtb2RlLgotICAgICAgICB9CisgICAgICAgIHJldHVybiBpc0Nv
bnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0ludDMyKCk7CiAgICAgfQotCi0gICAg
Ym9vbCBpc0ludDMyQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgCisgICAgaW50
MzJfdCBhc0ludDMyKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0ludDMyKCk7CisgICAgICAgIHJldHVybiBhc0pT
VmFsdWUoKS5hc0ludDMyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNEb3VibGVDb25zdGFu
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB1aW50MzJfdCBhc1VJbnQzMigpCiAgICAgewot
ICAgICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmlzRG91YmxlKCk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICBB
U1NFUlQoIWlzSW50MzJDb25zdGFudChjb2RlQmxvY2spKTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc051
bWJlckNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrKQorICAgIGJvb2wgaXNEb3VibGVDb25z
dGFudCgpCiAgICAgewotICAgICAgICBib29sIHJlc3VsdCA9IGlzQ29uc3RhbnQoKSAmJiB2YWx1
ZU9mSlNDb25zdGFudChjb2RlQmxvY2spLmlzTnVtYmVyKCk7Ci0gICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gKGlzSW50MzJDb25zdGFudChjb2RlQmxvY2spIHx8IGlzRG91YmxlQ29uc3RhbnQoY29k
ZUJsb2NrKSkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gaXNDb25z
dGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNEb3VibGUoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc051bWJlckNvbnN0YW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0NvbnN0
YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc051bWJlcigpOworICAgIH0KKyAgICAKKyAg
ICBkb3VibGUgYXNOdW1iZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFzSlNWYWx1ZSgpLmFz
TnVtYmVyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNNYWNoaW5lSW50Q29uc3RhbnQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgp
LmlzTWFjaGluZUludCgpOworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IGFzTWFjaGluZUludCgp
CisgICAgeworICAgICAgICByZXR1cm4gYXNKU1ZhbHVlKCkuYXNNYWNoaW5lSW50KCk7CiAgICAg
fQogICAgIAotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgYm9vbCBpc0Jvb2xlYW5Db25zdGFudCgpCiAgICAgewotICAgICAgICByZXR1cm4gaXND
b25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNCb29sZWFuKCk7Cisg
ICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3RhbnQoKS0+dmFsdWUoKS5pc0Jvb2xl
YW4oKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhc0Jvb2xlYW4oKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbnN0YW50KCktPnZhbHVlKCkuYXNCb29sZWFuKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNDZWxsQ29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQo
KSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQ2VsbCgpOworICAgIH0KKyAgICAKKyAgICBKU0Nl
bGwqIGFzQ2VsbCgpCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RhbnQoKS0+dmFsdWUoKS5h
c0NlbGwoKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGR5
bmFtaWNDYXN0Q29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgaWYgKCFpc0NlbGxDb25zdGFudCgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBqc0R5bmFtaWND
YXN0PFQ+KGFzQ2VsbCgpKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjb250YWluc01vdkhpbnQo
KQpAQCAtMTAxNiwxMiArMTAzMCwxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBKU0NlbGwqIGZ1bmN0aW9uKCkKKyAgICBGcm96ZW5WYWx1ZSogZnVuY3Rpb24oKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGhhc0Z1bmN0aW9uKCkpOwotICAgICAgICBKU0NlbGwqIHJl
c3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNGdW5jdGlvbio+KG1fb3BJbmZvKTsKLSAgICAgICAg
QVNTRVJUKEpTVmFsdWUocmVzdWx0KS5pc0Z1bmN0aW9uKCkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxGcm96ZW5WYWx1ZSo+KG1fb3BJ
bmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNFeGVjdXRhYmxlKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTAgKzQxLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3Jv
KERvdWJsZUNvbnN0YW50LCBOb2RlUmVzdWx0RG91YmxlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAg
ICAgbWFjcm8oSW50NTJDb25zdGFudCwgTm9kZVJlc3VsdEludDUyIHwgTm9kZURvZXNOb3RFeGl0
KSBcCiAgICAgXAotICAgIC8qIEEgY29uc3RhbnQgbm90IGluIHRoZSBDb2RlQmxvY2sncyBjb25z
dGFudCBwb29sLiBVc2VzIGdldCBwYXRjaGVkIHRvIGp1bXBzIHRoYXQgZXhpdCB0aGUgKi9cCi0g
ICAgLyogY29kZSBibG9jay4gKi9cCi0gICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1
bHRKUyB8IE5vZGVEb2VzTm90RXhpdCkgXAotICAgIFwKICAgICAvKiBNYXJrZXIgdG8gaW5kaWNh
dGUgdGhhdCBhbiBvcGVyYXRpb24gd2FzIG9wdGltaXplZCBlbnRpcmVseSBhbmQgYWxsIHRoYXQg
aXMgbGVmdCAqL1wKICAgICAvKiBpcyB0byBtYWtlIG9uZSBub2RlIGFsaWFzIGFub3RoZXIuIENT
RSB3aWxsIGxhdGVyIHVzdWFsbHkgZWxpbWluYXRlIHRoaXMgbm9kZSwgKi9cCiAgICAgLyogdGhv
dWdoIGl0IG1heSBjaG9vc2Ugbm90IHRvIGlmIGl0IHdvdWxkIGNvcnJ1cHQgcHJlZGljdGlvbnMg
KHZlcnkgcmFyZSkuICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OCw3ICs4OCw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0YXRlKiBleGVjKQogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBQcm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29t
cGlsYXRpb24tPmFkZE9TUkV4aXQoCiAgICAgICAgICAgICAgICAgZXhpdEluZGV4LCBQcm9maWxl
cjo6T3JpZ2luU3RhY2soZGF0YWJhc2UsIGNvZGVCbG9jaywgZXhpdC5tX2NvZGVPcmlnaW4pLAot
ICAgICAgICAgICAgICAgIGV4aXQubV9raW5kLCBpc1dhdGNocG9pbnQoZXhpdC5tX2tpbmQpKTsK
KyAgICAgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5tX2tpbmQgPT0gVW5jb3VudGFibGVJ
bnZhbGlkYXRpb24pOwogICAgICAgICAgICAgaml0LmFkZDY0KENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbTMyKDEpLCBDQ2FsbEhlbHBlcnM6OkFic29sdXRlQWRkcmVzcyhwcm9maWxlckV4aXQtPmNv
dW50ZXJBZGRyZXNzKCkpKTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1
LDkgKzEzNSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAg
ICAgICAKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0g
ICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKLSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHR5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5v
ZGUpKTsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OiB7CisgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSB0eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+YXNKU1ZhbHVlKCkpOwogICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gU3BlY0ludDUyQXNEb3VibGUgJiYgZW5hYmxlSW50NTIoKSkK
ICAgICAgICAgICAgICAgICB0eXBlID0gU3BlY0ludDUyOwogICAgICAgICAgICAgY2hhbmdlZCB8
PSBzZXRQcmVkaWN0aW9uKHR5cGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyAr
MTA5LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJD
b25zdGFudDoKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAg
ICAgY2FzZSBUb1RoaXM6CiAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsMTIgQEAgYm9vbCBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSBlZAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgdGFnR1BSID0gYWxsb2NhdGUoKTsKICAgICAgICAgICAg
IHBheWxvYWRHUFIgPSBhbGxvY2F0ZSgpOwotICAgICAgICAgICAgbV9qaXQubW92ZShJbW0zMih2
YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSkudGFnKCkpLCB0YWdHUFIpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSkucGF5bG9h
ZCgpKSwgcGF5bG9hZEdQUik7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNK
U1ZhbHVlKCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlLnRhZygpKSwgdGFn
R1BSKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWUucGF5bG9hZCgpKSwgcGF5
bG9hZEdQUik7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHRhZ0dQUiwgdmlydHVhbFJlZ2lz
dGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihwYXls
b2FkR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBpc0ludDMy
Q29uc3RhbnQoZWRnZS5ub2RlKCkpID8gRGF0YUZvcm1hdEpTSW50MzIgOiBEYXRhRm9ybWF0SlMp
OworICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIHRhZ0dQUiwgcGF5bG9h
ZEdQUiwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERhdGFG
b3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0KCk7CiAgICAgICAgICAgICBBU1NF
UlQoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdE5vbmUgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZv
cm1hdFN0b3JhZ2UpOwpAQCAtNzM2LDcgKzczNyw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludDMKICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
ZWRnZS0+dmlydHVhbFJlZ2lzdGVyKCk7CiAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5l
cmF0aW9uSW5mb0Zyb21WaXJ0dWFsUmVnaXN0ZXIodmlydHVhbFJlZ2lzdGVyKTsKIAotICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7
CisgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWVkZ2UtPmlzSW50MzJDb25zdGFudCgp
KSB7CiAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludDMy
OwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKQEAgLTc0NSw5ICs3NDYsOSBAQCBHUFJSZWcg
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lz
dGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChl
ZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50
KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBBU1NFUlQoZWRnZS0+aXNJbnQzMkNvbnN0YW50
KCkpOwogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdl
Lm5vZGUoKSkpLCBncHIpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
SW1tMzIoZWRnZS0+YXNJbnQzMigpKSwgZ3ByKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBp
bmZvLmZpbGxJbnQzMigqbV9zdHJlYW0sIGdwcik7CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQg
PSBEYXRhRm9ybWF0SW50MzI7CkBAIC04MzUsNyArODM2LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0g
RGF0YUZvcm1hdE5vbmUpIHsKIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewot
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNOdW1iZXJDb25zdGFudChlZGdlLm5vZGUoKSkp
OworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWRnZS0+aXNOdW1iZXJDb25zdGFudCgpKTsK
ICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAgbV9q
aXQubG9hZERvdWJsZShhZGRyZXNzT2ZEb3VibGVDb25zdGFudChlZGdlLm5vZGUoKSksIGZwcik7
CiAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVyQ29uc3RhbnQpOwpAQCAtODc0LDcgKzg3NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25z
dGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFu
dChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pT
VmFsdWUoKTsKICAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAg
ICAgaWYgKGpzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwpAQCAtOTYzLDcgKzk2
NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKKyAg
ICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAg
ICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0Jv
b2xlYW4oKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC0xNjgzLDExICsxNjg0LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBpbml0Q29uc3RhbnRJ
bmZvKG5vZGUpOwogICAgICAgICBicmVhazsKIAotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0g
ICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+d2Vha0NvbnN0YW50KCkpOwotICAg
ICAgICBpbml0Q29uc3RhbnRJbmZvKG5vZGUpOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2Ug
SWRlbnRpdHk6IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgYnJlYWs7CkBAIC0xODU2LDE4ICsxODUyLDE4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAg
IGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0ludDMyQ29uc3RhbnQo
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBv
cDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAg
Yml0T3Aob3AsIG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCk7LCBvcDIuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAKICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3Ax
KTsKIAotICAgICAgICAgICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNo
aWxkMigpLm5vZGUoKSksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJp
dE9wKG9wLCBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CiAKICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0xODg2LDExICsxODgyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExT
aGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlz
SW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgUmV1c2UsIG9wMSk7CiAKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwg
dmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSAmIDB4MWYsIHJlc3Vs
dC5ncHIoKSk7CisgICAgICAgICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIG5vZGUtPmNoaWxk
MigpLT5hc0ludDMyKCkgJiAweDFmLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnQz
MlJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjE1OCw3
ICsyMTU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKLSAgICAg
ICAgQVNTRVJUKGlzTnVsbENvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOworICAgICAg
ICBBU1NFUlQobm9kZS0+Y2hpbGQyKCktPmFzSlNWYWx1ZSgpLmlzTnVsbCgpKTsKICAgICAgICAg
aWYgKG5vblNwZWN1bGF0aXZlQ29tcGFyZU51bGwobm9kZSwgbm9kZS0+Y2hpbGQxKCkpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY5NTg4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODAsMjEgKzgwLDkgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsSlNWYWx1ZShFZGdlIAogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAogICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJD
b25zdGFudChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlNJbnQzMik7Ci0gICAgICAgICAgICAgICAgSlNW
YWx1ZSBqc1ZhbHVlID0ganNOdW1iZXIodmFsdWVPZkludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkp
KTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW02NChKU1Zh
bHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChpc051
bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKU0RvdWJsZSk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBqc1ZhbHVlKEpTVmFsdWU6OkVuY29kZUFzRG91YmxlLCB2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KGVkZ2Uu
bm9kZSgpKSk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQoZWRnZS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNWYWx1ZSkpLCBncHIpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRK
Uyk7Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGVkZ2Ut
PmFzSlNWYWx1ZSgpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CisgICAgICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAg
ICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50
KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQg
PSBpbmZvLnNwaWxsRm9ybWF0KCk7CkBAIC03MjYsNyArNzE0LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVn
aXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwog
Ci0gICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5v
ZGUoKSkpIHsKKyAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNJbnQzMkNv
bnN0YW50KCkpIHsKICAgICAgICAgLy8gUHJvdGVjdCB0aGUgc2lsZW50IHNwaWxsL2ZpbGwgbG9n
aWMgYnkgZmFpbGluZyBlYXJseS4gSWYgd2UgInNwZWN1bGF0ZSIgb24KICAgICAgICAgLy8gdGhl
IGNvbnN0YW50IHRoZW4gdGhlIHNpbGVudCBmaWxsZXIgbWF5IHRoaW5rIHRoYXQgd2UgaGF2ZSBh
biBpbnQzMiBhbmQgYQogICAgICAgICAvLyBjb25zdGFudCwgc28gaXQgd2lsbCB0cnkgdG8gZmls
bCB0aGlzIGFzIGFuIGludDMyIGNvbnN0YW50LiBCYWQgdGhpbmdzIHdpbGwKQEAgLTc0Miw4ICs3
MzAsOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzCiAKICAgICAg
ICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4o
Z3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7Ci0gICAgICAgICAgICBB
U1NFUlQoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7Ci0gICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUo
KSkpLCBncHIpOworICAgICAgICAgICAgQVNTRVJUKGVkZ2UtPmlzSW50MzJDb25zdGFudCgpKTsK
KyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGVkZ2UtPmFzSW50
MzIoKSksIGdwcik7CiAgICAgICAgICAgICBpbmZvLmZpbGxJbnQzMigqbV9zdHJlYW0sIGdwcik7
CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50MzI7CiAgICAgICAgICAg
ICByZXR1cm4gZ3ByOwpAQCAtODc4LDcgKzg2Niw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludDUKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewotICAgICAgICBpZiAoKGVkZ2UtPmhhc0NvbnN0
YW50KCkgJiYgIXZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKS5pc01hY2hpbmVJbnQoKSkp
IHsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkgJiYgIWVkZ2UtPmlzTWFjaGluZUlu
dENvbnN0YW50KCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCAwKTsKICAgICAgICAgICAgIHJldHVybiBhbGxv
Y2F0ZSgpOwogICAgICAgICB9CkBAIC04ODYsNyArODc0LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50NQogICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsK
IAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAg
SlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAgICBBU1NFUlQo
anNWYWx1ZS5pc01hY2hpbmVJbnQoKSk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgaW50NjRf
dCB2YWx1ZSA9IGpzVmFsdWUuYXNNYWNoaW5lSW50KCk7CkBAIC05NjcsOSArOTU1LDkgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAK
LSAgICAgICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgICAg
ICAgICAgaWYgKGVkZ2UtPmlzTnVtYmVyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQoZWRnZS5ub2RlKCkpKSksIGdwcik7CisgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6SW1tNjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KGVkZ2UtPmFz
TnVtYmVyKCkpKSwgZ3ByKTsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShn
cHIsIGZwcik7CiAgICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7CiAKQEAgLTEwMTAsNyArOTk4
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBH
UFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpOworICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVl
KCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgICAg
IG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7CkBAIC0xMDkxLDcgKzEwNzksNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBn
cHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0g
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUo
KSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAg
ICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTE3OTEsMTEgKzE3NzksNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGluaXRDb25zdGFu
dEluZm8obm9kZSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
LSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT53ZWFrQ29uc3RhbnQoKSk7Ci0g
ICAgICAgIGluaXRDb25zdGFudEluZm8obm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgICAK
ICAgICBjYXNlIElkZW50aXR5OiB7CiAgICAgICAgIC8vIENTRSBzaG91bGQgYWx3YXlzIGVsaW1p
bmF0ZSB0aGlzLgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk1
OSwxOCArMTk0MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKLSAg
ICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAg
IFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AyKTsKIAotICAgICAgICAg
ICAgYml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSks
IG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCBub2RlLT5j
aGlsZDEoKS0+YXNJbnQzMigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAg
ICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
aXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAgICAgfSBlbHNl
IGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKIAotICAgICAgICAgICAg
Yml0T3Aob3AsIHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSksIG9w
MS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGJpdE9wKG9wLCBub2RlLT5jaGls
ZDIoKS0+YXNJbnQzMigpLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAg
IGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0x
OTg5LDExICsxOTcyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICBjYXNlIEJpdFJTaGlmdDoKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJp
dFVSU2hpZnQ6Ci0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMSk7
CiAKLSAgICAgICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSAmIDB4MWYsIHJlc3VsdC5ncHIoKSk7CisgICAgICAg
ICAgICBzaGlmdE9wKG9wLCBvcDEuZ3ByKCksIG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkgJiAw
eDFmLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICBpbnQzMlJlc3VsdChyZXN1bHQuZ3By
KCksIG5vZGUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjI2Myw3ICsyMjQ2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICAg
ICAgCiAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKLSAgICAgICAgQVNTRVJUKGlzTnVsbENv
bnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpOworICAgICAgICBBU1NFUlQobm9kZS0+Y2hp
bGQyKCktPmFzSlNWYWx1ZSgpLmlzTnVsbCgpKTsKICAgICAgICAgaWYgKG5vblNwZWN1bGF0aXZl
Q29tcGFyZU51bGwobm9kZSwgbm9kZS0+Y2hpbGQxKCkpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBicmVhazsKQEAgLTM3MTksNyArMzcwMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7
CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9uKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRGdW5jdGlvbiwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLT5m
dW5jdGlvbigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkRnVuY3Rpb24sIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGZ1bmN0aW9uLmdwcigpKSwgbm9kZS0+Y2hpbGQxKCksIG1f
aml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwg
bm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKS5hc0NlbGwoKSkpOwogICAgICAgICBub1Jlc3VsdChu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzczNyw4ICszNzIwLDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBBU1NFUlQobm9kZS0+
c3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKICAgICAgICAgCiAgICAgICAgIEV4aXRLaW5kIGV4aXRL
aW5kOwotICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQp
Ci0gICAgICAgICAgICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFudENhY2hlOworICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICBleGl0S2luZCA9
IEJhZENvbnN0YW50Q2FjaGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGV4aXRLaW5kID0g
QmFkQ2FjaGU7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjAsNyArMzIwLDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwog
ICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBBU1NFUlQoaXNK
U0ludDMyKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkpOwogICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSk7Cisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+aXNJbnQzMkNvbnN0YW50KCkpOwogICAgICAgICAgICAg
ZmlsbEFjdGlvbiA9IFNldEludDMyQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgZmlsbEFjdGlvbiA9IExvYWQzMlBheWxvYWQ7CkBAIC0zMzksOCArMzM5LDcgQEAgU2lsZW50
UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwogICAgIH0gZWxzZSBpZiAocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdENlbGwpIHsKICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkg
PT0gc291cmNlKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsKLSAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlLmlzQ2VsbCgpKTsKKyAgICAgICAgICAgIG5vZGUt
PmFzQ2VsbCgpOyAvLyBUbyBnZXQgdGhlIGFzc2VydGlvbi4KICAgICAgICAgICAgIGZpbGxBY3Rp
b24gPSBTZXRDZWxsQ29uc3RhbnQ7CiAgICAgICAgIH0gZWxzZSB7CiAjaWYgVVNFKEpTVkFMVUU2
NCkKQEAgLTM4Myw4ICszODIsOSBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZl
SklUOjpzCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgQVNTRVJUKGluZm8uZ3ByKCkgPT0g
c291cmNlKTsKICAgICAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZU9mSlNDb25zdGFudChub2RlKS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGlmIChu
b2RlLT5pc0NlbGxDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRU
cnVzdGVkSlNDb25zdGFudDsKKyAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmaWxs
QWN0aW9uID0gU2V0SlNDb25zdGFudDsKICAgICAgICAgfSBlbHNlIGlmIChpbmZvLnNwaWxsRm9y
bWF0KCkgPT0gRGF0YUZvcm1hdEludDMyKSB7CiAgICAgICAgICAgICBBU1NFUlQocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTSW50MzIpOwpAQCAtNDQyLDcgKzQ0Miw3IEBAIFNpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICAgICAgCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICBBU1NFUlQoaXNO
dW1iZXJDb25zdGFudChub2RlKSk7CisgICAgICAgIG5vZGUtPmFzTnVtYmVyKCk7IC8vIFRvIGdl
dCB0aGUgYXNzZXJ0aW9uLgogICAgICAgICBmaWxsQWN0aW9uID0gU2V0RG91YmxlQ29uc3RhbnQ7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0Tm9uZSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSk7CkBA
IC00NTEsNyArNDUxLDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6
cwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKICAgICBBU1NFUlQoaW5mby5yZWdpc3RlckZvcm1h
dCgpID09IERhdGFGb3JtYXREb3VibGUpOwogICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7
Ci0gICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgbm9kZS0+
YXNOdW1iZXIoKTsgLy8gVG8gZ2V0IHRoZSBhc3NlcnRpb24uCiAgICAgICAgIGZpbGxBY3Rpb24g
PSBTZXREb3VibGVDb25zdGFudDsKICAgICB9IGVsc2UKICAgICAgICAgZmlsbEFjdGlvbiA9IExv
YWREb3VibGU7CkBAIC00OTYsMjEgKzQ5NiwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzaWxl
bnRGaWxsKGNvbnN0IFNpCiAgICAgY2FzZSBEb05vdGhpbmdGb3JGaWxsOgogICAgICAgICBicmVh
azsKICAgICBjYXNlIFNldEludDMyQ29uc3RhbnQ6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIo
dmFsdWVPZkludDMyQ29uc3RhbnQocGxhbi5ub2RlKCkpKSwgcGxhbi5ncHIoKSk7CisgICAgICAg
IG1faml0Lm1vdmUoSW1tMzIocGxhbi5ub2RlKCktPmFzSW50MzIoKSksIHBsYW4uZ3ByKCkpOwog
ICAgICAgICBicmVhazsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgU2V0SW50NTJDb25z
dGFudDoKLSAgICAgICAgbV9qaXQubW92ZShJbW02NCh2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5v
ZGUoKSkuYXNNYWNoaW5lSW50KCkgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCksIHBsYW4u
Z3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHBsYW4ubm9kZSgpLT5hc01hY2hpbmVJ
bnQoKSA8PCBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSwgcGxhbi5ncHIoKSk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgU2V0U3RyaWN0SW50NTJDb25zdGFudDoKLSAgICAgICAgbV9qaXQu
bW92ZShJbW02NCh2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGUoKSkuYXNNYWNoaW5lSW50KCkp
LCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW02NChwbGFuLm5vZGUoKS0+YXNN
YWNoaW5lSW50KCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKICAgICBjYXNlIFNldEJvb2xlYW5Db25zdGFudDoKLSAgICAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIodmFsdWVPZkJvb2xlYW5Db25zdGFudChwbGFuLm5vZGUoKSkpLCBw
bGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIocGxhbi5ub2RlKCkt
PmFzQm9vbGVhbigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0
Q2VsbENvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodmFsdWVPZkpT
Q29uc3RhbnQocGxhbi5ub2RlKCkpLmFzQ2VsbCgpKSwgcGxhbi5ncHIoKSk7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbVB0cihwbGFuLm5vZGUoKS0+YXNDZWxsKCkpLCBwbGFuLmdwcigp
KTsKICAgICAgICAgYnJlYWs7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBjYXNlIFNldFRydXN0
ZWRKU0NvbnN0YW50OgpAQCAtNTIwLDcgKzUyMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNp
bGVudEZpbGwoY29uc3QgU2kKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZU9mSlNDb25zdGFudEFz
SW1tNjQocGxhbi5ub2RlKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTZXREb3VibGVDb25zdGFudDoKLSAgICAgICAgbV9qaXQubW92ZShJbW02NChyZWludGVycHJl
dERvdWJsZVRvSW50NjQodmFsdWVPZk51bWJlckNvbnN0YW50KHBsYW4ubm9kZSgpKSkpLCBjYW5U
cmFtcGxlKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW02NChyZWludGVycHJldERvdWJsZVRvSW50
NjQocGxhbi5ub2RlKCktPmFzTnVtYmVyKCkpKSwgY2FuVHJhbXBsZSk7CiAgICAgICAgIG1faml0
Lm1vdmU2NFRvRG91YmxlKGNhblRyYW1wbGUsIHBsYW4uZnByKCkpOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIExvYWQzMlBheWxvYWRCb3hJbnQ6CkBAIC01MzgsMTAgKzUzOCwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzaWxlbnRGaWxsKGNvbnN0IFNpCiAgICAgICAgIGJyZWFrOwogI2Vs
c2UKICAgICBjYXNlIFNldEpTQ29uc3RhbnRUYWc6Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIo
dmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkpLnRhZygpKSwgcGxhbi5ncHIoKSk7CisgICAg
ICAgIG1faml0Lm1vdmUoSW1tMzIocGxhbi5ub2RlKCktPmFzSlNWYWx1ZSgpLnRhZygpKSwgcGxh
bi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0SlNDb25zdGFudFBheWxvYWQ6
Ci0gICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWVPZkpTQ29uc3RhbnQocGxhbi5ub2RlKCkp
LnBheWxvYWQoKSksIHBsYW4uZ3ByKCkpOworICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHBsYW4u
bm9kZSgpLT5hc0pTVmFsdWUoKS5wYXlsb2FkKCkpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTZXRJbnQzMlRhZzoKICAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6SW50MzJUYWcpLCBwbGFuLmdwcigpKTsKQEAgLTg1NSwxMiArODU1LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZAogewogICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKLSAgICAgICAgCi0gICAgaWYgKGlzQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSkgewotICAgICAgICBKU1N0cmluZyogc3RyaW5nID0KLSAgICAgICAgICAg
IGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKTsKLSAgICAgICAgaWYgKHN0cmluZyAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1w
bCgpCi0gICAgICAgICAgICAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpLT5pc0F0b21pYygp
KSB7CisgICAgCisgICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBub2RlLT5jaGlsZDEoKS0+ZHlu
YW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsKKyAgICAgICAgaWYgKHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkg
ewogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0gbV9qaXQuY29kZUJs
b2NrKCktPmFkZFN0dWJJbmZvKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CkBAIC0xMjE4LDEzICsxMjE1LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJvb2wKICAgICAgICAgbm90VGFrZW4gPSB0bXA7CiAgICAg
fQogCi0gICAgaWYgKGlzQm9vbGVhbkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
LSAgICAgICAgYm9vbCBpbW0gPSB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0Jvb2xlYW5Db25zdGFudCgpKSB7
CisgICAgICAgIGJvb2wgaW1tID0gbm9kZS0+Y2hpbGQxKCktPmFzQm9vbGVhbigpOwogICAgICAg
ICBTcGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOwogICAg
ICAgICBicmFuY2gzMihjb25kaXRpb24sIEpJVENvbXBpbGVyOjpJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGltbSkpKSksIG9wMi5ncHIoKSwgdGFr
ZW4pOwotICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9k
ZSgpKSkgeworICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPmlzQm9vbGVhbkNvbnN0YW50
KCkpIHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKLSAgICAgICAgYm9vbCBpbW0gPSB2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGJvb2wgaW1tID0gbm9kZS0+Y2hpbGQyKCktPmFz
Qm9vbGVhbigpOwogICAgICAgICBicmFuY2gzMihjb25kaXRpb24sIG9wMS5ncHIoKSwgSklUQ29t
cGlsZXI6OkltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oaW1tKSkpKSwgdGFrZW4pOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xMjQ5LDEzICsxMjQ2LDEz
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludDMKICAgICAgICAgbm90
VGFrZW4gPSB0bXA7CiAgICAgfQogCi0gICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKSB7Ci0gICAgICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMyQ29uc3Rh
bnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzSW50
MzJDb25zdGFudCgpKSB7CisgICAgICAgIGludDMyX3QgaW1tID0gbm9kZS0+Y2hpbGQxKCktPmFz
SW50MzIoKTsKICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5j
aGlsZDIoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMy
KGltbSksIG9wMi5ncHIoKSwgdGFrZW4pOwotICAgIH0gZWxzZSBpZiAoaXNJbnQzMkNvbnN0YW50
KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxkMigp
LT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBpbnQzMl90IGltbSA9
IG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwg
b3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgdGFrZW4pOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OwpAQCAtMTQxNSwxMSArMTQxMiw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2sKICAgICAgICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmll
ZE5vZGU6OmZyb21Ob2RlKG1fY3VycmVudE5vZGUpKTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAg
ICAgICAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShtX2N1cnJlbnROb2RlLT53ZWFrQ29u
c3RhbnQoKSk7Ci0gICAgICAgICAgICAgICAgbV9taW5pZmllZEdyYXBoLT5hcHBlbmQoTWluaWZp
ZWROb2RlOjpmcm9tTm9kZShtX2N1cnJlbnROb2RlKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMDg4LDcgKzIwODAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91
YmxlUmVwKE5vCiB7CiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAg
ICBjYXNlIE51bWJlclVzZTogewotICAgICAgICBBU1NFUlQoIWlzTnVtYmVyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7IC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjb25zdGFudCBm
b2xkZWQuCisgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCktPmlzTnVtYmVyQ29uc3RhbnQo
KSk7IC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjb25zdGFudCBmb2xkZWQuCiAgICAgCiAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMs
IG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMjI4NSw3ICsy
Mjc3LDcgQEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6Omp1bXBGbwogICAgIGlm
IChKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IG1faml0LmdyYXBoKCkudHJ5R2V0Rm9sZGFibGVW
aWV3Rm9yQ2hpbGQxKG5vZGUpKSB7CiAgICAgICAgIHVpbnQzMl90IGxlbmd0aCA9IHZpZXctPmxl
bmd0aCgpOwogICAgICAgICBOb2RlKiBpbmRleE5vZGUgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5v
ZGUsIDEpLm5vZGUoKTsKLSAgICAgICAgaWYgKG1faml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50
KGluZGV4Tm9kZSkgJiYgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1faml0LmdyYXBoKCkudmFsdWVP
ZkludDMyQ29uc3RhbnQoaW5kZXhOb2RlKSkgPCBsZW5ndGgpCisgICAgICAgIGlmIChpbmRleE5v
ZGUtPmlzSW50MzJDb25zdGFudCgpICYmIGluZGV4Tm9kZS0+YXNVSW50MzIoKSA8IGxlbmd0aCkK
ICAgICAgICAgICAgIHJldHVybiBKSVRDb21waWxlcjo6SnVtcCgpOwogICAgICAgICByZXR1cm4g
bV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbTMyKGxlbmd0aCkpOwpAQCAtMjM4MSw3ICsy
MzczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IEludmFsaWRHUFJSZWc7CiAgICAgCiAgICAgaWYgKHZhbHVlVXNlLT5p
c0NvbnN0YW50KCkpIHsKLSAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3Rh
bnQodmFsdWVVc2Uubm9kZSgpKTsKKyAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVVc2Ut
PmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIDApOwogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CkBAIC0yNjY5LDggKzI2NjEs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAgY2FzZSBJ
bnQzMlVzZTogewogICAgICAgICBBU1NFUlQoIXNob3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUt
PmFyaXRoTW9kZSgpKSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVl
T2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgaW1t
MSA9IG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQz
Mk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CiAKQEAgLTI2ODQsOSArMjY3Niw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgIGludDMyX3QgaW1tMiA9IG5vZGUt
PmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJm
bG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewpAQCAtMjg2NSw5ICsyODU3LDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5vZAogICAgIGNhc2UgSW50MzJVc2U6IHsKICAg
ICAgICAgQVNTRVJUKCFzaG91bGRDaGVja05lZ2F0aXZlWmVybyhub2RlLT5hcml0aE1vZGUoKSkp
OwogICAgICAgICAKLSAgICAgICAgaWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPmlzTnVtYmVyQ29uc3RhbnQo
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gbm9k
ZS0+Y2hpbGQyKCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAKICAgICAgICAgICAgIGlmICghc2hvdWxkQ2hlY2tPdmVyZmxvdyhub2RlLT5hcml0
aE1vZGUoKSkpIHsKQEAgLTI4ODIsOCArMjg3NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVBcml0aFN1YihOb2QKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgIGlmIChpc051bWJlckNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNOdW1i
ZXJDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGltbTEgPSBub2RlLT5jaGlsZDEo
KS0+YXNJbnQzMigpOwogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwogICAgICAgICAgICAgICAgIApAQCAtMzMyMiw4ICszMzE0LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKE5vZAogICAgICAgICAvLyAoaW4gY2FzZSBvZiB8ZGl2aWRl
bmR8IDwgfGRpdmlzb3J8KSwgc28gd2Ugc3BlY3VsYXRlIGl0IGFzIHN0cmljdCBpbnQzMi4KICAg
ICAgICAgU3BlY3VsYXRlU3RyaWN0SW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIAotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSkpIHsKLSAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNv
bnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIo
KS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IG5v
ZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBpZiAoZGl2aXNvciA+IDEgJiYg
aGFzT25lQml0U2V0KGRpdmlzb3IpKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9nYXJp
dGhtID0gV1RGOjpmYXN0TG9nMihkaXZpc29yKTsKICAgICAgICAgICAgICAgICBHUFJSZWcgZGl2
aWRlbmRHUFIgPSBvcDEuZ3ByKCk7CkBAIC0zMzg0LDggKzMzNzYsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNb2QoTm9kCiAgICAgICAgIH0KICAgICAgICAgCiAjaWYgQ1BV
KFg4NikgfHwgQ1BVKFg4Nl82NCkKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5j
aGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBpbnQzMl90IGRpdmlzb3IgPSB2YWx1ZU9m
SW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICBpZiAobm9kZS0+
Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CisgICAgICAgICAgICBpbnQzMl90IGRpdmlz
b3IgPSBub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgaWYgKGRpdmlzb3Ig
JiYgZGl2aXNvciAhPSAtMSkgewogICAgICAgICAgICAgICAgIEdQUlJlZyBvcDFHcHIgPSBvcDEu
Z3ByKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTU2LDI5ICs1NTYsNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0tub3duTm90TnVtYmVyKE5vZGUqIG5vZGUpIHsgcmV0dXJuICEo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUpLm1fdHlwZSAmIFNwZWNGdWxsTnVtYmVyKTsgfQogICAgIGJv
b2wgaXNLbm93bk5vdENlbGwoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUo
bm9kZSkubV90eXBlICYgU3BlY0NlbGwpOyB9CiAgICAgCi0gICAgLy8gQ2hlY2tzL2FjY2Vzc29y
cyBmb3IgY29uc3RhbnQgdmFsdWVzLgotICAgIGJvb2wgaXNDb25zdGFudChOb2RlKiBub2RlKSB7
IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzQ29uc3RhbnQobm9kZSk7IH0KLSAgICBib29sIGlzSlND
b25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzSlNDb25zdGFudChu
b2RlKTsgfQotICAgIGJvb2wgaXNJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1f
aml0LmdyYXBoKCkuaXNJbnQzMkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc0RvdWJsZUNv
bnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNEb3VibGVDb25zdGFu
dChub2RlKTsgfQotICAgIGJvb2wgaXNOdW1iZXJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVy
biBtX2ppdC5ncmFwaCgpLmlzTnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBib29sIGlzQm9v
bGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNCb29sZWFu
Q29uc3RhbnQobm9kZSk7IH0KLSAgICBib29sIGlzRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2Rl
KSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLmlzRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQotICAg
IGludDMyX3QgdmFsdWVPZkludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQu
Z3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChub2RlKTsgfQotICAgIGRvdWJsZSB2YWx1ZU9m
TnVtYmVyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9m
TnVtYmVyQ29uc3RhbnQobm9kZSk7IH0KLSNpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIHZvaWQq
IGFkZHJlc3NPZkRvdWJsZUNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmFkZHJl
c3NPZkRvdWJsZUNvbnN0YW50KG5vZGUpOyB9Ci0jZW5kaWYKLSAgICBKU1ZhbHVlIHZhbHVlT2ZK
U0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkudmFsdWVPZkpTQ29u
c3RhbnQobm9kZSk7IH0KLSAgICBib29sIHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mQm9vbGVhbkNvbnN0YW50KG5vZGUpOyB9
Ci0gICAgSlNGdW5jdGlvbiogdmFsdWVPZkZ1bmN0aW9uQ29uc3RhbnQoTm9kZSogbm9kZSkgeyBy
ZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mRnVuY3Rpb25Db25zdGFudChub2RlKTsgfQotICAg
IGJvb2wgaXNOdWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIGlmICghaXND
b25zdGFudChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpLmlzTnVsbCgpOwotICAgIH0KLQogICAgIFN0cmluZ0lt
cGwqIGlkZW50aWZpZXJVSUQodW5zaWduZWQgaW5kZXgpCiAgICAgewogICAgICAgICByZXR1cm4g
bV9qaXQuZ3JhcGgoKS5pZGVudGlmaWVycygpW2luZGV4XTsKQEAgLTYxOSw5ICs1OTYsOSBAQCBw
dWJsaWM6CiAjZW5kaWYKIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgTWFjcm9Bc3NlbWJsZXI6
OkltbTY0IHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChOb2RlKiBub2RlKQorICAgIHN0YXRpYyBN
YWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpTQ29uc3RhbnRBc0ltbTY0KE5vZGUqIG5vZGUp
CiAgICAgewotICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVu
Y29kZSh2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShub2RlLT5hc0pTVmFsdWUoKSkpOwogICAgIH0K
ICNlbmRpZgogCkBAIC05NTcsNyArOTM0LDcgQEAgcHVibGljOgogICAgIH0KICAgICB2b2lkIGlu
aXRDb25zdGFudEluZm8oTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc0ludDMy
Q29uc3RhbnQobm9kZSkgfHwgaXNOdW1iZXJDb25zdGFudChub2RlKSB8fCBpc0pTQ29uc3RhbnQo
bm9kZSkpOworICAgICAgICBBU1NFUlQobm9kZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIGdl
bmVyYXRpb25JbmZvKG5vZGUpLmluaXRDb25zdGFudChub2RlLCBub2RlLT5yZWZDb3VudCgpKTsK
ICAgICB9CiAgICAgCkBAIC0xOTgzLDE3ICsxOTYwLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBk
dW1wKGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7CiAKLSAgICBib29sIGlzSW50ZWdlcihOb2RlKiBu
b2RlKQotICAgIHsKLSAgICAgICAgaWYgKG5vZGUtPmhhc0ludDMyUmVzdWx0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRpb25JbmZv
KG5vZGUpLmlzSlNJbnQzMigpOwotICAgIH0KLSAgICAKICAgICBib29sIGJldHRlclVzZVN0cmlj
dEludDUyKE5vZGUqIG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gIWdlbmVyYXRpb25JbmZv
KG5vZGUpLmlzSW50NTIoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTg4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBCaXRPcjoKICAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKIAotICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgb3AyID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9wMi5pc0ludDMyKCkgJiYgIW9wMi5hc0lu
dDMyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQx
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSAmJiAhbV9ub2Rl
LT5jaGlsZDIoKS0+YXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRp
dHlPdmVyQ2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIApAQCAtODksMzggKzg2LDI4IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgQml0TFNoaWZ0OgogICAgICAgICBjYXNlIEJpdFJTaGlmdDoKICAg
ICAgICAgY2FzZSBCaXRVUlNoaWZ0OgotICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCkt
PmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgb3AyID0gbV9ncmFwaC52
YWx1ZU9mSlNDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5vZGUoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9wMi5pc0ludDMyKCkgJiYgIShvcDIuYXNJbnQzMigpICYgMHgxZikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSAmJiAhKG1fbm9kZS0+Y2hpbGQyKCktPmFz
SW50MzIoKSAmIDB4MWYpKSB7CisgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVy
Q2hpbGQxKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgog
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gQml0VVJTaGlmdAotICAg
ICAgICAgICAgICAgICYmIG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMigpLT5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHNoaWZ0QW1vdW50ID0gbV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQy
KCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc2hpZnRBbW91bnQuaXNJbnQzMigpICYm
IChzaGlmdEFtb3VudC5hc0ludDMyKCkgJiAweDFmKSkgewotICAgICAgICAgICAgICAgICAgICBt
X25vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7Ci0gICAgICAgICAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAmJiBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+aXNJbnQzMkNv
bnN0YW50KCkKKyAgICAgICAgICAgICAgICAmJiAobV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCkt
PmFzSW50MzIoKSAmIDB4MWYpKSB7CisgICAgICAgICAgICAgICAgbV9ub2RlLT5jb252ZXJ0VG9J
ZGVudGl0eSgpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRp
dml0eSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobV9ncmFwaC5pc0ludDMyQ29u
c3RhbnQobV9ub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaW50MzJf
dCB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAg
ICAgIG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3ZlckNoaWxkMSgpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkgJiYgIW1fbm9kZS0+Y2hp
bGQyKCktPmFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIGNvbnZlcnRUb0lkZW50aXR5T3Zl
ckNoaWxkMSgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKQEAgLTEyOSw5ICsxMTYsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1YjoK
LSAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzSW50MzJDb25zdGFudChtX25vZGUtPmNoaWxkMigp
Lm5vZGUoKSkKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3Rh
bnQoKQogICAgICAgICAgICAgICAgICYmIG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNl
KSkgewotICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZJbnQz
MkNvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpbnQz
Ml90IHZhbHVlID0gbV9ub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpOwogICAgICAgICAgICAgICAg
IGlmICgtdmFsdWUgIT0gdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRP
cChBcml0aEFkZCk7CiAgICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkuc2V0Tm9k
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwzNCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZSgpKQogICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEhbm9kZS0+c3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNGdW5jdGlvbigpKQor
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUtPmZ1bmN0aW9uKCktPnZh
bHVlKCkuaXNGdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIE1ha2VSb3BlOgorICAg
ICAgICAgICAgICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgICAgICAgICAgY2FzZSBBcml0aEFk
ZDoKKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoU3ViOgorICAgICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNdWw6CisgICAgICAgICAgICAgICAgY2FzZSBBcml0aElNdWw6CisgICAgICAgICAgICAg
ICAgY2FzZSBBcml0aERpdjoKKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgorICAgICAg
ICAgICAgICAgIGNhc2UgQXJpdGhNaW46CisgICAgICAgICAgICAgICAgY2FzZSBBcml0aE1heDoK
KyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAgICAgICAgIGNhc2Ug
Q29tcGFyZUxlc3NFcToKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKKyAgICAgICAgICAgICAgICBjYXNl
IENvbXBhcmVFcToKKyAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICEhbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTgxLDIwICs4MSwxMyBAQCBzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyB7CiAKIH0g
Ly8gbmFtZXNwYWNlCiAKLWJvb2wgVmFyaWFibGVFdmVudFN0cmVhbTo6dHJ5VG9TZXRDb25zdGFu
dFJlY292ZXJ5KFZhbHVlUmVjb3ZlcnkmIHJlY292ZXJ5LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
TWluaWZpZWROb2RlKiBub2RlKSBjb25zdAorYm9vbCBWYXJpYWJsZUV2ZW50U3RyZWFtOjp0cnlU
b1NldENvbnN0YW50UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnksIE1pbmlmaWVkTm9k
ZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnROdW1iZXIoKSkgewotICAgICAgICByZWNv
dmVyeSA9IFZhbHVlUmVjb3Zlcnk6OmNvbnN0YW50KAotICAgICAgICAgICAgY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKAotICAgICAgICAgICAgICAgIEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ICsgbm9kZS0+Y29uc3RhbnROdW1iZXIoKSkuZ2V0KCkpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG5vZGUtPmhhc1dlYWtDb25zdGFudCgpKSB7Ci0gICAg
ICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobm9kZS0+d2Vha0NvbnN0YW50
KCkpOworICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIHJlY292ZXJ5ID0g
VmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobm9kZS0+Y29uc3RhbnQoKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICAgICAKQEAgLTE4Nyw3ICsxODAsNyBAQCB2b2lkIFZhcmlhYmxlRXZl
bnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAKICAgICAgICAgQVNTRVJUKHNvdXJjZS5r
aW5kKCkgPT0gSGF2ZU5vZGUpOwogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5h
dChzb3VyY2UuaWQoKSk7Ci0gICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFs
dWVSZWNvdmVyaWVzW2ldLCBjb2RlQmxvY2ssIG5vZGUpKQorICAgICAgICBpZiAodHJ5VG9TZXRD
b25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgbm9kZSkpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgCiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9
IGdlbmVyYXRpb25JbmZvcy5nZXQoc291cmNlLmlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDE2
OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWdu
ZWQgaW5kZXgsIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0g
ICAgYm9vbCB0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSYsIENvZGVCbG9j
ayosIE1pbmlmaWVkTm9kZSopIGNvbnN0OworICAgIGJvb2wgdHJ5VG9TZXRDb25zdGFudFJlY292
ZXJ5KFZhbHVlUmVjb3ZlcnkmLCBNaW5pZmllZE5vZGUqKSBjb25zdDsKICAgICAKICAgICB2b2lk
IGxvZ0V2ZW50KGNvbnN0IFZhcmlhYmxlRXZlbnQmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDkgQEAgcHVibGljOgogICAgICAgICB0cnlXYXRjaChtX2dyYXBo
Lm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsgCiAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgu
bV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAKKyAgICAgICAgZm9y
IChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2dyYXBoLm1fZnJvemVuVmFsdWVzKQorICAgICAgICAg
ICAgdHJ5V2F0Y2godmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCiAgICAgICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0t
OykgewogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKQEAgLTU5LDE3ICs2Miw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAg
ICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgICAgICAgICAgICAgY2FzZSBXZWFrSlND
b25zdGFudDoKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC52YWx1ZU9mSlND
b25zdGFudChub2RlKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKLSAgICAgICAgICAgICAg
ICAgICAgdHJ5V2F0Y2gobm9kZS0+ZnVuY3Rpb24oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRh
YmxlOgotICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCkpOwor
ICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCktPnN0cnVjdHVy
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKQEAgLTkzLDcgKzg3LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZnJlZXplKHZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hh
aW4gYmVjYXVzZSB0aGF0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJl
ZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2gg
dGhlCkBAIC0xMzksMjIgKzEzMywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgCisgICAgICAgIG1fZ3JhcGgubV9zdHJ1Y3R1cmVXYXRjaHBvaW50U3RhdGUg
PSBXYXRjaGluZ0FsbFdhdGNoYWJsZVN0cnVjdHVyZXM7CisgICAgICAgIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB0cnlXYXRjaChKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgdHJ5
V2F0Y2godmFsdWUuYXNDZWxsKCkpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRyeVdhdGNoKEpT
Q2VsbCogY2VsbCkKLSAgICB7Ci0gICAgICAgIGlmIChjZWxsKQotICAgICAgICAgICAgdHJ5V2F0
Y2goY2VsbC0+c3RydWN0dXJlKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHRyeVdhdGNoKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c2V0LnNpemUoKTsgaS0tOykKQEAgLTE2Myw3ICsxNDcsOCBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgdHJ5V2F0Y2goU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtX2dy
YXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVj
dHVyZSkKKyAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1
cmUpOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5
NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFsbG9jYXRpb25Q
cm9maWxlV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlv
bio+KG1fbm9kZS0+ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgp
KTsKKyAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+ZnVu
Y3Rpb24oKS0+dmFsdWUoKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRj
aHBvaW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw2IEBAIGlubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICAKICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKICAgICBjYXNlIEpTQ29uc3RhbnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFu
dDoKICAgICBjYXNlIEdldE15QXJndW1lbnRzTGVuZ3RoOgogICAgIGNhc2UgR2V0TG9jYWw6CiAg
ICAgY2FzZSBTZXRMb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGlu
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5rLmNw
cAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMaW5r
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCB2b2lkIGxpbmsoU3RhdGUmIHN0
YXRlKQogICAgIGlmICghZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXMtPmlzRW1wdHkoKSkK
ICAgICAgICAgc3RhdGUuaml0Q29kZS0+Y29tbW9uLmlubGluZUNhbGxGcmFtZXMgPSBncmFwaC5t
X3BsYW4uaW5saW5lQ2FsbEZyYW1lczsKICAgICAKKyAgICBncmFwaC5yZWdpc3RlckZyb3plblZh
bHVlcygpOworCiAgICAgLy8gQ3JlYXRlIHRoZSBlbnRyeXBvaW50LiBOb3RlIHRoYXQgd2UgdXNl
IHRoaXMgZW50cnlwb2ludCB0b3RhbGx5IGRpZmZlcmVudGx5CiAgICAgLy8gZGVwZW5kaW5nIG9u
IHdoZXRoZXIgd2UncmUgZG9pbmcgT1NSIGVudHJ5IG9yIG5vdC4KICAgICBDQ2FsbEhlbHBlcnMg
aml0KCZ2bSwgY29kZUJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjk1ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzI3LDkgKzMyNyw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAg
ICAgICAgICAgIGNvbXBpbGVJbnQ1MkNvbnN0YW50KCk7CiAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgIGNvbXBpbGVXZWFrSlNDb25z
dGFudCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czoKICAgICAgICAgICAgIGNvbXBpbGVQaGFudG9tQXJndW1lbnRzKCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTczOSwyMiArNzM2LDE3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21w
aWxlRG91YmxlQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgc2V0RG91YmxlKG1fb3V0LmNvbnN0
RG91YmxlKG1fZ3JhcGgudmFsdWVPZk51bWJlckNvbnN0YW50KG1fbm9kZSkpKTsKKyAgICAgICAg
c2V0RG91YmxlKG1fb3V0LmNvbnN0RG91YmxlKG1fbm9kZS0+YXNOdW1iZXIoKSkpOwogICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbXBpbGVJbnQ1MkNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIGlu
dDY0X3QgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZSkuYXNNYWNoaW5l
SW50KCk7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBtX25vZGUtPmFzTWFjaGluZUludCgpOwog
ICAgICAgICAKICAgICAgICAgc2V0SW50NTIobV9vdXQuY29uc3RJbnQ2NCh2YWx1ZSA8PCBKU1Zh
bHVlOjppbnQ1MlNoaWZ0QW1vdW50KSk7CiAgICAgICAgIHNldFN0cmljdEludDUyKG1fb3V0LmNv
bnN0SW50NjQodmFsdWUpKTsKICAgICB9CiAKLSAgICB2b2lkIGNvbXBpbGVXZWFrSlNDb25zdGFu
dCgpCi0gICAgewotICAgICAgICBzZXRKU1ZhbHVlKHdlYWtQb2ludGVyKG1fbm9kZS0+d2Vha0Nv
bnN0YW50KCkpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBjb21waWxlUGhhbnRvbUFyZ3VtZW50
cygpCiAgICAgewogICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6
ZW5jb2RlKEpTVmFsdWUoKSkpKTsKQEAgLTE2MDcsOCArMTU5OSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAg
ICAgICAgIEV4aXRLaW5kIGV4aXRLaW5kOwotICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS0+
b3AoKSA9PSBXZWFrSlNDb25zdGFudCkKLSAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkV2Vha0Nv
bnN0YW50Q2FjaGU7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgp
KQorICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDb25zdGFudENhY2hlOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBleGl0S2luZCA9IEJhZENhY2hlOwogICAgICAgICAKQEAgLTE2NDYsNyAr
MTYzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCiAgICAgICAg
ICAgICBCYWRGdW5jdGlvbiwganNWYWx1ZVZhbHVlKGNlbGwpLCBtX25vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwKLSAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGwsIHdlYWtQb2ludGVyKG1fbm9k
ZS0+ZnVuY3Rpb24oKSkpKTsKKyAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKGNlbGwsIHdlYWtQ
b2ludGVyKG1fbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKS5hc0NlbGwoKSkpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tFeGVjdXRhYmxlKCkKQEAgLTM0MjcsNyArMzQxOSw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUVxQ29uc3RhbnQoKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9ub2RlLT5j
aGlsZDIoKS5ub2RlKCkpLmlzTnVsbCgpKTsKKyAgICAgICAgQVNTRVJUKG1fbm9kZS0+Y2hpbGQy
KCktPmFzSlNWYWx1ZSgpLmlzTnVsbCgpKTsKICAgICAgICAgc2V0Qm9vbGVhbigKICAgICAgICAg
ICAgIGVxdWFsTnVsbE9yVW5kZWZpbmVkKAogICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQx
KCksIEFsbENlbGxzQXJlRmFsc2UsIEVxdWFsTnVsbE9yVW5kZWZpbmVkKSk7CkBAIC0zNTIwLDcg
KzM1MTIsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RF
cUNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnZh
bHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKKyAgICAgICAgSlNWYWx1
ZSBjb25zdGFudCA9IG1fbm9kZS0+Y2hpbGQyKCktPmFzSlNWYWx1ZSgpOwogCiAgICAgICAgIHNl
dEJvb2xlYW4oCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKQEAgLTQ3NjksNyArNDc2MSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24gfHwgKGVkZ2UudXNlS2luZCgpID09IEludDMyVXNlIHx8IGVkZ2UudXNl
S2luZCgpID09IEtub3duSW50MzJVc2UpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5o
YXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1
ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
ZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlLmlzSW50MzIoKSkgewog
ICAgICAgICAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIG1fb3V0LmludDMyWmVybzsKQEAgLTQ4ODMsNyArNDg3NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRp
b24gfHwgREZHOjppc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIGlmICghdmFsdWUu
aXNDZWxsKCkpIHsKICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnRQdHJaZXJvOwpAQCAtNDk0Niw3ICs0OTM4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1Zh
bHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgdGVybWluYXRlKFVuY291
bnRhYmxlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwpAQCAt
NDk5Miw4ICs0OTg0LDggQEAgcHJpdmF0ZToKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIGVkZ2UudXNlS2luZCgpICE9IEludDUyUmVwVXNlKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChlZGdlLT5oYXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2Rl
KCkpKSk7Ci0gICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKGVkZ2UtPmFzSlNWYWx1ZSgpKSk7CisKICAgICAgICAgTG93ZXJlZE5vZGVW
YWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwogICAgICAgICBp
ZiAoaXNWYWxpZCh2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKQEAg
LTU4OTgsOCArNTg5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAg
ICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgogICAgICAgICBjYXNlIERvdWJsZUNvbnN0YW50Ogot
ICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
bmRleF0gPSBFeGl0VmFsdWU6OmNvbnN0YW50KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSkpOworICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmNvbnN0
YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4
XSA9IEV4aXRWYWx1ZTo6YXJndW1lbnRzT2JqZWN0VGhhdFdhc05vdENyZWF0ZWQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgdm9p
ZCBjb21waWxlU3R1YigKICAgICAgICAgCiAgICAgICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9m
aWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NSRXhpdCgKICAgICAgICAgICAgIGV4aXRJRCwg
UHJvZmlsZXI6Ok9yaWdpblN0YWNrKGRhdGFiYXNlLCBjb2RlQmxvY2ssIGV4aXQubV9jb2RlT3Jp
Z2luKSwKLSAgICAgICAgICAgIGV4aXQubV9raW5kLCBpc1dhdGNocG9pbnQoZXhpdC5tX2tpbmQp
KTsKKyAgICAgICAgICAgIGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUlu
dmFsaWRhdGlvbik7CiAgICAgICAgIGppdC5hZGQ2NChDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgQ0NhbGxIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MocHJvZmlsZXJFeGl0LT5jb3VudGVy
QWRkcmVzcygpKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTY5NTg4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw2ICsx
OTEsMTMgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogCiB2b2lk
IEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNv
bnRleHQpIGNvbnN0CiB7CisgICAgZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0dXJlKAorICAg
ICAgICBvdXQsIGNvbnRleHQsICghISp0aGlzICYmIGlzQ2VsbCgpKSA/IGFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKSA6IG51bGxwdHIpOworfQorCit2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHRBc3N1
bWluZ1N0cnVjdHVyZSgKKyAgICBQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4
dCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CiAgICAgaWYgKCEqdGhpcykKICAgICAg
ICAgb3V0LnByaW50KCI8SlNWYWx1ZSgpPiIpOwogICAgIGVsc2UgaWYgKGlzSW50MzIoKSkKQEAg
LTIwNyw3ICsyMTQsNyBAQCB2b2lkIEpTVmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0m
CiAgICAgICAgIG91dC5wcmludGYoIkRvdWJsZTogJTA4eDolMDh4LCAlbGYiLCB1LmFzVHdvSW50
MzJzWzFdLCB1LmFzVHdvSW50MzJzWzBdLCBhc0RvdWJsZSgpKTsKICNlbmRpZgogICAgIH0gZWxz
ZSBpZiAoaXNDZWxsKCkpIHsKLSAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cyhKU1N0cmlu
Zzo6aW5mbygpKSkgeworICAgICAgICBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJD
bGFzc09mKEpTU3RyaW5nOjppbmZvKCkpKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5n
ID0ganNDYXN0PEpTU3RyaW5nKj4oYXNDZWxsKCkpOwogICAgICAgICAgICAgb3V0LnByaW50KCJT
dHJpbmciKTsKICAgICAgICAgICAgIGlmIChzdHJpbmctPmlzUm9wZSgpKQpAQCAtMjIzLDExICsy
MzAsMTEgQEAgdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJgogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQpIik7
CiAgICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1wbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAo
YXNDZWxsKCktPmluaGVyaXRzKFN0cnVjdHVyZTo6aW5mbygpKSkKKyAgICAgICAgfSBlbHNlIGlm
IChzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoU3RydWN0dXJlOjppbmZvKCkp
KQogICAgICAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmU6ICIsIGluQ29udGV4dCgqanNDYXN0
PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKSwgY29udGV4dCkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIG91dC5wcmludCgiQ2VsbDogIiwgUmF3UG9pbnRlcihhc0NlbGwoKSkpOwotICAgICAg
ICAgICAgb3V0LnByaW50KCIgKCIsIGluQ29udGV4dCgqYXNDZWxsKCktPnN0cnVjdHVyZSgpLCBj
b250ZXh0KSwgIikiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBpbkNvbnRleHQoKnN0
cnVjdHVyZSwgY29udGV4dCksICIpIik7CiAgICAgICAgIH0KICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgICAgICBvdXQucHJpbnQoIiwgSUQ6ICIsIGFzQ2VsbCgpLT5zdHJ1Y3R1cmVJRCgpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9u
IDE2OTU4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBKU1N0cmluZzsKIGNsYXNzIFBy
b3BlcnR5TmFtZTsKIGNsYXNzIFByb3BlcnR5U2xvdDsKIGNsYXNzIFB1dFByb3BlcnR5U2xvdDsK
K2NsYXNzIFN0cnVjdHVyZTsKICNpZiBFTkFCTEUoREZHX0pJVCkKIG5hbWVzcGFjZSBERkcgewog
Y2xhc3MgSklUQ29tcGlsZXI7CkBAIC0yNzcsNiArMjc4LDcgQEAgcHVibGljOgogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBk
dW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lk
IGR1bXBJbkNvbnRleHRBc3N1bWluZ1N0cnVjdHVyZShQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KiwgU3RydWN0dXJlKikgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCog
c3ludGhlc2l6ZVByb3RvdHlwZShFeGVjU3RhdGUqKSBjb25zdDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232798</attachid>
            <date>2014-06-10 11:31:48 -0700</date>
            <delta_ts>2014-06-10 13:45:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>199990</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NzUyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwNyBA
QAorMjAxNC0wNi0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIERGRyBzaG91bGQgdXNlIGl0cyBvd24gbm90aW9uIG9mIEpTVmFsdWUsIHdoaWNo
IHdlIHNob3VsZCBjYWxsIEZyb3plblZhbHVlLCB0aGF0IHdpbGwgY2FycnkgYXJvdW5kIGEgY29w
eSBvZiBpdHMgc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzM0MjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBpbXBldHVzIGZvciB0aGlzIHdhcyB0byBwcm92aWRlIHNv
bWUgc2Vuc2UgYW5kIHJlYXNvbiB0byByYWNlIGNvbmRpdGlvbnMgYXJpc2luZyBmcm9tCisgICAg
ICAgIGNlbGwgY29uc3RhbnRzIGhhdmluZyB0aGVpciBzdHJ1Y3R1cmUgY2hhbmdlZCBvbiB0aGUg
bWFpbiB0aHJlYWQgLSB0aGlzIGlzIGhhcm1lc3MgYmVjYXVzZQorICAgICAgICB3ZSBkZWZlbmQg
YWdhaW5zdCBpdCwgYnV0IHdoZW4gaXQgZ29lcyB3cm9uZywgaXQgY2FuIGJlIGRpZmZpY3VsdCB0
byByZXByb2R1Y2UgYmVjYXVzZSBpdAorICAgICAgICByZXF1aXJlcyBhIHJhY2UuIEdpdmluZyB0
aGUgREZHIHRoZSBhYmlsaXR5IHRvICJmcmVlemUiIGEgY2VsbCdzIHN0cnVjdHVyZSBmaXhlcyB0
aGlzLgorICAgICAgICAKKyAgICAgICAgQnV0IHRoaXMgcGF0Y2ggZ29lcyBxdWl0ZSBhIGJpdCBm
dXJ0aGVyLCBhbmQgY29tcGxldGVseSByYXRpb25hbGl6ZXMgaG93IHRoZSBERkcgcmVhc29ucwor
ICAgICAgICBhYm91dCBjb25zdGFudHMuIEl0IG5vIGxvbmdlciByZWxpZXMgb24gdGhlIENvZGVC
bG9jayBjb25zdGFudCBwb29sIGF0IGFsbCwgd2hpY2ggYWxsb3dzCisgICAgICAgIGZvciBhIG1v
cmUgb2JqZWN0LW9yaWVudGVkIGFwcHJvYWNoOiBmb3IgZXhhbXBsZSBhIE5vZGUgdGhhdCBoYXMg
YSBjb25zdGFudCBjYW4gdGVsbCB5b3UKKyAgICAgICAgd2hhdCBjb25zdGFudCBpdCBoYXMgd2l0
aG91dCBuZWVkaW5nIGEgQ29kZUJsb2NrLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtp
bmQuY3BwOgorICAgICAgICAoSlNDOjpleGl0S2luZFRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
ZXhpdEtpbmRJc0NvdW50YWJsZSk6CisgICAgICAgICogYnl0ZWNvZGUvRXhpdEtpbmQuaDoKKyAg
ICAgICAgKEpTQzo6aXNXYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9H
ZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6aGFzRXhpdFNp
dGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlND
OjpQdXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpm
aWx0ZXJCeVZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyOjpz
ZXRCdWlsdEluQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI6OnNldENvbnN0YW50KToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpmaWx0ZXJCeVZhbHVlKToKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6c2V0T1NSRW50cnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1
ZTo6c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgICogZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkFyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJhY2t3YXJk
c1Byb3BhZ2F0aW9uUGhhc2U6OmlzTm90TmVnWmVybyk6CisgICAgICAgIChKU0M6OkRGRzo6QmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6aXNOb3RQb3NaZXJvKToKKyAgICAgICAgKEpTQzo6REZH
OjpCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlOjppc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZTo6aXNXaXRo
aW5Qb3dlck9mVHdvKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpCeXRlQ29kZVBhcnNlcik6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldERpcmVjdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9j
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmpzQ29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjp3ZWFrSlNDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OnJlbWFw
T3BlcmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjplbWl0RnVuY3Rpb25DaGVja3Mp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwcmVwYXJlVG9QYXJzZUJsb2NrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChK
U0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1hcHNJZk5lY2Vzc2FyeSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGlu
ZVN0YWNrRW50cnkpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNv
ZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0SlNDb25z
dGFudEZvclZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0SlNDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmlzSlNDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmlzSW50MzJDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnZhbHVlT2ZKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6dmFsdWVPZkludDMyQ29uc3RhbnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjb25zdGFudFVuZGVmaW5lZCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNvbnN0YW50TnVsbCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om9uZSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmNvbnN0YW50TmFOKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Y2VsbENvbnN0YW50KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aW5mZXJyZWRDb25z
dGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OkNvbnN0
YW50UmVjb3JkOjpDb25zdGFudFJlY29yZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGR1NpbXBsaWZp
Y2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Y29uc3RhbnRDU0UpOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6
OndlYWtDb25zdGFudENTRSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHQ29t
bW9uLmg6CisgICAgICAgICogZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6Zm9sZENvbnN0YW50cyk6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25DaGVjayk6CisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpG
aXh1cFBoYXNlOjpmaXh1cE1ha2VSb3BlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
Ojp0cnVuY2F0ZUNvbnN0YW50VG9JbnQzMik6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFz
ZTo6YXR0ZW1wdFRvTWFrZUdldFR5cGVkQXJyYXlCeXRlTGVuZ3RoKToKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjppbmplY3RUeXBlQ29udmVyc2lvbnNGb3JFZGdlKToKKyAgICAgICAg
KiBkZmcvREZHRnJvemVuVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpGcm96
ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24pOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVl
OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR0Zyb3plblZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpE
Rkc6OkZyb3plblZhbHVlOjpGcm96ZW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVu
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkRGRzo6RnJvemVuVmFsdWU6OnZhbHVl
KToKKyAgICAgICAgKEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6c3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6REZHOjpGcm96ZW5WYWx1ZTo6c3RyZW5ndGhlblRvKToKKyAgICAgICAgKEpTQzo6REZH
OjpGcm96ZW5WYWx1ZTo6c3RyZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OkZyb3plblZhbHVl
OjpmcmVlemUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OkdyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjp0cnlHZXRGb2xkYWJsZVZpZXcpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpyZWdpc3RlckZyb3plblZhbHVlcyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpmcmVlemVGcmFnaWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZnJlZXplKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZnJlZXplU3Ryb25nKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y29udmVydFRvQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9TdHJvbmdDb25zdGFu
dCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFzc2VydElzV2F0Y2hlZCk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZEltbWVkaWF0
ZVNob3VsZFNwZWN1bGF0ZUludDMyKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y29udmVy
dFRvQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb25zdGFu
dFJlZ2lzdGVyRm9yQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpnZXRKU0NvbnN0YW50U3BlY3VsYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjppc0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
aXNKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNJbnQz
MkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNEb3VibGVD
b25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzTnVtYmVyQ29u
c3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjppc0Jvb2xlYW5Db25z
dGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmlzQ2VsbENvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNGdW5jdGlvbkNvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNJbnRlcm5hbEZ1bmN0aW9u
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2YWx1ZU9mSlND
b25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZJbnQz
MkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZk51
bWJlckNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVP
ZkJvb2xlYW5Db25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZh
bHVlT2ZGdW5jdGlvbkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6bXVsSW1tZWRpYXRlU2hvdWxkU3BlY3VsYXRlSW50MzIpOiBEZWxldGVkLgorICAgICAgICAq
IGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SW5Q
bGFjZUFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdJbnNlcnRp
b25TZXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6Omluc2VydENvbnN0YW50
KToKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6Omluc2VydENvbnN0YW50Rm9yVXNl
KToKKyAgICAgICAgKiBkZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkludGVnZXJDaGVja0NvbWJpbmluZ1BoYXNlOjpyYW5nZUtleUFuZEFk
ZGVuZCk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0xhenlKU1ZhbHVlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUpOgorICAgICAgICAo
SlNDOjpERkc6OkxhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
TGF6eUpTVmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGRmZy9ERkdMYXp5SlNWYWx1
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpMYXp5SlNWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6
REZHOjpMYXp5SlNWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVl
Ojpzd2l0Y2hMb29rdXBWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR01pbmlmaWVkTm9kZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6TWluaWZpZWROb2RlOjpmcm9tTm9kZSk6CisgICAgICAgICog
ZGZnL0RGR01pbmlmaWVkTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmJlbG9uZ3NJbk1pbmlm
aWVkR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnQpOgorICAgICAgICAo
SlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzQ29uc3RhbnROdW1iZXIpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6Y29uc3RhbnROdW1iZXIpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpERkc6Ok1pbmlmaWVkTm9kZTo6aGFzV2Vha0NvbnN0YW50KTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpNaW5pZmllZE5vZGU6OndlYWtDb25zdGFudCk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjphc0pTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzSW50MzJDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6YXNVSW50MzIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRG91Ymxl
Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzTnVtYmVyQ29uc3RhbnQpOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmFzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjppc01hY2hpbmVJbnRDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNN
YWNoaW5lSW50KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjppc0Jvb2xlYW5Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNCb29sZWFuKToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjppc0NlbGxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6YXNDZWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpkeW5hbWljQ2FzdENvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpmdW5jdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6
aXNXZWFrQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnN0
YW50TnVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9X
ZWFrQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndlYWtDb25z
dGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3Rh
bnQpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzaWxl
bnRTYXZlUGxhbkZvckdQUik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNp
bGVudFNhdmVQbGFuRm9yRlBSKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
c2lsZW50RmlsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJv
b2xlYW5CcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVJbnQzMkJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDdXJyZW50QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlRG91YmxlUmVwKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
anVtcEZvclR5cGVkQXJyYXlPdXRPZkJvdW5kcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTW9kKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkpTQ29u
c3RhbnRBc0ltbTY0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aW5pdENv
bnN0YW50SW5mbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmlzQ29uc3Rh
bnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0pTQ29u
c3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0lu
dDMyQ29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojppc0RvdWJsZUNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6aXNOdW1iZXJDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmlzQm9vbGVhbkNvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNGdW5jdGlvbkNvbnN0YW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkludDMyQ29uc3RhbnQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp2YWx1ZU9mTnVtYmVy
Q29uc3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjph
ZGRyZXNzT2ZEb3VibGVDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlT2ZKU0NvbnN0YW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6dmFsdWVPZkJvb2xlYW5Db25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6aXNOdWxsQ29u
c3RhbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjppc0lu
dGVnZXIpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MzJJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpmaWxsSlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzMkludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDUyKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFz
ZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVN0
cmVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGRmZy9ERkdWYWx1ZVN0cmVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6Om1l
cmdlKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6dHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCk6
CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaDoKKyAgICAgICAgKiBkZmcv
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6
REZHOjpXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlOjp0cnlXYXRjaCk6CisgICAgICAg
ICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTExpbmsuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmxpbmspOgorICAgICAg
ICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZURvdWJsZUNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludDUyQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlQ2hlY2tGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlRXFDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpsb3dKU1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dHJ5VG9T
ZXRDb25zdGFudEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVXZWFrSlNDb25zdGFudCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZVN0dWIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmR1
bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkdW1wSW5Db250ZXh0QXNzdW1p
bmdTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5oOgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGZnU2hvdWxk
V2F0Y2hJZlBvc3NpYmxlKToKKwogMjAxNC0wNi0wNCAgTWF0dGhldyBNaXJtYW4gIDxtbWlybWFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRlZCBzeXN0ZW0gZm9yIGlubGluaW5nIG5hdGl2ZSBm
dW5jdGlvbnMgdmlhIHRoZSBGVEwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE0Niw2ICsxNDYsNyBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGRmZy9ERkdGaXh1cFBoYXNlLmNwcAogICAgIGRmZy9ERkdGbHVzaEZv
cm1hdC5jcHAKICAgICBkZmcvREZHRmx1c2hlZEF0LmNwcAorICAgIGRmZy9ERkdGcm96ZW5WYWx1
ZS5jcHAKICAgICBkZmcvREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiAgICAgZGZnL0RGR0dyYXBo
LmNwcAogICAgIGRmZy9ERkdHcmFwaFNhZmVwb2ludC5jcHAKQEAgLTIwMiw2ICsyMDMsNyBAQCBz
ZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdVc2VLaW5kLmNwcAogICAgIGRm
Zy9ERkdWYWxpZGF0ZS5jcHAKICAgICBkZmcvREZHVmFsdWVTb3VyY2UuY3BwCisgICAgZGZnL0RG
R1ZhbHVlU3RyZW5ndGguY3BwCiAgICAgZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAKICAg
ICBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5jcHAKICAgICBkZmcvREZHVmFyaWFibGVF
dmVudC5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2
aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzk3LDYgKzM5
Nyw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRml4dXBQaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRmx1c2hlZEF0LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGbHVzaEZvcm1hdC5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHRnJvemVuVmFsdWUuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdHcmFwaC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHR3JhcGhTYWZlcG9pbnQuY3BwIiAvPgpAQCAtNDU1
LDYgKzQ1Niw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFsaWRhdGUuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhbHVlU291cmNlLmNwcCIgLz4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYWx1ZVN0cmVuZ3RoLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhYmxl
RXZlbnQuY3BwIiAvPgpAQCAtOTYxLDYgKzk2Myw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxkZmdcREZHRmx1c2hlZEF0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHRmx1c2hGb3JtYXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdGUFJJbmZvLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHRnJvemVu
VmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdGdW5jdGlvbldo
aXRlbGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0dlbmVyYXRp
b25JbmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHR1BSSW5mby5o
IiAvPgpAQCAtMTAzNiw2ICsxMDM5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdWYWxpZGF0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
bHVlUmVjb3ZlcnlPdmVycmlkZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1ZhbHVlU291cmNlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
VmFsdWVTdHJlbmd0aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERG
R1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdWYXJpYWJsZUV2ZW50LmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYg
Kzc0LDggQEAKIC8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwRjAxMjMzMjE5NDRFQTFCMDA4NDNBMEMgLyog
REZHVmFsdWVTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjAxMjMzMDE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5j
cHAgKi87IH07CisJCTBGMDEyMzMzMTk0NEVBMUIwMDg0M0EwQyAvKiBERkdWYWx1ZVN0cmVuZ3Ro
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAxMjMz
MTE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5
QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjAzMzJCRjE4QURGQUUxMDA1Rjk3OUEgLyogRXhpdGluZ0pJVFR5cGUu
Y3BwICovOyB9OwogCQkwRjAzMzJDMzE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwMzMy
QzExOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmNwcCAqLzsgfTsKIAkJMEYwMzMy
QzQxOEIwMTc2MzAwNUY5NzlBIC8qIEdldEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyog
R2V0QnlJZFZhcmlhbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMzE2LDYgKzMxOCw4IEBACiAJCTBGNjY2RUNEMTgzNkIzN0UwMEQwMTdGMSAv
KiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjY2RUNCMTgzNkIzN0UwMEQwMTdGMSAvKiBE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyog
REZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2NkUxNjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjY2RTE2
QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2NkUxNjkxNERGM0YxMzAwQjdCMkU0IC8qIERGR0VkZ2Uu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjY5
Q0M4ODE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2OUNDODYxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmNwcCAqLzsgfTsKKwkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlF
IC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjY5Q0M4NzE5M0FDNjBBMDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCMUNC
NTE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0IzMTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExK
U0NhbGwuY3BwICovOyB9OwogCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxs
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNC
NDE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQjkxODYxMjQ0QzAwODQ1RDk3IC8qIEFy
aXR5Q2hlY2tNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjZCMUNCNzE4NjEyNDRDMDA4NDVEOTcgLyogQXJpdHlDaGVja01vZGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjIzNSw2ICsyMjM5
LDggQEAKIC8qIEVuZCBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVn
aW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTBGMDEyMzMwMTk0NEVBMUIwMDg0M0Ew
QyAvKiBERkdWYWx1ZVN0cmVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR1ZhbHVlU3RyZW5ndGguY3BwOyBwYXRoID0gZGZnL0RGR1ZhbHVlU3RyZW5ndGgu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjAxMjMzMTE5NDRFQTFCMDA4NDNB
MEMgLyogREZHVmFsdWVTdHJlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdWYWx1ZVN0cmVuZ3RoLmg7IHBhdGggPSBkZmcvREZHVmFsdWVTdHJlbmd0aC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAzMzJCRjE4QURGQUUxMDA1Rjk3OUEgLyogRXhp
dGluZ0pJVFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXhp
dGluZ0pJVFR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjAzMzJDMTE4
QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR2V0QnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjAzMzJDMjE4QjAxNzYzMDA1Rjk3OUEgLyogR2V0QnlJZFZhcmlhbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0QnlJZFZhcmlhbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NzcsNiArMjQ4Myw4IEBACiAJCTBGNjY2RUNCMTgz
NkIzN0UwMEQwMTdGMSAvKiBERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlv
blBoYXNlLmg7IHBhdGggPSBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY4MTRERjNGMTMwMEI3QjJFNCAv
KiBERkdBZGphY2VuY3lMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0FkamFjZW5jeUxpc3QuaDsgcGF0aCA9IGRmZy9ERkdBZGphY2VuY3lMaXN0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0VkZ2UuaDsgcGF0aCA9IGRm
Zy9ERkdFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjlDQzg2MTkzQUM2
MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdGcm96ZW5WYWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHRnJvemVuVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjY5Q0M4NzE5M0FDNjBBMDA0
NTc1OUUgLyogREZHRnJvemVuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRnJvemVuVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdGcm96ZW5WYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZCMUNCMzE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlND
YWxsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEpTQ2FsbC5j
cHA7IHBhdGggPSBmdGwvRlRMSlNDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY2QjFDQjQxODVGQzlFOTAwODQ1RDk3IC8qIEZUTEpTQ2FsbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBGVExKU0NhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU0NhbGwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QjFDQjcxODYxMjQ0QzAwODQ1RDk3IC8q
IEFyaXR5Q2hlY2tNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5
Q2hlY2tNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MDY0LDYgKzUwNzIs
OCBAQAogCQkJCTBGOUQzMzk1MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCAqLywK
IAkJCQlBN0Q4OUNFODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuY3BwICovLAog
CQkJCUE3RDg5Q0U5MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5oICovLAorCQkJ
CTBGNjlDQzg2MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5jcHAgKi8sCisJCQkJ
MEY2OUNDODcxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggKi8sCiAJCQkJMkE4
ODA2NzYxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCAqLywKIAkJ
CQkyQTg4MDY3NzE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuaCAqLywK
IAkJCQk4NkVDOURCNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCAqLywK
QEAgLTUxOTYsNiArNTIwNiw4IEBACiAJCQkJMEYyQkRDM0YxNTIyODAxNzAwQ0Q4OTEwIC8qIERG
R1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oICovLAogCQkJCTBGMkJEQzRFMTUyMjhCRTcwMENEODkx
MCAvKiBERkdWYWx1ZVNvdXJjZS5jcHAgKi8sCiAJCQkJMEYyQkRDNDAxNTIyODAxNzAwQ0Q4OTEw
IC8qIERGR1ZhbHVlU291cmNlLmggKi8sCisJCQkJMEYwMTIzMzAxOTQ0RUExQjAwODQzQTBDIC8q
IERGR1ZhbHVlU3RyZW5ndGguY3BwICovLAorCQkJCTBGMDEyMzMxMTk0NEVBMUIwMDg0M0EwQyAv
KiBERkdWYWx1ZVN0cmVuZ3RoLmggKi8sCiAJCQkJMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8sCiAJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAogCQkJCTBGRERCRkIyMTY2NkVFRDUw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmNwcCAqLywKQEAgLTU5MjQsNiAr
NTkzNiw3IEBACiAJCQkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5r
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVCNEYgLyog
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
NjlDQzg5MTkzQUM2MEEwMDQ1NzU5RSAvKiBERkdGcm96ZW5WYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyNEU1NDIxN0VBOUY1OTAwQUJCMjE3IC8qIENDYWxsSGVscGVycy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkM2QUFBRTUwRTFGNDI2NTAwQUQ4N0Q4IC8qIENsYXNzSW5mby5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3M0Q3QUYxNjVBMTQzMDAwQUNBQjcxIC8qIENsb3N1cmVDYWxsU3R1
YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzNSw2ICs2NDQ4LDcgQEAKIAkJCQlGRUQy
ODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjAxMjMzMzE5NDRFQTFCMDA4NDNBMEMgLyogREZHVmFsdWVTdHJlbmd0
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1B
UEkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZN
QVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgz
M0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC03NTI5LDYgKzc1NDMs
NyBAQAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODE2RTFCMTU0Q0M1NkMwMEI4MDU0QyAv
KiBCbG9ja0FsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjY5Q0M4ODE5M0FDNjBB
MDA0NTc1OUUgLyogREZHRnJvemVuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4
NjMxMDdFQzExQTAwMTNFN0IyIC8qIEJvb2xlYW5Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg2NDEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhbk9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDI4MDg2NTEwN0VDMTFBMDAxM0U3QjIgLyogQm9vbGVhblByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MTMsNiArNzYyOCw3IEBACiAJCQkJMEZEM0M4
MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkJDMEFFNzE0OTZDN0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEYwMTIzMzIxOTQ0RUExQjAwODQzQTBDIC8qIERGR1ZhbHVlU3RyZW5ndGgu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3NzQxNzk3MzhCODAwOURGNzQ0IC8qIERGR0Zh
aWxlZEZpbmFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3NjE3OTczOEI4MDA5
REY3NDQgLyogREZHRmluYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzE1MTUx
QzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3Bw
CShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDYgQEAgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBDYWxsTGlua1N0YQogI2lmIEVOQUJMRShERkdfSklUKQog
ICAgIGV4aXRTaXRlRGF0YS5tX3Rha2VzU2xvd1BhdGggPQogICAgICAgICBwcm9maWxlZEJsb2Nr
LT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4
LCBCYWRDYWNoZSwgZXhpdGluZ0pJVFR5cGUpKQotICAgICAgICB8fCBwcm9maWxlZEJsb2NrLT5o
YXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRDYWNoZVdhdGNocG9pbnQsIGV4aXRpbmdKSVRUeXBlKSkKICAgICAgICAgfHwgcHJvZmlsZWRC
bG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJ
bmRleCwgQmFkRXhlY3V0YWJsZSwgZXhpdGluZ0pJVFR5cGUpKTsKICAgICBleGl0U2l0ZURhdGEu
bV9iYWRGdW5jdGlvbiA9CiAgICAgICAgIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tl
ciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEZ1bmN0aW9uLCBleGl0
aW5nSklUVHlwZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRL
aW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhp
dEtpbmQuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxMiArNDQsOCBAQCBjb25z
dCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpCiAgICAgICAgIHJldHVybiAiQmFk
RXhlY3V0YWJsZSI7CiAgICAgY2FzZSBCYWRDYWNoZToKICAgICAgICAgcmV0dXJuICJCYWRDYWNo
ZSI7Ci0gICAgY2FzZSBCYWRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiAiQmFkQ2Fj
aGVXYXRjaHBvaW50IjsKLSAgICBjYXNlIEJhZFdlYWtDb25zdGFudENhY2hlOgotICAgICAgICBy
ZXR1cm4gIkJhZFdlYWtDb25zdGFudENhY2hlIjsKLSAgICBjYXNlIEJhZFdlYWtDb25zdGFudENh
Y2hlV2F0Y2hwb2ludDoKLSAgICAgICAgcmV0dXJuICJCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNo
cG9pbnQiOworICAgIGNhc2UgQmFkQ29uc3RhbnRDYWNoZToKKyAgICAgICAgcmV0dXJuICJCYWRD
b25zdGFudENhY2hlIjsKICAgICBjYXNlIEJhZEluZGV4aW5nVHlwZToKICAgICAgICAgcmV0dXJu
ICJCYWRJbmRleGluZ1R5cGUiOwogICAgIGNhc2UgT3ZlcmZsb3c6CkBAIC03Miw4ICs2OCw2IEBA
IGNvbnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2kKICAgICAgICAgcmV0dXJu
ICJOb3RTdHJpbmdPYmplY3QiOwogICAgIGNhc2UgVW5jb3VudGFibGU6CiAgICAgICAgIHJldHVy
biAiVW5jb3VudGFibGUiOwotICAgIGNhc2UgVW5jb3VudGFibGVXYXRjaHBvaW50OgotICAgICAg
ICByZXR1cm4gIlVuY291bnRhYmxlV2F0Y2hwb2ludCI7CiAgICAgY2FzZSBVbmNvdW50YWJsZUlu
dmFsaWRhdGlvbjoKICAgICAgICAgcmV0dXJuICJVbmNvdW50YWJsZUludmFsaWRhdGlvbiI7CiAg
ICAgY2FzZSBXYXRjaGRvZ1RpbWVyRmlyZWQ6CkBAIC05Miw3ICs4Niw2IEBAIGJvb2wgZXhpdEtp
bmRJc0NvdW50YWJsZShFeGl0S2luZCBraW5kKQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIGNhc2UgQmFkVHlwZToKICAgICBjYXNlIFVuY291bnRhYmxlOgotICAg
IGNhc2UgVW5jb3VudGFibGVXYXRjaHBvaW50OgogICAgIGNhc2UgTG9hZEZyb21Ib2xlOiAvLyBB
bHJlYWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkgdGhlIGJhc2VsaW5lIEpJVC4KICAgICBjYXNlIFN0
b3JlVG9Ib2xlOiAvLyBBbHJlYWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkgdGhlIGJhc2VsaW5lIEpJ
VC4KICAgICBjYXNlIE91dE9mQm91bmRzOiAvLyBBbHJlYWR5IGNvdW50ZWQgZGlyZWN0bHkgYnkg
dGhlIGJhc2VsaW5lIEpJVC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5oCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsNyBAQCBlbnVtIEV4
aXRLaW5kIDogdWludDhfdCB7CiAgICAgQmFkRnVuY3Rpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNl
IHdlIG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hhdCBmdW5jdGlvbiB3ZSB3
b3VsZCBzZWUuCiAgICAgQmFkRXhlY3V0YWJsZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbWFk
ZSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB3aGF0IGV4ZWN1dGFibGUgd2Ugd291bGQg
c2VlLgogICAgIEJhZENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhbiBpbmxpbmUgY2FjaGUg
d2FzIHdyb25nLgotICAgIEJhZFdlYWtDb25zdGFudENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVz
ZSBhIGNhY2hlIG9uIGEgd2VhayBjb25zdGFudCAodXN1YWxseSBhIHByb3RvdHlwZSkgd2FzIHdy
b25nLgotICAgIEJhZENhY2hlV2F0Y2hwb2ludCwgLy8gU2FtZSBhcyBCYWRDYWNoZSBidXQgZnJv
bSBhIHdhdGNocG9pbnQuCi0gICAgQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50LCAvLyBT
YW1lIGFzIEJhZFdlYWtDb25zdGFudENhY2hlIGJ1dCBmcm9tIGEgd2F0Y2hwb2ludC4KKyAgICBC
YWRDb25zdGFudENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIGNhY2hlIG9uIGEgd2VhayBj
b25zdGFudCAodXN1YWxseSBhIHByb3RvdHlwZSkgd2FzIHdyb25nLgogICAgIEJhZEluZGV4aW5n
VHlwZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYW4gaW5kZXhpbmcgdHlwZSB3YXMgd3JvbmcuCiAg
ICAgT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJmbG93LgogICAgIE5lZ2F0
aXZlWmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVyZWQgbmVnYXRpdmUgemVy
by4KQEAgLTQ5LDcgKzQ3LDYgQEAgZW51bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIE5vdFN0
cmluZ09iamVjdCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ugc2hvdWxkbid0IGhhdmUgYXR0ZW1w
dGVkIHRvIG9wdGltaXplIHN0cmluZyBvYmplY3QgYWNjZXNzLgogICAgIFVuY291bnRhYmxlLCAv
LyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFib3ZlIHJlYXNvbnMsIGFuZCB3ZSBzaG91bGQg
bm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhpcyBzaG91bGQgYmUgdmlld2VkIGFzIGEgRklY
TUUuCiAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHRo
ZSBjb2RlIGJsb2NrIHdhcyBpbnZhbGlkYXRlZDsgdGhpcyBtZWFucyB0aGF0IHdlJ3ZlIGFscmVh
ZHkgY291bnRlZCB0aGUgcmVhc29ucyB3aHkgdGhlIGNvZGUgYmxvY2sgd2FzIGludmFsaWRhdGVk
LgotICAgIFVuY291bnRhYmxlV2F0Y2hwb2ludCwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugb2YgYSB3
YXRjaHBvaW50LCB3aGljaCBpc24ndCBjb3VudGVkIGJlY2F1c2Ugd2F0Y2hwb2ludHMgZG8gdHJh
Y2tpbmcgdGhlbXNlbHZlcy4KICAgICBXYXRjaGRvZ1RpbWVyRmlyZWQsIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIHdlIG5lZWQgdG8gc2VydmljZSB0aGUgd2F0Y2hkb2cgdGltZXIuCiAgICAgRGVidWdn
ZXJFdmVudCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIHNlcnZpY2UgdGhlIGRlYnVn
Z2VyLgogfTsKQEAgLTU3LDE4ICs1NCw2IEBAIGVudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKIGNv
bnN0IGNoYXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQpOwogYm9vbCBleGl0S2luZElzQ291
bnRhYmxlKEV4aXRLaW5kKTsKIAotaW5saW5lIGJvb2wgaXNXYXRjaHBvaW50KEV4aXRLaW5kIGtp
bmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBCYWRDYWNoZVdhdGNocG9pbnQ6
Ci0gICAgY2FzZSBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQ6Ci0gICAgY2FzZSBVbmNv
dW50YWJsZVdhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
OSArNTEsNyBAQCBib29sIEdldEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgCiBib29s
IEdldEJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxv
Y2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBF
eGl0aW5nSklUVHlwZSBqaXRUeXBlKQogewogICAgIHJldHVybiBwcm9maWxlZEJsb2NrLT5oYXNF
eGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRD
YWNoZSwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxv
Y2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hw
b2ludCwgaml0VHlwZSkpCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxv
Y2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZFdlYWtDb25zdGFu
dENhY2hlLCBqaXRUeXBlKSkKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUo
bG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkV2Vha0NvbnN0
YW50Q2FjaGVXYXRjaHBvaW50LCBqaXRUeXBlKSk7CisgICAgICAgIHx8IHByb2ZpbGVkQmxvY2st
Pmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgs
IEJhZENvbnN0YW50Q2FjaGUsIGppdFR5cGUpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lv
biAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDcgQEAgYm9vbCBQdXRCeUlkU3RhdHVz
OjphcHBlbmRWYXJpYW50KGNvbnN0IAogYm9vbCBQdXRCeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShj
b25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhpdGluZ0pJVFR5cGUgZXhpdFR5cGUpCiB7CiAg
ICAgcmV0dXJuIHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlLCBleGl0VHlwZSkpCi0gICAgICAgIHx8
IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRl
KGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hwb2ludCwgZXhpdFR5cGUpKQotICAgICAgICB8
fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0
ZShieXRlY29kZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZSwgZXhpdFR5cGUpKQotICAgICAg
ICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0
U2l0ZShieXRlY29kZUluZGV4LCBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQsIGV4aXRU
eXBlKSk7CisgICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZH
OjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUsIGV4aXRU
eXBlKSk7CiAgICAgCiB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjk2ODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoVCBu
b2RlLCBKU1ZhbHVlIHZhbHVlKQorICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQnlWYWx1ZShU
IG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGZpbHRlckJ5
VmFsdWUoZm9yTm9kZShub2RlKSwgdmFsdWUpOwogICAgIH0KQEAgLTE0NCw3ICsxNDQsNyBAQCBw
dWJsaWM6CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIoQWJzdHJhY3RWYWx1ZSYsIGNvbnN0
IFN0cnVjdHVyZVNldCYpOwogICAgIEZpbHRyYXRpb25SZXN1bHQgZmlsdGVyQXJyYXlNb2RlcyhB
YnN0cmFjdFZhbHVlJiwgQXJyYXlNb2Rlcyk7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBmaWx0ZXIo
QWJzdHJhY3RWYWx1ZSYsIFNwZWN1bGF0ZWRUeXBlKTsKLSAgICBGaWx0cmF0aW9uUmVzdWx0IGZp
bHRlckJ5VmFsdWUoQWJzdHJhY3RWYWx1ZSYsIEpTVmFsdWUpOworICAgIEZpbHRyYXRpb25SZXN1
bHQgZmlsdGVyQnlWYWx1ZShBYnN0cmFjdFZhbHVlJiwgRnJvemVuVmFsdWUpOwogICAgIAogcHJp
dmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQg
aW5kZXhJbkJsb2NrKTsKQEAgLTE2NSwxNCArMTY1LDE0IEBAIHByaXZhdGU6CiAgICAgfTsKICAg
ICBCb29sZWFuUmVzdWx0IGJvb2xlYW5SZXN1bHQoTm9kZSosIEFic3RyYWN0VmFsdWUmKTsKICAg
ICAKLSAgICB2b2lkIHNldEJ1aWx0SW5Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVl
KQorICAgIHZvaWQgc2V0QnVpbHRJbkNvbnN0YW50KE5vZGUqIG5vZGUsIEZyb3plblZhbHVlIHZh
bHVlKQogICAgIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgYWJzdHJhY3RWYWx1ZSA9IGZvck5v
ZGUobm9kZSk7CiAgICAgICAgIGFic3RyYWN0VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBtX3N0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgYWJzdHJhY3RWYWx1ZS5maXhU
eXBlRm9yUmVwcmVzZW50YXRpb24obm9kZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0Q29u
c3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB2b2lkIHNldENvbnN0YW50KE5v
ZGUqIG5vZGUsIEZyb3plblZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgc2V0QnVpbHRJbkNv
bnN0YW50KG5vZGUsIHZhbHVlKTsKICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDkgKzEzNyw4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25z
dGFudDoKICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoK
ICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6IHsKLSAgICAgICAgc2V0QnVpbHRJbkNvbnN0YW50
KG5vZGUsIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBzZXRCdWls
dEluQ29uc3RhbnQobm9kZSwgKm5vZGUtPmNvbnN0YW50KCkpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtODU1LDMyICs4NTQsMzIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdENoaWxk
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGlsZCkgewogICAgICAg
ICAgICAgSlNWYWx1ZSB0eXBlU3RyaW5nID0ganNUeXBlU3RyaW5nRm9yVmFsdWUoKnZtLCBtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksIGNoaWxkKTsK
LSAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHR5cGVTdHJpbmcpOworICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHR5cGVTdHJpbmcpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoaXNGdWxsTnVtYmVy
U3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25z
dGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLm51bWJlclN0cmluZygpKTsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdzLm51bWJl
clN0cmluZygpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgaWYgKGlzU3RyaW5nU3BlY3VsYXRpb24oYWJzdHJhY3RDaGlsZC5tX3R5cGUpKSB7Ci0g
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21hbGxTdHJpbmdzLnN0cmluZ1N0cmlu
ZygpKTsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+
c21hbGxTdHJpbmdzLnN0cmluZ1N0cmluZygpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgaWYgKGlzRmluYWxPYmplY3RTcGVjdWxhdGlvbihhYnN0
cmFjdENoaWxkLm1fdHlwZSkgfHwgaXNBcnJheVNwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90
eXBlKSB8fCBpc0FyZ3VtZW50c1NwZWN1bGF0aW9uKGFic3RyYWN0Q2hpbGQubV90eXBlKSkgewot
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgdm0tPnNtYWxsU3RyaW5ncy5vYmplY3RTdHJp
bmcoKSk7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUodm0t
PnNtYWxsU3RyaW5ncy5vYmplY3RTdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Z1bmN0aW9uU3BlY3VsYXRpb24oYWJzdHJh
Y3RDaGlsZC5tX3R5cGUpKSB7Ci0gICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCB2bS0+c21h
bGxTdHJpbmdzLmZ1bmN0aW9uU3RyaW5nKCkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgKm1fZ3JhcGguZnJlZXplKHZtLT5zbWFsbFN0cmluZ3MuZnVuY3Rpb25TdHJpbmcoKSkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChpc0Jv
b2xlYW5TcGVjdWxhdGlvbihhYnN0cmFjdENoaWxkLm1fdHlwZSkpIHsKLSAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsIHZtLT5zbWFsbFN0cmluZ3MuYm9vbGVhblN0cmluZygpKTsKKyAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZSh2bS0+c21hbGxTdHJpbmdz
LmJvb2xlYW5TdHJpbmcoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTQzMiw3ICsxNDMxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eQogICAgIGNhc2UgU2tpcFNjb3BlOiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAg
ICAgIHNldENvbnN0YW50KG5vZGUsIEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0Nl
bGwoKSktPm5leHQoKSkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGgu
ZnJlZXplKEpTVmFsdWUoanNDYXN0PEpTU2NvcGUqPihjaGlsZC5hc0NlbGwoKSktPm5leHQoKSkp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjT2JqZWN0T3RoZXIpOwpAQCAtMTQ3OSw3ICsxNDc4LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0Nl
bGwoKS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0u
c3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5v
ZGUsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSk7CkBAIC0xNzYzLDE0ICsxNzYyLDE0IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAKICAgICBjYXNlIENo
ZWNrRnVuY3Rpb246IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnZhbHVlKCk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpKSB7
CisgICAgICAgIGlmICh2YWx1ZSA9PSBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpKSB7CiAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgQVNT
RVJUKHZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOyAvLyBMaWVzISBXZSBjYW4gZG8gYmV0dGVyLgot
ICAgICAgICBmaWx0ZXJCeVZhbHVlKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5mdW5jdGlvbigpKTsK
KyAgICAgICAgZmlsdGVyQnlWYWx1ZShub2RlLT5jaGlsZDEoKSwgKm5vZGUtPmZ1bmN0aW9uKCkp
OwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMjEyNCw3ICsyMTIzLDcgQEAg
RmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdEludGVycHJldGVyPEFicwogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZpbHRlckJ5VmFsdWUoCi0gICAgQWJzdHJhY3RWYWx1
ZSYgYWJzdHJhY3RWYWx1ZSwgSlNWYWx1ZSBjb25jcmV0ZVZhbHVlKQorICAgIEFic3RyYWN0VmFs
dWUmIGFic3RyYWN0VmFsdWUsIEZyb3plblZhbHVlIGNvbmNyZXRlVmFsdWUpCiB7CiAgICAgaWYg
KGFic3RyYWN0VmFsdWUuZmlsdGVyQnlWYWx1ZShjb25jcmV0ZVZhbHVlKSA9PSBGaWx0cmF0aW9u
T0spCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFu
c2l0aW9ucyhjCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogfQogCi12b2lkIEFic3RyYWN0VmFs
dWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFsdWUpCit2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldE9TUkVudHJ5VmFsdWUoR3JhcGgmIGdyYXBoLCBjb25zdCBGcm96ZW5W
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7
CisgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUudmFsdWUoKS5pc0NlbGwoKSkgeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLnN0cnVjdHVyZSgpOwogICAgICAgICBncmFwaC53
YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CiAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7CkBAIC01OSwxNyArNTksMTcgQEAgdm9pZCBBYnN0cmFjdFZhbHVl
OjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0K
ICAgICAgICAgCi0gICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwotICAg
IG1fdmFsdWUgPSB2YWx1ZTsKKyAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1
ZS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICAgICAgCiAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKLXZv
aWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0
dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0ZSkKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdy
YXBoJiBncmFwaCwgY29uc3QgRnJvemVuVmFsdWUmIHZhbHVlLCBTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUgY2xvYmJlclN0YXRlKQogewotICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7
Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpOworICAgIGlmICghIXZhbHVlICYmIHZhbHVlLnZhbHVlKCkuaXNDZWxsKCkpIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5zdHJ1Y3R1cmUoKTsKICAgICAgICAgaWYg
KGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKSkgewogICAgICAgICAgICAg
Ly8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIHdhdGNocG9pbnQgZm9yIHRo
aXMgaGFzIGFscmVhZHkgYmVlbiBzZXQuCiAgICAgICAgICAgICAvLyBCdXQgd2UgY2FuJ3QgYmVj
YXVzZSBvdXIgdmlldyBvZiB3aGF0IHN0cnVjdHVyZSBhIHZhbHVlIGhhcyBrZWVwcyBjaGFuZ2lu
Zy4gVGhhdCdzCkBAIC05MCw4ICs5MCw4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBo
JiBncmFwaCwgSlMKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgCi0gICAg
bV90eXBlID0gc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpOwotICAgIG1fdmFsdWUgPSB2YWx1
ZTsKKyAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1ZS52YWx1ZSgpKTsKKyAg
ICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKQEAgLTIyMSwxMSArMjIxLDExIEBAIEZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICByZXR1cm4gbm9ybWFsaXpl
Q2xhcml0eSgpOwogfQogCi1GaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5
VmFsdWUoSlNWYWx1ZSB2YWx1ZSkKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6Zmls
dGVyQnlWYWx1ZShjb25zdCBGcm96ZW5WYWx1ZSYgdmFsdWUpCiB7Ci0gICAgRmlsdHJhdGlvblJl
c3VsdCByZXN1bHQgPSBmaWx0ZXIoc3BlY3VsYXRpb25Gcm9tVmFsdWUodmFsdWUpKTsKKyAgICBG
aWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IGZpbHRlcihzcGVjdWxhdGlvbkZyb21WYWx1ZSh2YWx1
ZS52YWx1ZSgpKSk7CiAgICAgaWYgKG1fdHlwZSkKLSAgICAgICAgbV92YWx1ZSA9IHZhbHVlOwor
ICAgICAgICBtX3ZhbHVlID0gdmFsdWUudmFsdWUoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFy
cmF5UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0ZpbHRyYXRpb25SZXN1bHQuaCIKKyNpbmNsdWRl
ICJERkdGcm96ZW5WYWx1ZS5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1ZGUg
IkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKICNpbmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUuaCIKQEAgLTE3Myw4ICsxNzQsOSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0TW9zdFNwZWNp
ZmljKEdyYXBoJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBzZXQoR3JhcGgmLCBKU1ZhbHVlLCBTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgIHZvaWQgc2V0T1NSRW50cnlWYWx1ZShHcmFwaCYsIGNv
bnN0IEZyb3plblZhbHVlJik7CisgICAgCisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBGcm96
ZW5WYWx1ZSYsIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBT
dHJ1Y3R1cmUqKTsKICAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwog
ICAgIApAQCAtMjYyLDcgKzI2NCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAgICAKLSAg
ICBGaWx0cmF0aW9uUmVzdWx0IGZpbHRlckJ5VmFsdWUoSlNWYWx1ZSB2YWx1ZSk7CisgICAgRmls
dHJhdGlvblJlc3VsdCBmaWx0ZXJCeVZhbHVlKGNvbnN0IEZyb3plblZhbHVlJiB2YWx1ZSk7CiAg
ICAgCiAgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKQEAgLTM0
OSw3ICszNTEsMTEgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGltcGxpZXMgbm90
aGluZyBhYm91dCB0aGUgc3RydWN0dXJlLiBPZGRseSwgSlNWYWx1ZSgpIChpLmUuIHRoZSBlbXB0
eSB2YWx1ZSkKICAgICAvLyBtZWFucyBlaXRoZXIgQk9UVE9NIG9yIFRPUCBkZXBlbmRpbmcgb24g
dGhlIHN0YXRlIG9mIG1fdHlwZTogaWYgbV90eXBlIGlzCiAgICAgLy8gQk9UVE9NIHRoZW4gSlNW
YWx1ZSgpIG1lYW5zIEJPVFRPTTsgaWYgbV90eXBlIGlzIG5vdCBCT1RUT00gdGhlbiBKU1ZhbHVl
KCkKLSAgICAvLyBtZWFucyBUT1AuCisgICAgLy8gbWVhbnMgVE9QLiBBbHNvIG5vdGUgdGhhdCB0
aGlzIHZhbHVlIGlzbid0IG5lY2Vzc2FyaWx5IGtub3duIHRvIHRoZSBHQworICAgIC8vIChzdHJv
bmdseSBvciBldmVuIHdlYWtseSAtIGl0IG1heSBiZSBhbiAiZnJhZ2lsZSIgdmFsdWUsIHNlZQor
ICAgIC8vIERGR1ZhbHVlU3RyZW5ndGguaCkuIElmIHlvdSBwZXJmb3JtIGFueSBvcHRpbWl6YXRp
b24gYmFzZWQgb24gYSBjZWxsIG1fdmFsdWUKKyAgICAvLyB0aGF0IHJlcXVpcmVzIHRoYXQgdGhl
IHZhbHVlIGJlIGtlcHQgYWxpdmUsIHlvdSBtdXN0IGNhbGwgZnJlZXplKCkgb24gdGhhdAorICAg
IC8vIHZhbHVlLCB3aGljaCB3aWxsIHR1cm4gaXQgaW50byBhIHdlYWsgdmFsdWUuCiAgICAgSlNW
YWx1ZSBtX3ZhbHVlOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsOCArMjA4
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5pdF9sYXp5X3JlZyBz
aW5jZSBpdCB0cmVhdHMgQ3JlYXRlQXJndW1lbnRzIGFzIHJlYWRpbmcKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGxvY2FsIHZhcmlhYmxlcy4gVGhhdCBjb3VsZCBiZSBmaXhlZCwgYnV0IGl0
J3MgZWFzaWVyIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlz
IGhlcmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLT5vcCgpID09IEpTQ29u
c3RhbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc291cmNlLT52YWx1ZU9mSlND
b25zdGFudChjb2RlQmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNl
LT5vcCgpID09IEpTQ29uc3RhbnQgJiYgISpzb3VyY2UtPmNvbnN0YW50KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YXJpYWJsZSBpcyB0b3RhbGx5IGRlYWQsIHRo
ZW4gaWdub3JlIGl0LgpAQCAtNTExLDcgKzUxMCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRl
ZCwgb3JpZ2luKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGguY29udmVydFRvQ29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBq
c051bWJlcihvcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSwgbV9ncmFwaC5mcmVlemUoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAganNOdW1iZXIob3JpZ2luLnNlbWFudGljLmlubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKSk7CiAgICAgICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CkBAIC01MjgsMTIgKzUyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+Y2hpbGQxKCktPmhhc0NvbnN0YW50KCkpCisgICAgICAgICAgICAg
ICAgICAgIGlmICghbm9kZS0+aXNJbnQzMkNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG5vZGUtPmNo
aWxkMSgpLT52YWx1ZU9mSlNDb25zdGFudChjb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghdmFsdWUuaXNJbnQzMigpKQorICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUt
PmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSB2YWx1ZS5hc0ludDMyKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGludDMyX3QgaW5kZXggPSBub2RlLT5jaGlsZDEoKS0+YXNJbnQz
MigpOwogICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwCiAgICAgICAgICAgICAgICAg
ICAgICAgICB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4ICsgMSkgPj0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5h
cmd1bWVudHMuc2l6ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk2
ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNyArNjcsMTcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBib29sIGlzTm90TmVnWmVybyhOb2RlKiBub2RlKQogICAgIHsKLSAgICAgICAg
aWYgKCFtX2dyYXBoLmlzTnVtYmVyQ29uc3RhbnQobm9kZSkpCisgICAgICAgIGlmICghbm9kZS0+
aXNOdW1iZXJDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBk
b3VibGUgdmFsdWUgPSBtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFudChub2RlKTsKKyAgICAg
ICAgZG91YmxlIHZhbHVlID0gbm9kZS0+YXNOdW1iZXIoKTsKICAgICAgICAgcmV0dXJuICh2YWx1
ZSB8fCAxLjAgLyB2YWx1ZSA+IDAuMCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNOb3RQb3Na
ZXJvKE5vZGUqIG5vZGUpCiAgICAgewotICAgICAgICBpZiAoIW1fZ3JhcGguaXNOdW1iZXJDb25z
dGFudChub2RlKSkKKyAgICAgICAgaWYgKCFub2RlLT5pc051bWJlckNvbnN0YW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IG1fZ3JhcGgudmFs
dWVPZk51bWJlckNvbnN0YW50KG5vZGUpOworICAgICAgICBkb3VibGUgdmFsdWUgPSBub2RlLT5h
c051bWJlcigpOwogICAgICAgICByZXR1cm4gKHZhbHVlIHx8IDEuMCAvIHZhbHVlIDwgMC4wKTsK
ICAgICB9CiAKQEAgLTg1LDcgKzg1LDcgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxpbnQgcG93
ZXI+CiAgICAgYm9vbCBpc1dpdGhpblBvd2VyT2ZUd29Gb3JDb25zdGFudChOb2RlKiBub2RlKQog
ICAgIHsKLSAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5vZGUtPnZhbHVlT2ZKU0Nv
bnN0YW50KGNvZGVCbG9jaygpKTsKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IG5v
ZGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGRvdWJsZSBpbW1lZGlhdGUgPSBp
bW1lZGlhdGVWYWx1ZS5hc051bWJlcigpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBOb2RlKiBzaGlmdEFtb3VudCA9IG5vZGUtPmNoaWxkMigpLm5vZGUoKTsKICAg
ICAgICAgICAgIGlmIChzaGlmdEFtb3VudC0+b3AoKSAhPSBKU0NvbnN0YW50KQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUg
PSBzaGlmdEFtb3VudC0+dmFsdWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKCkpOworICAgICAgICAg
ICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IHNoaWZ0QW1vdW50LT5hc0pTVmFsdWUoKTsKICAg
ICAgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJbnQzMigpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiBpbW1lZGlhdGVWYWx1ZS5hc0ludDMy
KCkgPiAzMiAtIHBvd2VyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
MTggKzEzMiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAgICAg
LCBtX2N1cnJlbnRCbG9jaygwKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCi0gICAgICAg
ICwgbV9jb25zdGFudFVuZGVmaW5lZChVSU5UX01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50TnVs
bChVSU5UX01BWCkKLSAgICAgICAgLCBtX2NvbnN0YW50TmFOKFVJTlRfTUFYKQotICAgICAgICAs
IG1fY29uc3RhbnQxKFVJTlRfTUFYKQotICAgICAgICAsIG1fY29uc3RhbnRzKG1fY29kZUJsb2Nr
LT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCkpCisgICAgICAgICwgbV9jb25zdGFudFVuZGVm
aW5lZChncmFwaC5mcmVlemUoanNVbmRlZmluZWQoKSkpCisgICAgICAgICwgbV9jb25zdGFudE51
bGwoZ3JhcGguZnJlZXplKGpzTnVsbCgpKSkKKyAgICAgICAgLCBtX2NvbnN0YW50TmFOKGdyYXBo
LmZyZWV6ZShqc051bWJlcihQTmFOKSkpCisgICAgICAgICwgbV9jb25zdGFudE9uZShncmFwaC5m
cmVlemUoanNOdW1iZXIoMSkpKQogICAgICAgICAsIG1fbnVtQXJndW1lbnRzKG1fY29kZUJsb2Nr
LT5udW1QYXJhbWV0ZXJzKCkpCiAgICAgICAgICwgbV9udW1Mb2NhbHMobV9jb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAgICAgICAsIG1fcGFyYW1ldGVyU2xvdHMoMCkKICAgICAg
ICAgLCBtX251bVBhc3NlZFZhckFyZ3MoMCkKICAgICAgICAgLCBtX2lubGluZVN0YWNrVG9wKDAp
CiAgICAgICAgICwgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyhmYWxzZSkKLSAgICAgICAgLCBtX2Vt
cHR5SlNWYWx1ZUluZGV4KFVJTlRfTUFYKQogICAgICAgICAsIG1fY3VycmVudEluc3RydWN0aW9u
KDApCiAgICAgewogICAgICAgICBBU1NFUlQobV9wcm9maWxlZEJsb2NrKTsKQEAgLTIxNywxMiAr
MjE1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBHZXQvU2V0IHRoZSBvcGVyYW5kcy9yZXN1bHQgb2Yg
YSBieXRlY29kZSBpbnN0cnVjdGlvbi4KICAgICBOb2RlKiBnZXREaXJlY3QoVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQpCiAgICAgewotICAgICAgICAvLyBJcyB0aGlzIGEgY29uc3RhbnQ/Ci0gICAg
ICAgIGlmIChvcGVyYW5kLmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgdW5zaWduZWQgY29u
c3RhbnQgPSBvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpOwotICAgICAgICAgICAgQVNTRVJUKGNv
bnN0YW50IDwgbV9jb25zdGFudHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIHJldHVybiBnZXRKU0Nv
bnN0YW50KGNvbnN0YW50KTsKLSAgICAgICAgfQorICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXND
b25zdGFudCgpKTsKIAogICAgICAgICAvLyBJcyB0aGlzIGFuIGFyZ3VtZW50PwogICAgICAgICBp
ZiAob3BlcmFuZC5pc0FyZ3VtZW50KCkpCkBAIC0yMzQsMTMgKzIyNywzMCBAQCBwcml2YXRlOgog
CiAgICAgTm9kZSogZ2V0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKQogICAgIHsKKyAgICAgICAg
aWYgKG9wZXJhbmQuaXNDb25zdGFudCgpKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdGFu
dEluZGV4ID0gb3BlcmFuZC50b0NvbnN0YW50SW5kZXgoKTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG9sZFNpemUgPSBtX2NvbnN0YW50cy5zaXplKCk7CisgICAgICAgICAgICBpZiAoY29uc3RhbnRJ
bmRleCA+PSBvbGRTaXplIHx8ICFtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSkgeworICAgICAg
ICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+
Z2V0Q29uc3RhbnQob3BlcmFuZC5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0
YW50SW5kZXggPj0gb2xkU2l6ZSkgeworICAgICAgICAgICAgICAgICAgICBtX2NvbnN0YW50cy5n
cm93KGNvbnN0YW50SW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gb2xkU2l6ZTsgaSA8IG1fY29uc3RhbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb25zdGFudHNbaV0gPSBudWxscHRyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudEluZGV4XSA9CisgICAgICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ry
b25nKHZhbHVlKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQVNTRVJUKG1fY29uc3Rh
bnRzW2NvbnN0YW50SW5kZXhdKTsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbnN0YW50c1tjb25z
dGFudEluZGV4XTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSgpKSB7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpLT5pc0Nsb3N1cmVD
YWxsKSB7CiAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogY2FsbGVlID0gaW5saW5lQ2FsbEZy
YW1lKCktPmNhbGxlZUNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2Vs
bENvbnN0YW50KGNhbGxlZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25z
dGFudChjYWxsZWUpOwogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpT
U3RhY2s6OlNjb3BlQ2hhaW4pCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjZWxsQ29uc3Rh
bnQoY2FsbGVlLT5zY29wZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0Nv
bnN0YW50KGNhbGxlZS0+c2NvcGUoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICByZXR1
cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUpOwpAQCAtMzA5LDE0ICszMTksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0LT5pbmZlcnJlZFZhbHVlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGdW5jdGlvblJlZW50cnlXYXRjaHBv
aW50LCBPcEluZm8obV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQsIE9wSW5mbyhzZXQpKTsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gTm90ZTogdGhpcyBpcyB2ZXJ5IHNwZWNpYWwgZnJvbSBhbiBPU1Ig
ZXhpdCBzdGFuZHBvaW50LiBXZSB3b3VsZG4ndCBiZQotICAgICAgICAgICAgICAgICAgICAvLyBh
YmxlIHRvIGRvIHRoaXMgZm9yIG1vc3QgbG9jYWxzLCBidXQgaXQgd29ya3MgaGVyZSBiZWNhdXNl
IHdlJ3JlIGRlYWxpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCBhIGZsdXNoZWQgbG9j
YWwuIEZvciBtb3N0IGxvY2FscyB3ZSB3b3VsZCBuZWVkIHRvIGlzc3VlIGEgR2V0TG9jYWwKLSAg
ICAgICAgICAgICAgICAgICAgLy8gaGVyZSBhbmQgZW5zdXJlIHRoYXQgd2UgaGF2ZSB1c2VzIGlu
IERGRyBJUiB3aGVyZXZlciB0aGVyZSB3b3VsZCBoYXZlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGJlZW4gdXNlcyBpbiBieXRlY29kZS4gQ2xlYXJseSB0aGlzIG9wdGltaXphdGlvbiBkb2VzIG5v
dCBkbyB0aGlzLiBCdXQKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCdzIGZpbmUsIGJlY2F1
c2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmFjayBsaXZlbmVzcyBmb3IgY2FwdHVyZWQKLSAgICAgICAg
ICAgICAgICAgICAgLy8gbG9jYWxzLCBhbmQgdGhpcyBvcHRpbWl6YXRpb24gb25seSBraWNrcyBp
biBmb3IgY2FwdHVyZWQgbG9jYWxzLgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mZXJy
ZWRDb25zdGFudCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25z
dGFudCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
CkBAIC0zNjcsOCArMzcwLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kLCBp
c0NhcHR1cmVkKTsKICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZVN0cnVjdHVyZUNo
ZWNrSG9pc3RpbmdGYWlsZWQoCi0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAgICAg
IHx8IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZENhY2hlV2F0Y2hwb2ludCkpOworICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsK
ICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxl
ZCgKICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZEluZGV4aW5nVHlwZSkpOwogICAgICAgICBOb2RlKiBub2Rl
ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHZhbHVl
KTsKQEAgLTQyNCw4ICs0MjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgdmFyaWFibGVBY2Nl
c3NEYXRhLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7CiAgICAgICAgIAogICAgICAgICB2
YXJpYWJsZUFjY2Vzc0RhdGEtPm1lcmdlU3RydWN0dXJlQ2hlY2tIb2lzdGluZ0ZhaWxlZCgKLSAg
ICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIEJhZENhY2hlKQotICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGVXYXRjaHBv
aW50KSk7CisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogICAgICAgICB2YXJpYWJsZUFjY2Vz
c0RhdGEtPm1lcmdlQ2hlY2tBcnJheUhvaXN0aW5nRmFpbGVkKAogICAgICAgICAgICAgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFk
SW5kZXhpbmdUeXBlKSk7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKFNldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgdmFsdWUpOwpAQCAtNDY2LDE4ICs0NjcsNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmluZEFyZ3VtZW50UG9zaXRpb25Gb3JMb2NhbChv
cGVyYW5kKTsKICAgICB9CiAKLSAgICB2b2lkIGFkZENvbnN0YW50KEpTVmFsdWUgdmFsdWUpCi0g
ICAgewotICAgICAgICB1bnNpZ25lZCBjb25zdGFudEluZGV4ID0gbV9jb2RlQmxvY2stPmFkZENv
bnN0YW50TGF6aWx5KCk7Ci0gICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29u
c3RhbnQoCi0gICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi53cml0ZUJhcnJpZXJzLAotICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdLAotICAgICAgICAg
ICAgbV9jb2RlQmxvY2ssCi0gICAgICAgICAgICBjb25zdGFudEluZGV4LAotICAgICAgICAgICAg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAKLSAgICAgICAgICAgIHZhbHVlKTsKLSAg
ICB9Ci0gICAgCiAgICAgdm9pZCBmbHVzaChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkKICAgICB7
CiAgICAgICAgIGZsdXNoRGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVy
YW5kKSk7CkBAIC01NTQsMzIgKzU0MywxNSBAQCBwcml2YXRlOgogICAgICAgICBmbHVzaEZvclRl
cm1pbmFsKCk7CiAgICAgfQogCi0gICAgLy8gTk9URTogT25seSB1c2UgdGhpcyB0byBjb25zdHJ1
Y3QgY29uc3RhbnRzIHRoYXQgYXJpc2UgZnJvbSBub24tc3BlY3VsYXRpdmUKLSAgICAvLyBjb25z
dGFudCBmb2xkaW5nLiBJLmUuIGNyZWF0aW5nIGNvbnN0YW50cyB1c2luZyB0aGlzIGlmIHdlIGhh
ZCBjb25zdGFudAotICAgIC8vIGZpZWxkIGluZmVyZW5jZSB3b3VsZCBiZSBhIGJhZCBpZGVhLCBz
aW5jZSB0aGUgYnl0ZWNvZGUgcGFyc2VyJ3MgZm9sZGluZwotICAgIC8vIGRvZXNuJ3QgaGFuZGxl
IGxpdmVuZXNzIHByZXNlcnZhdGlvbi4KLSAgICBOb2RlKiBnZXRKU0NvbnN0YW50Rm9yVmFsdWUo
SlNWYWx1ZSBjb25zdGFudFZhbHVlKQorICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgY29uc3RhbnQg
c2hvdWxkIGJlIHN0cm9uZ2x5IG1hcmtlZC4KKyAgICBOb2RlKiBqc0NvbnN0YW50KEpTVmFsdWUg
Y29uc3RhbnRWYWx1ZSkKICAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXg7Ci0g
ICAgICAgIGlmICghbV9jb2RlQmxvY2stPmZpbmRDb25zdGFudChjb25zdGFudFZhbHVlLCBjb25z
dGFudEluZGV4KSkgewotICAgICAgICAgICAgYWRkQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSk7Ci0g
ICAgICAgICAgICBtX2NvbnN0YW50cy5hcHBlbmQoQ29uc3RhbnRSZWNvcmQoKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIAotICAgICAgICBy
ZXR1cm4gZ2V0SlNDb25zdGFudChjb25zdGFudEluZGV4KTsKKyAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fZ3JhcGguZnJlZXplU3Ryb25nKGNvbnN0YW50VmFs
dWUpKSk7CiAgICAgfQogCi0gICAgTm9kZSogZ2V0SlNDb25zdGFudCh1bnNpZ25lZCBjb25zdGFu
dCkKKyAgICBOb2RlKiB3ZWFrSlNDb25zdGFudChKU1ZhbHVlIGNvbnN0YW50VmFsdWUpCiAgICAg
ewotICAgICAgICBOb2RlKiBub2RlID0gbV9jb25zdGFudHNbY29uc3RhbnRdLmFzSlNWYWx1ZTsK
LSAgICAgICAgaWYgKG5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbm9kZTsKLQotICAgICAgICBO
b2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhjb25zdGFudCkpOwot
ICAgICAgICBtX2NvbnN0YW50c1tjb25zdGFudF0uYXNKU1ZhbHVlID0gcmVzdWx0OwotICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9ncmFwaC5mcmVlemUoY29uc3RhbnRWYWx1ZSkpKTsKICAgICB9CiAKICAgICAvLyBI
ZWxwZXIgZnVuY3Rpb25zIHRvIGdldC9zZXQgdGhlIHRoaXMgdmFsdWUuCkBAIC01OTMsMTQ5ICs1
NjUsNiBAQCBwcml2YXRlOgogICAgICAgICBzZXQobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxv
Y2stPnRoaXNSZWdpc3RlcigpLCB2YWx1ZSk7CiAgICAgfQogCi0gICAgLy8gQ29udmVuaWVuY2Ug
bWV0aG9kcyBmb3IgY2hlY2tpbmcgbm9kZXMgZm9yIGNvbnN0YW50cy4KLSAgICBib29sIGlzSlND
b25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPm9wKCkgPT0g
SlNDb25zdGFudDsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBpc0pTQ29uc3RhbnQobm9kZSkgJiYgdmFsdWVPZkpTQ29u
c3RhbnQobm9kZSkuaXNJbnQzMigpOwotICAgIH0KLSAgICAvLyBDb252ZW5pZW5jZSBtZXRob2Rz
IGZvciBnZXR0aW5nIGNvbnN0YW50IHZhbHVlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0
YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUp
KTsKLSAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50
UmVnaXN0ZXJJbmRleCArIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkpOwotICAgIH0KLSAgICBpbnQz
Ml90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBBU1NF
UlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0
YW50KG5vZGUpLmFzSW50MzIoKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBtZXRob2QgcmV0
dXJucyBhIEpTQ29uc3RhbnQgd2l0aCB0aGUgdmFsdWUgJ3VuZGVmaW5lZCcuCi0gICAgTm9kZSog
Y29uc3RhbnRVbmRlZmluZWQoKQotICAgIHsKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnRVbmRl
ZmluZWQgYmVlbiBzZXQgdXAgeWV0PwotICAgICAgICBpZiAobV9jb25zdGFudFVuZGVmaW5lZCA9
PSBVSU5UX01BWCkgewotICAgICAgICAgICAgLy8gU2VhcmNoIHRoZSBjb25zdGFudCBwb29sIGZv
ciB1bmRlZmluZWQsIGlmIHdlIGZpbmQgaXQsIHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAg
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNvbnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKG1fY29uc3RhbnRVbmRlZmlu
ZWQgPSAwOyBtX2NvbnN0YW50VW5kZWZpbmVkIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9jb25z
dGFudFVuZGVmaW5lZCkgewotICAgICAgICAgICAgICAgIEpTVmFsdWUgdGVzdE1lID0gbV9jb2Rl
QmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbV9jb25zdGFu
dFVuZGVmaW5lZCk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RNZS5pc1VuZGVmaW5lZCgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50VW5kZWZp
bmVkKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHVuZGVmaW5lZCB0byB0
aGUgQ29kZUJsb2NrJ3MgY29uc3RhbnRzLCBhbmQgYWRkIGEgY29ycmVzcG9uZGluZyBzbG90IGlu
IG1fY29uc3RhbnRzLgotICAgICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBu
dW1iZXJPZkNvbnN0YW50cyk7Ci0gICAgICAgICAgICBhZGRDb25zdGFudChqc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtX2NvbnN0
YW50VW5kZWZpbmVkIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNv
bnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIHZhbHVlICd1bmRlZmluZWQnLgotICAgICAgICBBU1NF
UlQobV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsg
bV9jb25zdGFudFVuZGVmaW5lZCkuaXNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZXRK
U0NvbnN0YW50KG1fY29uc3RhbnRVbmRlZmluZWQpOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0
aG9kIHJldHVybnMgYSBKU0NvbnN0YW50IHdpdGggdGhlIHZhbHVlICdudWxsJy4KLSAgICBOb2Rl
KiBjb25zdGFudE51bGwoKQotICAgIHsKLSAgICAgICAgLy8gSGFzIG1fY29uc3RhbnROdWxsIGJl
ZW4gc2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnROdWxsID09IFVJTlRfTUFYKSB7
Ci0gICAgICAgICAgICAvLyBTZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIG51bGwsIGlmIHdl
IGZpbmQgaXQsIHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkNvbnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCk7Ci0gICAgICAgICAgICBmb3IgKG1fY29uc3RhbnROdWxsID0gMDsgbV9jb25zdGFudE51bGwg
PCBudW1iZXJPZkNvbnN0YW50czsgKyttX2NvbnN0YW50TnVsbCkgewotICAgICAgICAgICAgICAg
IEpTVmFsdWUgdGVzdE1lID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4ICsgbV9jb25zdGFudE51bGwpOwotICAgICAgICAgICAgICAgIGlmICh0ZXN0
TWUuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1f
Y29uc3RhbnROdWxsKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIG51bGwg
dG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50cywgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2xv
dCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkg
PT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAgICAgICAgICAgYWRkQ29uc3RhbnQoanNOdWxsKCkp
OwotICAgICAgICAgICAgbV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50UmVjb3JkKCkpOwotICAg
ICAgICAgICAgQVNTRVJUKG1fY29uc3RhbnRzLnNpemUoKSA9PSBtX2NvZGVCbG9jay0+bnVtYmVy
T2ZDb25zdGFudFJlZ2lzdGVycygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIG1fY29uc3Rh
bnROdWxsIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50
IHBvb2wgdGhhdCBoYXMgdGhlIHZhbHVlICdudWxsJy4KLSAgICAgICAgQVNTRVJUKG1fY29kZUJs
b2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnRO
dWxsKS5pc051bGwoKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnRO
dWxsKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCByZXR1cm5zIGEgRG91YmxlQ29uc3Rh
bnQgd2l0aCB0aGUgdmFsdWUgMS4KLSAgICBOb2RlKiBvbmUoKQotICAgIHsKLSAgICAgICAgLy8g
SGFzIG1fY29uc3RhbnQxIGJlZW4gc2V0IHVwIHlldD8KLSAgICAgICAgaWYgKG1fY29uc3RhbnQx
ID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAvLyBTZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wg
Zm9yIHRoZSB2YWx1ZSAxLCBpZiB3ZSBmaW5kIGl0LCB3ZSBjYW4ganVzdCByZXVzZSB0aGlzIQot
ICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDb25zdGFudHMgPSBtX2NvZGVCbG9jay0+bnVt
YmVyT2ZDb25zdGFudFJlZ2lzdGVycygpOwotICAgICAgICAgICAgZm9yIChtX2NvbnN0YW50MSA9
IDA7IG1fY29uc3RhbnQxIDwgbnVtYmVyT2ZDb25zdGFudHM7ICsrbV9jb25zdGFudDEpIHsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHRlc3RNZSA9IG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChG
aXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKTsKLSAgICAgICAgICAgICAg
ICBpZiAodGVzdE1lLmlzSW50MzIoKSAmJiB0ZXN0TWUuYXNJbnQzMigpID09IDEpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQxKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSAxIHRvIHRoZSBDb2RlQmxvY2sn
cyBjb25zdGFudHMsIGFuZCBhZGQgYSBjb3JyZXNwb25kaW5nIHNsb3QgaW4gbV9jb25zdGFudHMu
Ci0gICAgICAgICAgICBBU1NFUlQobV9jb25zdGFudHMuc2l6ZSgpID09IG51bWJlck9mQ29uc3Rh
bnRzKTsKLSAgICAgICAgICAgIGFkZENvbnN0YW50KGpzTnVtYmVyKDEpKTsKLSAgICAgICAgICAg
IG1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChtX2NvbnN0YW50cy5zaXplKCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdp
c3RlcnMoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBtX2NvbnN0YW50MSBtdXN0IHJlZmVy
IHRvIGFuIGVudHJ5IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sIHRoYXQgaGFzIHRo
ZSBpbnRlZ2VyIHZhbHVlIDEuCi0gICAgICAgIEFTU0VSVChtX2NvZGVCbG9jay0+Z2V0Q29uc3Rh
bnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXggKyBtX2NvbnN0YW50MSkuaXNJbnQzMigpKTsK
LSAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIG1fY29uc3RhbnQxKS5hc0ludDMyKCkgPT0gMSk7Ci0gICAgICAgIHJldHVy
biBnZXRKU0NvbnN0YW50KG1fY29uc3RhbnQxKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gVGhpcyBt
ZXRob2QgcmV0dXJucyBhIERvdWJsZUNvbnN0YW50IHdpdGggdGhlIHZhbHVlIE5hTi4KLSAgICBO
b2RlKiBjb25zdGFudE5hTigpCi0gICAgewotICAgICAgICBKU1ZhbHVlIG5hbiA9IGpzTmFOKCk7
Ci0gICAgICAgIAotICAgICAgICAvLyBIYXMgbV9jb25zdGFudE5hTiBiZWVuIHNldCB1cCB5ZXQ/
Ci0gICAgICAgIGlmIChtX2NvbnN0YW50TmFOID09IFVJTlRfTUFYKSB7Ci0gICAgICAgICAgICAv
LyBTZWFyY2ggdGhlIGNvbnN0YW50IHBvb2wgZm9yIHRoZSB2YWx1ZSBOYU4sIGlmIHdlIGZpbmQg
aXQsIHdlIGNhbiBqdXN0IHJldXNlIHRoaXMhCi0gICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJP
ZkNvbnN0YW50cyA9IG1fY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7Ci0g
ICAgICAgICAgICBmb3IgKG1fY29uc3RhbnROYU4gPSAwOyBtX2NvbnN0YW50TmFOIDwgbnVtYmVy
T2ZDb25zdGFudHM7ICsrbV9jb25zdGFudE5hTikgewotICAgICAgICAgICAgICAgIEpTVmFsdWUg
dGVzdE1lID0gbV9jb2RlQmxvY2stPmdldENvbnN0YW50KEZpcnN0Q29uc3RhbnRSZWdpc3Rlcklu
ZGV4ICsgbV9jb25zdGFudE5hTik7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWU6OmVuY29k
ZSh0ZXN0TWUpID09IEpTVmFsdWU6OmVuY29kZShuYW4pKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZ2V0SlNDb25zdGFudChtX2NvbnN0YW50TmFOKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSBuYW4gdG8gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50
cywgYW5kIGFkZCBhIGNvcnJlc3BvbmRpbmcgc2xvdCBpbiBtX2NvbnN0YW50cy4KLSAgICAgICAg
ICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXplKCkgPT0gbnVtYmVyT2ZDb25zdGFudHMpOwotICAg
ICAgICAgICAgYWRkQ29uc3RhbnQobmFuKTsKLSAgICAgICAgICAgIG1fY29uc3RhbnRzLmFwcGVu
ZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2NvbnN0YW50cy5zaXpl
KCkgPT0gbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBtX2NvbnN0YW50TmFOIG11c3QgcmVmZXIgdG8gYW4gZW50cnkgaW4g
dGhlIENvZGVCbG9jaydzIGNvbnN0YW50IHBvb2wgdGhhdCBoYXMgdGhlIHZhbHVlIG5hbi4KLSAg
ICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5nZXRDb25zdGFudChGaXJzdENvbnN0YW50UmVnaXN0
ZXJJbmRleCArIG1fY29uc3RhbnROYU4pLmlzRG91YmxlKCkpOwotICAgICAgICBBU1NFUlQoc3Rk
Ojppc25hbihtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXggKyBtX2NvbnN0YW50TmFOKS5hc0RvdWJsZSgpKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0Nv
bnN0YW50KG1fY29uc3RhbnROYU4pOwotICAgIH0KLSAgICAKLSAgICBOb2RlKiBjZWxsQ29uc3Rh
bnQoSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj46
OkFkZFJlc3VsdCByZXN1bHQgPSBtX2NlbGxDb25zdGFudE5vZGVzLmFkZChjZWxsLCBudWxscHRy
KTsKLSAgICAgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgICAgICBBU1NFUlQo
IUhlYXA6OmlzWm9tYmlmaWVkKGNlbGwpKTsKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBhZGRUb0dyYXBoKFdlYWtKU0NvbnN0YW50LCBPcEluZm8oY2VsbCkpOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICB9Ci0gICAgCi0gICAgTm9kZSogaW5mZXJyZWRDb25zdGFudChKU1ZhbHVlIHZhbHVlKQotICAg
IHsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuIGNlbGxD
b25zdGFudCh2YWx1ZS5hc0NlbGwoKSk7Ci0gICAgICAgIHJldHVybiBnZXRKU0NvbnN0YW50Rm9y
VmFsdWUodmFsdWUpOwotICAgIH0KLSAgICAKICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSgpCiAgICAgewogICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxp
bmVDYWxsRnJhbWU7CkBAIC04MzEsMTQgKzY2MCwxNCBAQCBwcml2YXRlOgogICAgIAogICAgIE5v
ZGUqIGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhKU0NlbGwqIG9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBOb2RlKiBvYmplY3ROb2RlID0gY2VsbENv
bnN0YW50KG9iamVjdCk7CisgICAgICAgIE5vZGUqIG9iamVjdE5vZGUgPSB3ZWFrSlNDb25zdGFu
dChvYmplY3QpOwogICAgICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSksIG9iamVjdE5vZGUpOwogICAgICAgICBy
ZXR1cm4gb2JqZWN0Tm9kZTsKICAgICB9CiAgICAgCiAgICAgTm9kZSogY2VsbENvbnN0YW50V2l0
aFN0cnVjdHVyZUNoZWNrKEpTQ2VsbCogb2JqZWN0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNl
bGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhvYmplY3QsIG9iamVjdC0+c3RydWN0dXJlKCkp
OworICAgICAgICByZXR1cm4gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKG9iamVjdCwg
bV9ncmFwaC5mcmVlemUob2JqZWN0KS0+c3RydWN0dXJlKCkpOwogICAgIH0KIAogICAgIFNwZWN1
bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQpAQCAtOTk3LDM2ICs4MjYsMTEgQEAgcHJpdmF0ZToKICAgICAvLyBUaGUgYnl0ZWNvZGUg
aW5kZXggb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgogICAgIHVu
c2lnbmVkIG1fY3VycmVudEluZGV4OwogCi0gICAgLy8gV2UgdXNlIHRoZXNlIHZhbHVlcyBkdXJp
bmcgY29kZSBnZW5lcmF0aW9uLCBhbmQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCi0gICAgLy8gc3Bl
Y2lhbCBoYW5kbGluZyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50
cyBpbiB0aGUKLSAgICAvLyBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sLiBUaGVzZSB2YXJpYWJs
ZXMgYXJlIGluaXRpYWxpemVkIHRvCi0gICAgLy8gVUlOVF9NQVgsIGFuZCBsYXppbHkgdXBkYXRl
ZCB0byBob2xkIGFuIGluZGV4IGludG8gdGhlIENvZGVCbG9jaydzCi0gICAgLy8gY29uc3RhbnQg
cG9vbCwgYXMgbmVjZXNzYXJ5LgotICAgIHVuc2lnbmVkIG1fY29uc3RhbnRVbmRlZmluZWQ7Ci0g
ICAgdW5zaWduZWQgbV9jb25zdGFudE51bGw7Ci0gICAgdW5zaWduZWQgbV9jb25zdGFudE5hTjsK
LSAgICB1bnNpZ25lZCBtX2NvbnN0YW50MTsKLSAgICBIYXNoTWFwPEpTQ2VsbCosIHVuc2lnbmVk
PiBtX2NlbGxDb25zdGFudHM7Ci0gICAgSGFzaE1hcDxKU0NlbGwqLCBOb2RlKj4gbV9jZWxsQ29u
c3RhbnROb2RlczsKLQotICAgIC8vIEEgY29uc3RhbnQgaW4gdGhlIGNvbnN0YW50IHBvb2wgbWF5
IGJlIHJlcHJlc2VudGVkIGJ5IG1vcmUgdGhhbiBvbmUKLSAgICAvLyBub2RlIGluIHRoZSBncmFw
aCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIGJlaW5nIHVzZWQuCi0g
ICAgc3RydWN0IENvbnN0YW50UmVjb3JkIHsKLSAgICAgICAgQ29uc3RhbnRSZWNvcmQoKQotICAg
ICAgICAgICAgOiBhc0ludDMyKDApCi0gICAgICAgICAgICAsIGFzTnVtZXJpYygwKQotICAgICAg
ICAgICAgLCBhc0pTVmFsdWUoMCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgTm9k
ZSogYXNJbnQzMjsKLSAgICAgICAgTm9kZSogYXNOdW1lcmljOwotICAgICAgICBOb2RlKiBhc0pT
VmFsdWU7Ci0gICAgfTsKLQotICAgIC8vIFRyYWNrIHRoZSBpbmRleCBvZiB0aGUgbm9kZSB3aG9z
ZSByZXN1bHQgaXMgdGhlIGN1cnJlbnQgdmFsdWUgZm9yIGV2ZXJ5Ci0gICAgLy8gcmVnaXN0ZXIg
dmFsdWUgaW4gdGhlIGJ5dGVjb2RlIC0gYXJndW1lbnQsIGxvY2FsLCBhbmQgdGVtcG9yYXJ5Lgot
ICAgIFZlY3RvcjxDb25zdGFudFJlY29yZCwgMTY+IG1fY29uc3RhbnRzOworICAgIEZyb3plblZh
bHVlKiBtX2NvbnN0YW50VW5kZWZpbmVkOworICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVs
bDsKKyAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE5hTjsKKyAgICBGcm96ZW5WYWx1ZSogbV9j
b25zdGFudE9uZTsKKyAgICBWZWN0b3I8Tm9kZSosIDE2PiBtX2NvbnN0YW50czsKIAogICAgIC8v
IFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCiAgICAgdW5z
aWduZWQgbV9udW1Bcmd1bWVudHM7CkBAIC0xMDYxLDcgKzg2NSw2IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vICh0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCB3aGljaCBpcyB0aGUgdHJhbnNpdGl2ZSwg
dGhvdWdoIG5vdCBuZWNlc3NhcmlseQogICAgICAgICAvLyBkaXJlY3QsIGNhbGxlcikuCiAgICAg
ICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9pZGVudGlmaWVyUmVtYXA7Ci0gICAgICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9jb25zdGFudFJlbWFwOwogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29u
c3RhbnRCdWZmZXJSZW1hcDsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX3N3aXRjaFJlbWFw
OwogICAgICAgICAKQEAgLTExMzIsMTEgKzkzNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoIW1faW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYW5kOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAob3BlcmFuZC5pc0NvbnN0YW50KCkpIHsKLSAg
ICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0ID0gVmlydHVhbFJlZ2lzdGVyKG1f
Y29uc3RhbnRSZW1hcFtvcGVyYW5kLnRvQ29uc3RhbnRJbmRleCgpXSk7Ci0gICAgICAgICAgICAg
ICAgQVNTRVJUKHJlc3VsdC5pc0NvbnN0YW50KCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBBU1NFUlQoIW9wZXJhbmQuaXNDb25z
dGFudCgpKTsKIAogICAgICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kLm9m
ZnNldCgpICsgbV9pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0KTsKICAgICAgICAgfQpAQCAt
MTE3MCwxMSArOTY5LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGF2ZUJ1aWx0T3BlcmFuZE1h
cHM7CiAgICAgLy8gTWFwcGluZyBiZXR3ZWVuIGlkZW50aWZpZXIgbmFtZXMgYW5kIG51bWJlcnMu
CiAgICAgQm9ycm93ZWRJZGVudGlmaWVyTWFwIG1faWRlbnRpZmllck1hcDsKLSAgICAvLyBNYXBw
aW5nIGJldHdlZW4gdmFsdWVzIGFuZCBjb25zdGFudCBudW1iZXJzLgotICAgIEpTVmFsdWVNYXAg
bV9qc1ZhbHVlTWFwOwotICAgIC8vIEluZGV4IG9mIHRoZSBlbXB0eSB2YWx1ZSwgb3IgVUlOVF9N
QVggaWYgdGhlcmUgaXMgbm8gbWFwcGluZy4gVGhpcyBpcyBhIGhvcnJpYmxlCi0gICAgLy8gd29y
ay1hcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5
IiB2YWx1ZXMuCi0gICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsKICAgICAKICAgICBD
b2RlQmxvY2sqIG1fZGZnQ29kZUJsb2NrOwogICAgIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFw
IG1fY2FsbENvbnRleHRNYXA7CkBAIC0xMjIyLDEwICsxMDE2LDggQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbCgKICAgICBBU1NFUlQocmVnaXN0ZXJPZmZzZXQgPD0gMCk7CiAgICAg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVDYWxsRnJh
bWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKLSAgICBpZiAobV9ncmFwaC5p
c0NvbnN0YW50KGNhbGxUYXJnZXQpKSB7Ci0gICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExp
bmtTdGF0dXMoCi0gICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJn
ZXQpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKLSAgICB9CisgICAgaWYgKGNhbGxUYXJnZXQtPmhhc0Nv
bnN0YW50KCkpCisgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXMoY2FsbFRh
cmdldC0+YXNKU1ZhbHVlKCkpLnNldElzUHJvdmVkKHRydWUpOwogICAgIAogICAgIGlmICghY2Fs
bExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25m
bGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVk
IHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKQEAgLTEyOTYsNyArMTA4OCw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcygKICAgICBBU1NFUlQoY2FsbExpbmtT
dGF0dXMuY2FuT3B0aW1pemUoKSk7CiAgICAgCiAgICAgaWYgKEpTRnVuY3Rpb24qIGZ1bmN0aW9u
ID0gY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSkKLSAgICAgICAgYWRkVG9HcmFwaChDaGVja0Z1
bmN0aW9uLCBPcEluZm8oZnVuY3Rpb24pLCBjYWxsVGFyZ2V0LCB0aGlzQXJndW1lbnQpOworICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShmdW5j
dGlvbikpLCBjYWxsVGFyZ2V0LCB0aGlzQXJndW1lbnQpOwogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlQoY2FsbExpbmtTdGF0dXMuc3RydWN0dXJlKCkpOwogICAgICAgICBBU1NFUlQoY2FsbExp
bmtTdGF0dXMuZXhlY3V0YWJsZSgpKTsKQEAgLTE0NTMsNiArMTI0NSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUKICAgICBtX2dyYXBoLm1faW5saW5lVmFyaWFi
bGVEYXRhLmFwcGVuZChpbmxpbmVWYXJpYWJsZURhdGEpOwogICAgIAogICAgIHBhcnNlQ29kZUJs
b2NrKCk7CisgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOyAvLyBSZXNldCBvdXIgc3RhdGUgbm93
IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4KICAgICAKICAgICBtX2N1cnJlbnRJ
bmRleCA9IG9sZEluZGV4OwogICAgIApAQCAtMTU0Miw3ICsxMzM1LDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZQogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
TWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0
LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5taW4oKQotICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBjb25zdGFudE5hTigpKTsKKyAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcElu
Zm8obV9jb25zdGFudE5hTikpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAK
QEAgLTE1NjcsNyArMTM2MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
YyhpbnQKICAgICBzd2l0Y2ggKGludHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7
CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgu
YWJzKCkKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGNv
bnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTE1OTEsNyArMTM4NCw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQKICAgICBjYXNlIENvc0lu
dHJpbnNpYzoKICAgICBjYXNlIFNpbkludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgewotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnROYU4oKSk7CisgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyht
X2NvbnN0YW50TmFOKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0xNzM4LDE5ICsxNTMxLDE5IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhpbnQKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgREZHVHJ1ZUludHJpbnNp
YzogewotICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXRKU0Nv
bnN0YW50Rm9yVmFsdWUoanNCb29sZWFuKHRydWUpKSk7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0T3BlcmFuZCksIGpzQ29uc3RhbnQoanNCb29sZWFuKHRydWUpKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBPU1JFeGl0SW50cmlu
c2ljOiB7CiAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgY29uc3RhbnRVbmRlZmluZWQoKSk7CisgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25z
dGFudCwgT3BJbmZvKG1fY29uc3RhbnRVbmRlZmluZWQpKSk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBJc0ZpbmFsVGllckludHJpbnNpYzogewogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLAotICAgICAgICAgICAgZ2V0
SlNDb25zdGFudEZvclZhbHVlKGpzQm9vbGVhbihPcHRpb25zOjp1c2VGVExKSVQoKSA/IGlzRlRM
KG1fZ3JhcGgubV9wbGFuLm1vZGUpIDogdHJ1ZSkpKTsKKyAgICAgICAgICAgIGpzQ29uc3RhbnQo
anNCb29sZWFuKE9wdGlvbnM6OnVzZUZUTEpJVCgpID8gaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9k
ZSkgOiB0cnVlKSkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgICAgIApAQCAt
MTg0NSw3ICsxNjM4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRl
cgogICAgICAgICBOb2RlKiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPD0gMSkKLSAgICAgICAgICAgIHJlc3VsdCA9IGNlbGxDb25zdGFu
dChtX3ZtLT5zbWFsbFN0cmluZ3MuZW1wdHlTdHJpbmcoKSk7CisgICAgICAgICAgICByZXN1bHQg
PSBqc0NvbnN0YW50KG1fdm0tPnNtYWxsU3RyaW5ncy5lbXB0eVN0cmluZygpKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChUb1N0cmluZywgZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSkpOwogICAgICAgICAKQEAg
LTE5ODYsNyArMTc3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAg
ICAgCiAgICAgTm9kZSogbG9hZGVkVmFsdWU7CiAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IGNlbGxDb25zdGFudCh2YXJpYW50LnNwZWNpZmlj
VmFsdWUoKS5hc0NlbGwoKSk7CisgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICBsb2FkZWRWYWx1
ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAogICAgICAgICAgICAgcHJlZGljdGlvbiwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKQEAgLTIxNjAsOSArMTk1Myw3IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OnByZXBhcmVUb1BhcnNlQmxvY2soKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NvbnN0YW50cy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9jb25zdGFudHNbaV0gPSBDb25zdGFu
dFJlY29yZCgpOwotICAgIG1fY2VsbENvbnN0YW50Tm9kZXMuY2xlYXIoKTsKKyAgICBtX2NvbnN0
YW50cy5yZXNpemUoMCk7CiB9CiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29s
IHNraXBUb3AsIHVuc2lnbmVkIHNraXBDb3VudCkKQEAgLTIxOTQsOCArMTk4NSw3IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCiAgICAgICAgICAg
ICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpLCBtX2NvZGVCbG9jay0+
aXNDYXB0dXJlZCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChhcmd1bWVudCkpKTsKICAgICAg
ICAgICAgIHZhcmlhYmxlLT5tZXJnZVN0cnVjdHVyZUNoZWNrSG9pc3RpbmdGYWlsZWQoCi0gICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpCi0gICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGVX
YXRjaHBvaW50KSk7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICAgICAgICAgICAg
IHZhcmlhYmxlLT5tZXJnZUNoZWNrQXJyYXlIb2lzdGluZ0ZhaWxlZCgKICAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudElu
ZGV4LCBCYWRJbmRleGluZ1R5cGUpKTsKICAgICAgICAgICAgIApAQCAtMjI0MSwxMyArMjAzMSwx
NSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAg
Ly8gPT09IEZ1bmN0aW9uIGVudHJ5IG9wY29kZXMgPT09CiAKLSAgICAgICAgY2FzZSBvcF9lbnRl
cjoKKyAgICAgICAgY2FzZSBvcF9lbnRlcjogeworICAgICAgICAgICAgTm9kZSogdW5kZWZpbmVk
ID0gYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudFVuZGVmaW5lZCkpOwog
ICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBhbGwgbG9jYWxzIHRvIHVuZGVmaW5lZC4KICAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2st
Pm1fbnVtVmFyczsgKytpKQotICAgICAgICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChpKSwgY29uc3RhbnRVbmRlZmluZWQoKSwgSW1tZWRpYXRlTmFrZWRTZXQpOworICAgICAg
ICAgICAgICAgIHNldCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKSwgdW5kZWZpbmVkLCBJbW1l
ZGlhdGVOYWtlZFNldCk7CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2Rl
QmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpID09IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAg
ICAgICAgICAgc2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDApLCBjb25zdGFudFVuZGVm
aW5lZCgpLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgICAgICAgICAgc2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDApLCB1bmRlZmluZWQsIEltbWVkaWF0ZU5ha2VkU2V0KTsKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKKyAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CiAgICAgICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25j
ZS5pc1N0aWxsVmFsaWQoKSkKQEAgLTIyNjIsNyArMjA1NCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICAgICAgfHwgY2FjaGVkU3Ry
dWN0dXJlLT5jbGFzc0luZm8oKS0+bWV0aG9kVGFibGUudG9UaGlzICE9IEpTT2JqZWN0OjppbmZv
KCktPm1ldGhvZFRhYmxlLnRvVGhpcwogICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4
KQogICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkKLSAgICAgICAgICAgICAgICAg
ICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50KQogICAgICAgICAgICAgICAgICAgICB8fCAob3Ax
LT5vcCgpID09IEdldExvY2FsICYmIG9wMS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnN0cnVjdHVy
ZUNoZWNrSG9pc3RpbmdGYWlsZWQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0VGhpcyhh
ZGRUb0dyYXBoKFRvVGhpcywgb3AxKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTIy
NzksMTMgKzIwNzAsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICBpbnQgY2FsbGVlT3BlcmFuZCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBOb2RlKiBjYWxsZWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGNhbGxlZU9wZXJhbmQpKTsKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUVtaXR0ZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIGlmIChjYWxsZWUtPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpIHsKLSAg
ICAgICAgICAgICAgICBKU0NlbGwqIGNlbGwgPSBjYWxsZWUtPndlYWtDb25zdGFudCgpOwotICAg
ICAgICAgICAgICAgIEFTU0VSVChjZWxsLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2VsbCk7CisgICAgICAgICAgICBpZiAoSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBjYWxsZWUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNGdW5jdGlvbio+KCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmdW5jdGlvbi0+YWxs
b2NhdGlvblN0cnVjdHVyZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQWxs
b2NhdGlvblByb2ZpbGVXYXRjaHBvaW50LCBPcEluZm8oZnVuY3Rpb24pKTsKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQsIE9wSW5mbyht
X2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGNh
bGxlZSBpcyBzdGlsbCBsaXZlIHVwIHRvIHRoaXMgcG9pbnQuCiAgICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbGVlKTsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFw
aChOZXdPYmplY3QsIE9wSW5mbyhzdHJ1Y3R1cmUpKSk7CkBAIC0yMzU3LDEwICsyMTQ0LDExIEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAg
ICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRGdW5jdGlvbikpIHsKICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KEpTU3RhY2s6OkNhbGxlZSkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNhY2hlZEZ1bmN0aW9uKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2FjaGVkRnVuY3Rpb24tPmluaGVyaXRzKEpTRnVuY3Rp
b246OmluZm8oKSkpOwogICAgICAgICAgICAgICAgIE5vZGUqIGFjdHVhbENhbGxlZSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChDaGVja0Z1bmN0aW9uLCBPcEluZm8oY2FjaGVkRnVuY3Rpb24pLCBhY3R1YWxDYWxsZWUp
OwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoV2Vha0pTQ29uc3RhbnQsIE9wSW5mbyhjYWNoZWRG
dW5jdGlvbikpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrRnVuY3Rpb24sIE9w
SW5mbyhmcm96ZW4pLCBhY3R1YWxDYWxsZWUpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSlND
b25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2dldF9jYWxsZWUpOwogICAgICAgICB9CkBAIC0yNDI0LDcgKzIyMTIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBp
bnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIo
c3JjRHN0KTsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rl
cik7Ci0gICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRU
b0dyYXBoKEFyaXRoQWRkLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0Vmly
dHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoQWRkLCBvcCwgYWRkVG9HcmFw
aChKU0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE9uZSkpKSkpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaW5jKTsKICAgICAgICAgfQogCkBAIC0yNDMyLDcgKzIyMjAsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpbnQgc3Jj
RHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBzcmNEc3RWaXJ0dWFsUmVnaXN0ZXIgPSBWaXJ0dWFsUmVnaXN0ZXIoc3JjRHN0
KTsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KHNyY0RzdFZpcnR1YWxSZWdpc3Rlcik7Ci0g
ICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJlZ2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBo
KEFyaXRoU3ViLCBvcCwgb25lKCkpKSk7CisgICAgICAgICAgICBzZXQoc3JjRHN0VmlydHVhbFJl
Z2lzdGVyLCBtYWtlU2FmZShhZGRUb0dyYXBoKEFyaXRoU3ViLCBvcCwgYWRkVG9HcmFwaChKU0Nv
bnN0YW50LCBPcEluZm8obV9jb25zdGFudE9uZSkpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfZGVjKTsKICAgICAgICAgfQogCkBAIC0yNjQ5LDcgKzI0MzcsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgY2FzZSBvcF9lcV9udWxs
OiB7CiAgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChDb21wYXJl
RXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKSk7CisgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBo
KENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBPcEluZm8o
bV9jb25zdGFudE51bGwpKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZXFfbnVsbCk7
CiAgICAgICAgIH0KIApAQCAtMjY2OSw3ICsyNDU3LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogCiAgICAgICAgIGNhc2Ugb3BfbmVxX251bGw6IHsKICAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKExvZ2ljYWxOb3QsIGFkZFRv
R3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBjb25zdGFudE51bGwoKSkpKTsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoTG9naWNhbE5vdCwgYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFudCwg
dmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkpKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9uZXFfbnVsbCk7CiAgICAgICAgIH0KIApAQCAt
Mjc5NCw3ICsyNTgyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICBjYXNlIG9wX2plcV9udWxsOiB7CiAgICAgICAgICAgICB1bnNpZ25lZCByZWxh
dGl2ZU9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpOwotICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChD
b21wYXJlRXFDb25zdGFudCwgdmFsdWUsIGNvbnN0YW50TnVsbCgpKTsKKyAgICAgICAgICAgIE5v
ZGUqIGNvbmRpdGlvbiA9IGFkZFRvR3JhcGgoQ29tcGFyZUVxQ29uc3RhbnQsIHZhbHVlLCBhZGRU
b0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhtX2NvbnN0YW50TnVsbCkpKTsKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoQnJhbmNoLCBPcEluZm8oYnJhbmNoRGF0YShtX2N1cnJlbnRJbmRleCArIHJl
bGF0aXZlT2Zmc2V0LCBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfamVxX251bGwp
KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qZXFfbnVsbCk7CiAg
ICAgICAgIH0KQEAgLTI4MDIsNyArMjU5MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9qbmVxX251bGw6IHsKICAgICAgICAgICAg
IHVuc2lnbmVkIHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICBOb2RlKiBjb25kaXRpb24g
PSBhZGRUb0dyYXBoKENvbXBhcmVFcUNvbnN0YW50LCB2YWx1ZSwgY29uc3RhbnROdWxsKCkpOwor
ICAgICAgICAgICAgTm9kZSogY29uZGl0aW9uID0gYWRkVG9HcmFwaChDb21wYXJlRXFDb25zdGFu
dCwgdmFsdWUsIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKG1fY29uc3RhbnROdWxsKSkp
OwogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmFuY2gsIE9wSW5mbyhicmFuY2hEYXRhKG1fY3Vy
cmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9qbmVxX251bGwpLCBtX2N1cnJlbnRJbmRleCAr
IHJlbGF0aXZlT2Zmc2V0KSksIGNvbmRpdGlvbik7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShv
cF9qbmVxX251bGwpOwogICAgICAgICB9CkBAIC0yODkxLDcgKzI2NzksNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
dGFyZ2V0ID0gbV9jdXJyZW50SW5kZXggKyB0YWJsZS5icmFuY2hPZmZzZXRzW2ldOwogICAgICAg
ICAgICAgICAgIGlmICh0YXJnZXQgPT0gZGF0YS5mYWxsVGhyb3VnaC5ieXRlY29kZUluZGV4KCkp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGRhdGEuY2Fz
ZXMuYXBwZW5kKFN3aXRjaENhc2U6OndpdGhCeXRlY29kZUluZGV4KGpzTnVtYmVyKHN0YXRpY19j
YXN0PGludDMyX3Q+KHRhYmxlLm1pbiArIGkpKSwgdGFyZ2V0KSk7CisgICAgICAgICAgICAgICAg
ZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZTo6d2l0aEJ5dGVjb2RlSW5kZXgobV9ncmFwaC5m
cmVlemUoanNOdW1iZXIoc3RhdGljX2Nhc3Q8aW50MzJfdD4odGFibGUubWluICsgaSkpKSwgdGFy
Z2V0KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmbHVzaElmVGVybWluYWwoZGF0YSk7
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZkYXRhKSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOwpAQCAtMzA0Miw3
ICsyODMwLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgQVNTRVJUKHBvaW50ZXJJc0Z1bmN0aW9uKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
LnNwZWNpYWxQb2ludGVyKSk7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKAogICAgICAgICAgICAg
ICAgIENoZWNrRnVuY3Rpb24sCi0gICAgICAgICAgICAgICAgT3BJbmZvKGFjdHVhbFBvaW50ZXJG
b3IobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2ssIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
LnNwZWNpYWxQb2ludGVyKSksCisgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguZnJlZXpl
KHN0YXRpY19jYXN0PEpTQ2VsbCo+KGFjdHVhbFBvaW50ZXJGb3IoCisgICAgICAgICAgICAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5zcGVjaWFsUG9pbnRlcikpKSksCiAgICAgICAgICAgICAgICAgZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkpOwogICAgICAgICAgICAgYWRkVG9H
cmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2puZXFf
cHRyKSkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfam5lcV9wdHIpOwpAQCAtMzA2MSw3
ICsyODUwLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGNlbGxDb25zdGFudChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtK
U0NvbnN0YW50KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgog
ICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewpAQCAt
MzA2OSw3ICsyODU4LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgICAgIGlmIChhY3RpdmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICYm
IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxs
VmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZ1bmN0aW9uUmVlbnRy
eVdhdGNocG9pbnQsIE9wSW5mbyhhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgY2VsbENvbnN0YW50KGFjdGl2
YXRpb24pKTsKKyAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3
ZWFrSlNDb25zdGFudChhY3RpdmF0aW9uKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksCkBAIC0zMTE4LDcgKzI5MDcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdpdGhT
dHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5vbmx5
U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZp
cnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBzcGVj
aWZpY1ZhbHVlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBjZWxsQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5h
c0NlbGwoKSkpOworICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
IHdlYWtKU0NvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFu
ZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFu
ZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzEzNyw3ICsyOTI2LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFZhcmlhYmxlV2F0Y2hw
b2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIGluZmVycmVkQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOworICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lm
aWNWYWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgY2FzZSBDbG9zdXJlVmFyOgpAQCAtMzE1Myw3ICsyOTQyLDcgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KEpTVmFsdWUgdmFsdWUgPSB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIHNjb3BlTm9kZSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9pbnQs
IE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBpbmZlcnJlZENvbnN0YW50KHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25z
dGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMjU0LDcgKzMw
NDMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6IHsKLSAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGdldEpTQ29uc3RhbnRGb3JWYWx1ZShKU1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGpzQ29uc3Rh
bnQoSlNWYWx1ZSgpKSk7CiAgICAgICAgICAgICBBU1NFUlQob3BlcmFuZElzTG9jYWwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2xhenlW
YXJzLnNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCku
dG9Mb2NhbCgpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luaXRfbGF6eV9yZWcpOwpA
QCAtMzQwOSwxMyArMzE5OCw2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmJ1aWxkT3BlcmFuZE1h
cHNJZk4KICAgICAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgbV9pZGVudGlmaWVyTWFwLmFkZChtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihpKS5pbXBsKCksIGkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9jb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7Ci0g
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2NvZGVCbG9jay0+Z2V0Q29uc3RhbnQoaSArIEZpcnN0
Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAgICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgICAg
IG1fZW1wdHlKU1ZhbHVlSW5kZXggPSBpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fanNWYWx1ZU1hcC5hZGQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhbHVlKSwgaSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICB9CiAgICAgCiAg
ICAgbV9oYXZlQnVpbHRPcGVyYW5kTWFwcyA9IHRydWU7CiB9CkBAIC0zNTEzLDcgKzMyOTUsNiBA
QCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgIGJ5dGVD
b2RlUGFyc2VyLT5idWlsZE9wZXJhbmRNYXBzSWZOZWNlc3NhcnkoKTsKICAgICAgICAgCiAgICAg
ICAgIG1faWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmll
cnMoKSk7Ci0gICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJP
ZkNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVz
aXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dp
dGNoUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkpOwog
CkBAIC0zNTI0LDI0ICszMzA1LDYgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZQogICAgICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLmlkZW50aWZp
ZXJzKCkuYWRkTGF6aWx5KHJlcCk7CiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKSB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gY29kZUJsb2NrLT5nZXRDb25zdGFudChpICsg
Rmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkgewot
ICAgICAgICAgICAgICAgIGlmIChieXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRleCA9
PSBVSU5UX01BWCkgewotICAgICAgICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9lbXB0
eUpTVmFsdWVJbmRleCA9IGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZDb25z
dGFudFJlZ2lzdGVycygpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXg7Ci0gICAgICAgICAg
ICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5hZGRDb25zdGFudChKU1ZhbHVlKCkpOwotICAgICAg
ICAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb25zdGFudHMuYXBwZW5kKENvbnN0YW50
UmVjb3JkKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX2NvbnN0YW50
UmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9lbXB0eUpTVmFsdWVJbmRleDsKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEpTVmFsdWVNYXA6
OkFkZFJlc3VsdCByZXN1bHQgPSBieXRlQ29kZVBhcnNlci0+bV9qc1ZhbHVlTWFwLmFkZChKU1Zh
bHVlOjplbmNvZGUodmFsdWUpLCBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRSZWdpc3RlcnMoKSArIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KTsKLSAgICAg
ICAgICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAgICAgICAgIGJ5dGVDb2Rl
UGFyc2VyLT5hZGRDb25zdGFudCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29uc3RhbnRzLmFwcGVuZChDb25zdGFudFJlY29yZCgpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IHJlc3VsdC5pdGVyYXRvci0+dmFsdWU7
Ci0gICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+
bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKTsgKytpKSB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBp
bmxpbmUgdGhlIHNhbWUgY29kZSBibG9jayBtdWx0aXBsZSB0aW1lcywgd2UgZG9uJ3Qgd2FudCB0
byBuZWVkbGVzc2x5CiAgICAgICAgICAgICAvLyBkdXBsaWNhdGUgaXRzIGNvbnN0YW50IGJ1ZmZl
cnMuCkBAIC0zNTcyLDEzICszMzM1LDEwIEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0Vu
dHJ5OjpJbmxpbmUKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUgPSAwOwogCiAgICAgICAgIG1f
aWRlbnRpZmllclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mSWRlbnRpZmllcnMoKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0
YW50UmVnaXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNv
ZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dpdGNoUmVt
YXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZTd2l0Y2hKdW1wVGFibGVzKCkpOwogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygp
OyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9IGk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVnaXN0ZXJz
KCk7ICsraSkKLSAgICAgICAgICAgIG1fY29uc3RhbnRSZW1hcFtpXSA9IGkgKyBGaXJzdENvbnN0
YW50UmVnaXN0ZXJJbmRleDsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2RlQmxv
Y2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1fY29uc3Rh
bnRCdWZmZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQpAQCAtMzU4NiwxNCArMzM0
NiwxMyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAg
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvbnN0YW50UmVtYXAuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIEFTU0VSVChtX2NvbnN0YW50UmVtYXBbaV0gPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSk7Ci0gICAgCiAgICAgYnl0ZUNvZGVQYXJzZXIt
Pm1faW5saW5lU3RhY2tUb3AgPSB0aGlzOwogfQogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUNvZGVCbG9jaygpCiB7CisgICAgcHJlcGFyZVRvUGFyc2VCbG9jaygpOworICAgIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2s7CiAgICAg
CiAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgLy8gU3dpdGNo
IG9uIGNvbnN0YW50IC0+IGpldHRpc29uIGFsbCBvdGhlciB0YXJnZXRzIGFuZCBtZXJnZS4KICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPmNoaWxkMSgpLT5oYXNDb25zdGFu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52
YWx1ZU9mSlNDb25zdGFudChibG9jay0+bGFzdCgpLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlID0gYmxvY2stPmxhc3QoKS0+Y2hp
bGQxKCktPmNvbnN0YW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBUcmlTdGF0ZSBmb3Vu
ZCA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiB0
YXJnZXRCbG9jayA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBkYXRhLT5jYXNlcy5zaXplKCk7IGZvdW5kID09IEZhbHNlVHJpU3RhdGUgJiYgaS0tOykgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9u
IDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjgsMjIgKzE2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAob3RoZXJOb2RlLT5vcCgpICE9IG5vZGUtPm9wKCkpCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChvdGhlck5vZGUtPmNvbnN0YW50TnVt
YmVyKCkgIT0gbm9kZS0+Y29uc3RhbnROdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmV0dXJuIG90aGVyTm9kZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCi0gICAgTm9kZSogd2Vha0NvbnN0YW50
Q1NFKE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBlbmRJbmRl
eEZvclB1cmVDU0UoKTsgaS0tOykgewotICAgICAgICAgICAgTm9kZSogb3RoZXJOb2RlID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOwotICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+b3AoKSAhPSBX
ZWFrSlNDb25zdGFudCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgaWYgKG90aGVyTm9kZS0+d2Vha0NvbnN0YW50KCkgIT0gbm9kZS0+d2Vha0Nv
bnN0YW50KCkpCisgICAgICAgICAgICBpZiAob3RoZXJOb2RlLT5jb25zdGFudCgpICE9IG5vZGUt
PmNvbnN0YW50KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIHJldHVybiBvdGhlck5vZGU7CkBAIC00MjAsNyArNDA1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgYm9vbCBjaGVja0Z1bmN0aW9uRWxpbWlu
YXRpb24oSlNDZWxsKiBmdW5jdGlvbiwgTm9kZSogY2hpbGQxKQorICAgIGJvb2wgY2hlY2tGdW5j
dGlvbkVsaW1pbmF0aW9uKEZyb3plblZhbHVlKiBmdW5jdGlvbiwgTm9kZSogY2hpbGQxKQogICAg
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gZW5kSW5kZXhGb3JQdXJlQ1NFKCk7IGktLTsp
IHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CkBAIC0x
MjcwLDEzICsxMjU1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNv
bnN0YW50Q1NFKG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9y
ZUVsaW1pbmF0aW9uKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgLy8gRklY
TUU6IGhhdmUgQ1NFIGZvciB3ZWFrIGNvbnN0YW50cyBhZ2FpbnN0IHN0cm9uZyBjb25zdGFudHMg
YW5kIHZpY2UtdmVyc2EuCi0gICAgICAgICAgICBzZXRSZXBsYWNlbWVudCh3ZWFrQ29uc3RhbnRD
U0Uobm9kZSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3Rv
cmVFbGltaW5hdGlvbikKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJ
bnQ1MkNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0
eToKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBIYXJkUGhhbnRvbToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTgsNiAr
OTgsOCBAQCBpbmxpbmUgYm9vbCBlbmFibGVJbnQ1MigpCiAKIGVudW0gTm9SZXN1bHRUYWcgeyBO
b1Jlc3VsdCB9OwogCitlbnVtIFN0cnVjdHVyZVdhdGNocG9pbnRTdGF0ZSB7IEhhdmVOb3RTdGFy
dGVkV2F0Y2hpbmcsIFdhdGNoaW5nQWxsV2F0Y2hhYmxlU3RydWN0dXJlcyB9OworCiBlbnVtIE9w
dGltaXphdGlvbkZpeHBvaW50U3RhdGUgeyBCZWZvcmVGaXhwb2ludCwgRml4cG9pbnROb3RDb252
ZXJnZWQsIEZpeHBvaW50Q29udmVyZ2VkIH07CiAKIC8vIERlc2NyaWJlcyB0aGUgZm9ybSB5b3Ug
Y2FuIGV4cGVjdCB0aGUgZW50aXJlIGdyYXBoIHRvIGJlIGluLgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJl
dmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNyArMTE2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjogewotICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCkgIT0gbm9kZS0+ZnVuY3Rpb24oKSkKKyAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpICE9IG5vZGUtPmZ1bmN0
aW9uKCktPnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICBlbGltaW5hdGVk
ID0gdHJ1ZTsKQEAgLTI3Myw4ICsyNzMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSB8fCBtX3N0YXRlLmRpZENsb2Ji
ZXIoKSB8fCBub2RlLT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShub2RlKS52YWx1ZSgp
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
SW50ZXJlc3RpbmcgZmFjdDogdGhpcyBmcmVlemluZyB0aGF0IHdlIGRvIHJpZ2h0IGhlcmUgbWF5
IHR1cm4gYW4gZnJhZ2lsZSB2YWx1ZSBpbnRvCisgICAgICAgICAgICAvLyBhIHdlYWsgdmFsdWUu
IFNlZSBERkdWYWx1ZVN0cmVuZ3RoLmguCisgICAgICAgICAgICBGcm96ZW5WYWx1ZSogdmFsdWUg
PSBtX2dyYXBoLmZyZWV6ZShtX3N0YXRlLmZvck5vZGUobm9kZSkudmFsdWUoKSk7CisgICAgICAg
ICAgICBpZiAoISp2YWx1ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbWVyZ2luZyB0aGUgYWJzdHJhY3QgdmFsdWUgb2Yg
dGhlIGNvbnN0YW50IGludG8gdGhlIGFic3RyYWN0IHZhbHVlCkBAIC0yODMsNyArMjg2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIC8vIHRoZW4gd2UgcmVmdXNlIHRvIGZvbGQuCiAgICAgICAg
ICAgICBBYnN0cmFjdFZhbHVlIG9sZFZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUpOwogICAg
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSBjb25zdGFudFZhbHVlOwotICAgICAgICAgICAgY29uc3Rh
bnRWYWx1ZS5zZXQobV9ncmFwaCwgdmFsdWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRl
KCkpOworICAgICAgICAgICAgY29uc3RhbnRWYWx1ZS5zZXQobV9ncmFwaCwgKnZhbHVlLCBtX3N0
YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUu
Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKG5vZGUpOwogICAgICAgICAgICAgaWYgKG9sZFZhbHVl
Lm1lcmdlKGNvbnN0YW50VmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzMw
LDcgKzMzMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlLCB2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC00NTMsNyArNDU2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29u
c3RhbnQsIG9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKKyAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
c3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIEpTQ29uc3RhbnQsIG9yaWdpbiwKKyAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjZWxsKSkpOwogICAgICAgICAKICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSlNDb25zdGFudDoK
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFudDoKLSAgICBj
YXNlIFdlYWtKU0NvbnN0YW50OgogICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgY2FzZSBHZXRDYWxs
ZWU6CiAgICAgY2FzZSBHZXRMb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUxLDcgKzg1
MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBFZGdlKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgT3RoZXJVc2UpKTsKICAgICAgICAgICAgICAgICBvYnNlcnZl
VXNlS2luZE9uTm9kZTxPdGhlclVzZT4obm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9XZWFrQ29uc3RhbnQobV9ncmFwaC5nbG9iYWxUaGlzT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Y29udmVydFRvQ29uc3RhbnQoCisgICAgICAgICAgICAgICAgICAgIG5vZGUsIG1fZ3JhcGguZ2xv
YmFsVGhpc09iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTAzNCw4ICsxMDM1LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOiB7CiAgICAg
ICAgICAgICBOb2RlKiBnbG9iYWxPYmplY3ROb2RlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIFdlYWtKU0NvbnN0
YW50LCBub2RlLT5vcmlnaW4sIAotICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSk7CisgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNOb25lLCBKU0NvbnN0YW50LCBub2RlLT5vcmlnaW4sIAorICAgICAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihu
b2RlLT5vcmlnaW4uc2VtYW50aWMpKSkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgcHJv
YmFibHkgc2hvdWxkbid0IGhhdmUgYW4gdW5jb25kaXRpb25hbCBiYXJyaWVyLgogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzEwNAogICAg
ICAgICAgICAgTm9kZSogYmFycmllck5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoCkBAIC0xMDY3LDcg
KzEwNjgsNiBAQCBwcml2YXRlOgogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhl
cmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcg
b3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBKU0NvbnN0
YW50OgotICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgogICAgICAgICBjYXNlIEdldExvY2Fs
OgogICAgICAgICBjYXNlIEdldENhbGxlZToKICAgICAgICAgY2FzZSBGbHVzaDoKQEAgLTExOTMs
OSArMTE5Myw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIWVkZ2UpCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoS25vd25TdHJpbmdVc2Up
OwotICAgICAgICAgICAgaWYgKCFtX2dyYXBoLmlzQ29uc3RhbnQoZWRnZS5ub2RlKCkpKQorICAg
ICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGVkZ2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNT
dHJpbmcqPigpOworICAgICAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4o
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSkuYXNDZWxsKCkpOwogICAgICAg
ICAgICAgaWYgKHN0cmluZy0+bGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICAKQEAgLTE2MTgsMjcgKzE2MTgsMTUgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIE5vZGUqIG9sZE5vZGUgPSBlZGdlLm5vZGUoKTsKICAgICAgICAgCi0gICAgICAgIEFTU0VS
VChvbGROb2RlLT5oYXNDb25zdGFudCgpKTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3Jh
cGgudmFsdWVPZkpTQ29uc3RhbnQob2xkTm9kZSk7CisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBv
bGROb2RlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgaWYgKHZhbHVlLmlzSW50MzIoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoSlNDOjp0
b0ludDMyKHZhbHVlLmFzTnVtYmVyKCkpKTsKICAgICAgICAgQVNTRVJUKHZhbHVlLmlzSW50MzIo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGNvbnN0YW50UmVnaXN0ZXI7Ci0gICAgICAgIGlmICghY29k
ZUJsb2NrKCktPmZpbmRDb25zdGFudCh2YWx1ZSwgY29uc3RhbnRSZWdpc3RlcikpIHsKLSAgICAg
ICAgICAgIGNvbnN0YW50UmVnaXN0ZXIgPSBjb2RlQmxvY2soKS0+YWRkQ29uc3RhbnRMYXppbHko
KTsKLSAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQoCi0g
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ud3JpdGVCYXJyaWVycywKLSAgICAgICAgICAg
ICAgICBjb2RlQmxvY2soKS0+Y29uc3RhbnRzKClbY29uc3RhbnRSZWdpc3Rlcl0sCi0gICAgICAg
ICAgICAgICAgY29kZUJsb2NrKCksCi0gICAgICAgICAgICAgICAgY29uc3RhbnRSZWdpc3RlciwK
LSAgICAgICAgICAgICAgICBjb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
ICAgICAgICAgdmFsdWUpOwotICAgICAgICB9CiAgICAgICAgIGVkZ2Uuc2V0Tm9kZShtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQz
MiwgSlNDb25zdGFudCwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZv
KGNvbnN0YW50UmVnaXN0ZXIpKSk7CisgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUo
dmFsdWUpKSkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHRydW5jYXRlQ29uc3RhbnRzSWZOZWNl
c3NhcnkoTm9kZSogbm9kZSwgQWRkU3BlY3VsYXRpb25Nb2RlIG1vZGUpCkBAIC0xNzQxLDcgKzE3
MjksNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTm9kZSogc2hpZnRBbW91bnQgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNJbnQzMiwgSlNDb25zdGFudCwgbm9kZS0+b3JpZ2luLAotICAgICAgICAgICAgT3BJbmZvKG1f
Z3JhcGguY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KGpzTnVtYmVyKGxvZ0VsZW1lbnRTaXpl
KHR5cGUpKSkpKTsKKyAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShqc051bWJlcihs
b2dFbGVtZW50U2l6ZSh0eXBlKSkpKSk7CiAgICAgICAgIAogICAgICAgICAvLyBXZSBjYW4gdXNl
IGEgQml0TFNoaWZ0IGhlcmUgYmVjYXVzZSB0eXBlZCBhcnJheXMgd2lsbCBuZXZlciBoYXZlIGEg
Ynl0ZUxlbmd0aAogICAgICAgICAvLyB0aGF0IG92ZXJmbG93cyBpbnQzMi4KQEAgLTE5MTUsNyAr
MTkwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+b3JpZ2luLAotICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnROdW1iZXIoKSkpOworICAgICAg
ICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnQoKSkpOwogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0Zyb3plblZhbHVlKiBGcm96ZW5WYWx1ZTo6ZW1w
dHlTaW5nbGV0b24oKQoreworICAgIHN0YXRpYyBGcm96ZW5WYWx1ZSBlbXB0eTsKKyAgICByZXR1
cm4gJmVtcHR5OworfQorCit2b2lkIEZyb3plblZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghIW1fdmFs
dWUgJiYgbV92YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgb3V0LnByaW50KG1fc3RyZW5ndGgsICI6
Iik7CisgICAgbV92YWx1ZS5kdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUob3V0LCBjb250
ZXh0LCBtX3N0cnVjdHVyZSk7Cit9CisKK3ZvaWQgRnJvemVuVmFsdWU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGcm96ZW5WYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRnJvemVuVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Zyb3plblZhbHVlX2gKKyNkZWZpbmUgREZHRnJvemVu
VmFsdWVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdWYWx1ZVN0cmVu
Z3RoLmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIEdyYXBoOworCitjbGFzcyBGcm96ZW5WYWx1ZSB7CitwdWJsaWM6CisgICAgRnJvemVu
VmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKG51bGxwdHIpCisgICAgICAgICwgbV9zdHJl
bmd0aChGcmFnaWxlVmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShK
U1ZhbHVlIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgICAgICwgbV9zdHJ1
Y3R1cmUobnVsbHB0cikKKyAgICAgICAgLCBtX3N0cmVuZ3RoKEZyYWdpbGVWYWx1ZSkKKyAgICB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkpOworICAg
IH0KKyAgICAKKyAgICBGcm96ZW5WYWx1ZShKU1ZhbHVlIHZhbHVlLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgVmFsdWVTdHJlbmd0aCBzdHJlbmd0aCkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgICAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3N0cmVuZ3RoKHN0
cmVuZ3RoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgp
KSA9PSAhIXN0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVCghdmFsdWUgfHwgIXZhbHVlLmlzQ2Vs
bCgpIHx8IHZhbHVlLmFzQ2VsbCgpLT5jbGFzc0luZm8oKSA9PSBzdHJ1Y3R1cmUtPmNsYXNzSW5m
bygpKTsKKyAgICAgICAgQVNTRVJUKCEhc3RydWN0dXJlIHx8IChzdHJlbmd0aCA9PSBGcmFnaWxl
VmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEZyb3plblZhbHVlKiBlbXB0eVNpbmds
ZXRvbigpOworICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fdmFs
dWU7IH0KKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmU7
IH0KKyAgICAKKyAgICB2b2lkIHN0cmVuZ3RoZW5UbyhWYWx1ZVN0cmVuZ3RoIHN0cmVuZ3RoKQor
ICAgIHsKKyAgICAgICAgaWYgKCEhbV92YWx1ZSAmJiBtX3ZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICAgICAgbV9zdHJlbmd0aCA9IG1lcmdlKG1fc3RyZW5ndGgsIHN0cmVuZ3RoKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlIHN0cmVuZ3RoIG9mIHRoZSB2YWx1ZSBpdHNlbGYuIFRoZSBzdHJ1Y3R1
cmUgc2hvdWxkIGJlIHZpZXdlZCBhcyBmcmFnaWxlCisgICAgLy8gZXhjZXB0IGlmIGl0IGlzIHdh
dGNoZWQsIGluIHdoaWNoIGNhc2UgaXQncyB3ZWFrLiBOb3RlIHRoYXQgY3VycmVudGx5IHdlCisg
ICAgLy8gd2F0Y2ggYWxsIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIGluZGlzY3JpbWluYW50bHksIGFu
ZCBzbyB3ZSBhbHNvIG1hcmsgdGhlbQorICAgIC8vIHdlYWtseS4gV2UgY291bGQgaW1wcm92ZSBv
biB0aGlzOiBhbnkgb3B0aW1pemF0aW9uIHRoYXQgbWFrZXMgdXNlIG9mIGEKKyAgICAvLyBzdHJ1
Y3R1cmUgY291bGQgc2lnbmFsIHRoYXQgaXQgaGFzIGRvbmUgc28sIGFuZCB3ZSBjb3VsZCBhdm9p
ZCB3YXRjaGluZworICAgIC8vIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIHRoYXQgd2UgaGFkIG5ldmVy
IG1hcmtlZCBpbiBzdWNoIGEgd2F5LgorICAgIFZhbHVlU3RyZW5ndGggc3RyZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX3N0cmVuZ3RoOyB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdDsKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBHcmFwaDsKKyAgICAKKyAgICAvLyBUaGlzIGlzIGEgdXRpbGl0eSBtZXRob2QgZm9yIERG
Rzo6R3JhcGg6OmZyZWV6ZSgpLiBZb3Ugc2hvdWxkIGFsbW9zdCBhbHdheXMgY2FsbAorICAgIC8v
IEdyYXBoOjpmcmVlemUoKSBkaXJlY3RseS4gQ2FsbGluZyB0aGlzIGluc3RlYWQgb2YgR3JhcGg6
OmZyZWV6ZSgpIGNhbiByZXN1bHQgaW4KKyAgICAvLyB0aGUgc2FtZSBjb25zdGFudCBiZWluZyB2
aWV3ZWQgYXMgaGF2aW5nIGRpZmZlcmVudCBzdHJ1Y3R1cmVzIGR1cmluZyB0aGUgY291cnNlCisg
ICAgLy8gb2YgY29tcGlsYXRpb24sIHdoaWNoIGNhbiBzb21ldGltZXMgY2F1c2UgYmFkIHRoaW5n
cyB0byBoYXBwZW4uIEZvciBleGFtcGxlLCB3ZQorICAgIC8vIG1heSBvYnNlcnZlIHRoYXQgb25l
IHZlcnNpb24gb2YgdGhlIGNvbnN0YW50IGhhcyBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgYnV0
CisgICAgLy8gdGhlbiBhIGxhdGVyIHZlcnNpb24gbWF5IHN0YXJ0IHRvIGhhdmUgYSB3YXRjaGFi
bGUgc3RydWN0dXJlIGR1ZSB0byBhIHRyYW5zaXRpb24uCisgICAgLy8gVGhlIHBvaW50IG9mIGZy
ZWV6aW5nIGlzIHRvIGVuc3VyZSB0aGF0IHdlIGdlbmVyYWxseSBvbmx5IHNlZSBvbmUgdmVyc2lv
biBvZgorICAgIC8vIGNvbnN0YW50cywgYnV0IHRoYXQgcmVxdWlyZXMgZnJlZXppbmcgdGhyb3Vn
aCB0aGUgR3JhcGguCisgICAgc3RhdGljIEZyb3plblZhbHVlIGZyZWV6ZShKU1ZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEZyb3plblZhbHVlKAorICAgICAgICAgICAgdmFsdWUs
CisgICAgICAgICAgICAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgPyB2YWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkgOiBudWxscHRyLAorICAgICAgICAgICAgRnJhZ2lsZVZhbHVlKTsKKyAg
ICB9CisKKyAgICBKU1ZhbHVlIG1fdmFsdWU7CisgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsK
KyAgICBWYWx1ZVN0cmVuZ3RoIG1fc3RyZW5ndGg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Zyb3pl
blZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJl
dmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MCwxOSArNjAsMjAgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwg
UGxhbiYgcGxhbiwgTG9uZ0xpdgogICAgICwgbV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5n
ZXQoKSkKICAgICAsIG1fcHJvZmlsZWRCbG9jayhtX2NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSkK
ICAgICAsIG1fYWxsb2NhdG9yKGxvbmdMaXZlZFN0YXRlLm1fYWxsb2NhdG9yKQotICAgICwgbV9t
dXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXMoT3BlcmFuZHNMaWtlLCBwbGFuLm11c3RIYW5kbGVWYWx1
ZXMpCisgICAgLCBtX211c3RIYW5kbGVWYWx1ZXMoT3BlcmFuZHNMaWtlLCBwbGFuLm11c3RIYW5k
bGVWYWx1ZXMpCiAgICAgLCBtX2hhc0FyZ3VtZW50cyhmYWxzZSkKICAgICAsIG1fbmV4dE1hY2hp
bmVMb2NhbCgwKQogICAgICwgbV9tYWNoaW5lQ2FwdHVyZVN0YXJ0KHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2ZpeHBvaW50U3RhdGUoQmVmb3JlRml4cG9pbnQpCisg
ICAgLCBtX3N0cnVjdHVyZVdhdGNocG9pbnRTdGF0ZShIYXZlTm90U3RhcnRlZFdhdGNoaW5nKQog
ICAgICwgbV9mb3JtKExvYWRTdG9yZSkKICAgICAsIG1fdW5pZmljYXRpb25TdGF0ZShMb2NhbGx5
VW5pZmllZCkKICAgICAsIG1fcmVmQ291bnRTdGF0ZShFdmVyeXRoaW5nSXNMaXZlKQogewogICAg
IEFTU0VSVChtX3Byb2ZpbGVkQmxvY2spOwogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IG1f
bXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9tdXN0SGFu
ZGxlQWJzdHJhY3RWYWx1ZXNbaV0uc2V0TW9zdFNwZWNpZmljKCp0aGlzLCBwbGFuLm11c3RIYW5k
bGVWYWx1ZXNbaV0pOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbXVzdEhhbmRsZVZhbHVlcy5z
aXplKCk7IGktLTspCisgICAgICAgIG1fbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGZyZWV6ZUZyYWdp
bGUocGxhbi5tdXN0SGFuZGxlVmFsdWVzW2ldKTsKIH0KIAogR3JhcGg6On5HcmFwaCgpCkBAIC0x
NzgsNyArMTc5LDYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAog
ICAgIC8vICg1KSBUaGUgYXJndW1lbnRzIHRvIHRoZSBvcGVyYXRpb24uIFRoZSBtYXkgYmUgb2Yg
dGhlIGZvcm06CiAgICAgLy8gICAgICAgICBAIyAgIC0gYSBOb2RlSW5kZXggcmVmZXJlbmNpbmcg
YSBwcmlvciBub2RlIGluIHRoZSBncmFwaC4KICAgICAvLyAgICAgICAgIGFyZyMgLSBhbiBhcmd1
bWVudCBudW1iZXIuCi0gICAgLy8gICAgICAgICAkIyAgIC0gdGhlIGluZGV4IGluIHRoZSBDb2Rl
QmxvY2sgb2YgYSBjb25zdGFudCB7IGZvciBudW1lcmljIGNvbnN0YW50cyB0aGUgdmFsdWUgaXMg
ZGlzcGxheWVkIHwgZm9yIGludGVnZXJzLCBpbiBib3RoIGRlY2ltYWwgYW5kIGhleCB9LgogICAg
IC8vICAgICAgICAgaWQjICAtIHRoZSBpbmRleCBpbiB0aGUgQ29kZUJsb2NrIG9mIGFuIGlkZW50
aWZpZXIgeyBpZiBjb2RlQmxvY2sgaXMgcGFzc2VkIHRvIGR1bXAoKSwgdGhlIHN0cmluZyByZXBy
ZXNlbnRhdGlvbiBpcyBkaXNwbGF5ZWQgfS4KICAgICAvLyAgICAgICAgIHZhciMgLSB0aGUgaW5k
ZXggb2YgYSB2YXIgb24gdGhlIGdsb2JhbCBvYmplY3QsIHVzZWQgYnkgR2V0R2xvYmFsVmFyL1B1
dEdsb2JhbFZhciBvcGVyYXRpb25zLgogICAgIG91dC5wcmludGYoIiUgNGQ6JXM8JWMldToiLCAo
aW50KW5vZGUtPmluZGV4KCksIHNraXBwZWQgPyAiICBza2lwcGVkICAiIDogIiAgICAgICAgICAg
IiwgbXVzdEdlbmVyYXRlID8gJyEnIDogJyAnLCByZWZDb3VudCk7CkBAIC0yMjQsOSArMjI0LDEw
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICBpZiAobm9k
ZS0+aGFzVHJhbnNpdGlvbigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1w
SW5Db250ZXh0KG5vZGUtPnRyYW5zaXRpb24oKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5o
YXNGdW5jdGlvbigpKSB7Ci0gICAgICAgIG91dC5wcmludChjb21tYSwgImZ1bmN0aW9uKCIsIFJh
d1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIsICIpOwotICAgICAgICBpZiAobm9kZS0+ZnVu
Y3Rpb24oKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSkgewotICAgICAgICAgICAgSlNG
dW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KG5vZGUtPmZ1bmN0aW9uKCkp
OworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBwb2ludGVyRHVtcChub2Rl
LT5mdW5jdGlvbigpKSwgIiwgIik7CisgICAgICAgIGlmIChub2RlLT5mdW5jdGlvbigpLT52YWx1
ZSgpLmlzQ2VsbCgpCisgICAgICAgICAgICAmJiBub2RlLT5mdW5jdGlvbigpLT52YWx1ZSgpLmFz
Q2VsbCgpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKSB7CisgICAgICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4obm9kZS0+ZnVuY3Rpb24oKS0+
dmFsdWUoKS5hc0NlbGwoKSk7CiAgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmlzSG9zdEZ1bmN0
aW9uKCkpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8aG9zdCBmdW5jdGlvbj4iKTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTMwNiw3ICszMDcsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChub2RlLT5zdGFydENvbnN0YW50
KCksICI6WyIpOwogICAgICAgICBDb21tYVByaW50ZXIgYW5vdGhlckNvbW1hOwogICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9kZS0+bnVtQ29uc3RhbnRzKCk7ICsraSkKLSAgICAg
ICAgICAgIG91dC5wcmludChhbm90aGVyQ29tbWEsIGluQ29udGV4dChtX2NvZGVCbG9jay0+Y29u
c3RhbnRCdWZmZXIobm9kZS0+c3RhcnRDb25zdGFudCgpKVtpXSwgY29udGV4dCkpOworICAgICAg
ICAgICAgb3V0LnByaW50KGFub3RoZXJDb21tYSwgcG9pbnRlckR1bXBJbkNvbnRleHQoZnJlZXpl
KG1fY29kZUJsb2NrLT5jb25zdGFudEJ1ZmZlcihub2RlLT5zdGFydENvbnN0YW50KCkpW2ldKSwg
Y29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIl0iKTsKICAgICB9CiAgICAgaWYgKG5vZGUt
Pmhhc0luZGV4aW5nVHlwZSgpKQpAQCAtMzIzLDEzICszMjQsOCBAQCB2b2lkIEdyYXBoOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250
ZXh0KEpTVmFsdWUobm9kZS0+dHlwZWRBcnJheSgpKSwgY29udGV4dCkpOwogICAgIGlmIChub2Rl
LT5oYXNTdG9yYWdlUG9pbnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50
ZXIobm9kZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwotICAgIGlmIChub2RlLT5pc0NvbnN0YW50KCkp
IHsKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiJCIsIG5vZGUtPmNvbnN0YW50TnVtYmVyKCkp
OwotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAg
ICAgIG91dC5wcmludCgiID0gIiwgaW5Db250ZXh0KHZhbHVlLCBjb250ZXh0KSk7Ci0gICAgfQot
ICAgIGlmIChvcCA9PSBXZWFrSlNDb25zdGFudCkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBS
YXdQb2ludGVyKG5vZGUtPndlYWtDb25zdGFudCgpKSwgIiAoIiwgaW5Db250ZXh0KCpub2RlLT53
ZWFrQ29uc3RhbnQoKS0+c3RydWN0dXJlKCksIGNvbnRleHQpLCAiKSIpOworICAgIGlmIChub2Rl
LT5pc0NvbnN0YW50KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXBJbkNv
bnRleHQobm9kZS0+Y29uc3RhbnQoKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5pc0p1bXAo
KSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVDoiLCAqbm9kZS0+dGFyZ2V0QmxvY2soKSk7
CiAgICAgaWYgKG5vZGUtPmlzQnJhbmNoKCkpCkBAIC03OTIsOSArNzg4LDcgQEAgdW5zaWduZWQg
R3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvcgogCiBKU0FjdGl2YXRpb24qIEdyYXBoOjp0
cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5oYXNDb25zdGFu
dCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4ganNEeW5hbWljQ2FzdDxKU0FjdGl2
YXRpb24qPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgcmV0dXJuIG5vZGUtPmR5bmFt
aWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKIH0KIAogV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogR3JhcGg6OnRyeUdldFJlZ2lzdGVycyhOb2RlKiBub2RlKQpAQCAtODA5LDEzICs4
MDMsMTEgQEAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogR3JhcGg6OnRyeUdldAogCiBKU0Fy
cmF5QnVmZmVyVmlldyogR3JhcGg6OnRyeUdldEZvbGRhYmxlVmlldyhOb2RlKiBub2RlKQogewot
ICAgIGlmICghbm9kZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgSlNB
cnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlCdWZmZXJWaWV3Kj4o
dmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgIEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0g
bm9kZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU0FycmF5QnVmZmVyVmlldyo+KCk7CiAgICAgaWYg
KCF2aWV3KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
aWYgKCF2aWV3LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBu
dWxscHRyOwogICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwogICAgIHJldHVybiB2aWV3OwogfQpA
QCAtODMyLDggKzgyNCw0MyBAQCBKU0FycmF5QnVmZmVyVmlldyogR3JhcGg6OnRyeUdldEZvbGRh
YmxlCiAgICAgcmV0dXJuIHRyeUdldEZvbGRhYmxlVmlldyhjaGlsZChub2RlLCAwKS5ub2RlKCks
IG5vZGUtPmFycmF5TW9kZSgpKTsKIH0KIAordm9pZCBHcmFwaDo6cmVnaXN0ZXJGcm96ZW5WYWx1
ZXMoKQoreworICAgIG1fY29kZUJsb2NrLT5jb25zdGFudHMoKS5yZXNpemUoMCk7CisgICAgZm9y
IChGcm96ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgeworICAgICAgICBpZiAodmFs
dWUtPnN0cnVjdHVyZSgpICYmIHZhbHVlLT5zdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkK
KyAgICAgICAgICAgIG1fcGxhbi53ZWFrUmVmZXJlbmNlcy5hZGRMYXppbHkodmFsdWUtPnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodmFsdWUtPnN0cmVuZ3RoKCkpIHsK
KyAgICAgICAgY2FzZSBGcmFnaWxlVmFsdWU6IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGNhc2UgV2Vha1ZhbHVlOiB7CisgICAgICAgICAgICBtX3BsYW4ud2Vha1Jl
ZmVyZW5jZXMuYWRkTGF6aWx5KHZhbHVlLT52YWx1ZSgpLmFzQ2VsbCgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgU3Ryb25nVmFsdWU6IHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNvbnN0YW50SW5kZXggPSBtX2NvZGVCbG9jay0+YWRkQ29uc3RhbnRMYXpp
bHkoKTsKKyAgICAgICAgICAgIGluaXRpYWxpemVMYXp5V3JpdGVCYXJyaWVyRm9yQ29uc3RhbnQo
CisgICAgICAgICAgICAgICAgbV9wbGFuLndyaXRlQmFycmllcnMsCisgICAgICAgICAgICAgICAg
bV9jb2RlQmxvY2stPmNvbnN0YW50cygpW2NvbnN0YW50SW5kZXhdLAorICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrLAorICAgICAgICAgICAgICAgIGNvbnN0YW50SW5kZXgsCisgICAgICAgICAg
ICAgICAgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgIHZh
bHVlLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IH0KKyAgICB9Cisg
ICAgbV9jb2RlQmxvY2stPmNvbnN0YW50cygpLnNocmlua1RvRml0KCk7Cit9CisKIHZvaWQgR3Jh
cGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CisgICAgZm9yIChGcm96
ZW5WYWx1ZSogdmFsdWUgOiBtX2Zyb3plblZhbHVlcykgeworICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YWx1ZS0+dmFsdWUoKSk7CisgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFsdWUtPnN0cnVjdHVyZSgpKTsK
KyAgICB9CisgICAgCiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBudW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJs
b2NrKGJsb2NrSW5kZXgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtODQzLDE1ICs4NzAsNiBA
QCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIENoZWNrRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxl
OgogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50
ZXIobm9kZS0+ZXhlY3V0YWJsZSgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTkwOSw4
ICs5MjcsNTggQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAg
IH0KIH0KIAorRnJvemVuVmFsdWUqIEdyYXBoOjpmcmVlemVGcmFnaWxlKEpTVmFsdWUgdmFsdWUp
Cit7CisgICAgaWYgKFVOTElLRUxZKCF2YWx1ZSkpCisgICAgICAgIHJldHVybiBGcm96ZW5WYWx1
ZTo6ZW1wdHlTaW5nbGV0b24oKTsKKyAgICAKKyAgICBhdXRvIHJlc3VsdCA9IG1fZnJvemVuVmFs
dWVNYXAuYWRkKEpTVmFsdWU6OmVuY29kZSh2YWx1ZSksIG51bGxwdHIpOworICAgIGlmIChMSUtF
TFkoIXJlc3VsdC5pc05ld0VudHJ5KSkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBtX2Zyb3pl
blZhbHVlcy5hZGQoRnJvemVuVmFsdWU6OmZyZWV6ZSh2YWx1ZSkpOworfQorCitGcm96ZW5WYWx1
ZSogR3JhcGg6OmZyZWV6ZShKU1ZhbHVlIHZhbHVlKQoreworICAgIEZyb3plblZhbHVlKiByZXN1
bHQgPSBmcmVlemVGcmFnaWxlKHZhbHVlKTsKKyAgICByZXN1bHQtPnN0cmVuZ3RoZW5UbyhXZWFr
VmFsdWUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0Zyb3plblZhbHVlKiBHcmFwaDo6ZnJl
ZXplU3Ryb25nKEpTVmFsdWUgdmFsdWUpCit7CisgICAgRnJvemVuVmFsdWUqIHJlc3VsdCA9IGZy
ZWV6ZSh2YWx1ZSk7CisgICAgcmVzdWx0LT5zdHJlbmd0aGVuVG8oU3Ryb25nVmFsdWUpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgR3JhcGg6OmNvbnZlcnRUb0NvbnN0YW50KE5vZGUq
IG5vZGUsIEZyb3plblZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPnN0cnVjdHVyZSgp
KQorICAgICAgICBhc3NlcnRJc1dhdGNoZWQodmFsdWUtPnN0cnVjdHVyZSgpKTsKKyAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkKKyAgICAgICAgZGV0aHJlYWQoKTsKKyAgICBlbHNlCisg
ICAgICAgIEFTU0VSVCghbm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSk7CisgICAg
bm9kZS0+Y29udmVydFRvQ29uc3RhbnQodmFsdWUpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0
VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRUb0Nv
bnN0YW50KG5vZGUsIGZyZWV6ZSh2YWx1ZSkpOworfQorCit2b2lkIEdyYXBoOjpjb252ZXJ0VG9T
dHJvbmdDb25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGNvbnZlcnRU
b0NvbnN0YW50KG5vZGUsIGZyZWV6ZVN0cm9uZyh2YWx1ZSkpOworfQorCiB2b2lkIEdyYXBoOjph
c3NlcnRJc1dhdGNoZWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CisgICAgaWYgKG1fc3RydWN0
dXJlV2F0Y2hwb2ludFN0YXRlID09IEhhdmVOb3RTdGFydGVkV2F0Y2hpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICAKICAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGlmICh3YXRjaHBvaW50cygpLmlzV2F0Y2hlZChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZH
QXJndW1lbnRQb3NpdGlvbi5oIgogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRl
ICJERkdEb21pbmF0b3JzLmgiCisjaW5jbHVkZSAiREZHRnJvemVuVmFsdWUuaCIKICNpbmNsdWRl
ICJERkdMb25nTGl2ZWRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR05hdHVyYWxMb29wcy5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKQEAgLTE0NCw0MyArMTQ1LDE2IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgZGV0aHJlYWQoKTsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5v
ZGUsIHVuc2lnbmVkIGNvbnN0YW50TnVtYmVyKQotICAgIHsKLSAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gR2V0TG9jYWwpCi0gICAgICAgICAgICBkZXRocmVhZCgpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBBU1NFUlQoIW5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykpOwot
ICAgICAgICBub2RlLT5jb252ZXJ0VG9Db25zdGFudChjb25zdGFudE51bWJlcik7Ci0gICAgfQot
ICAgIAotICAgIHVuc2lnbmVkIGNvbnN0YW50UmVnaXN0ZXJGb3JDb25zdGFudChKU1ZhbHVlIHZh
bHVlKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRSZWdpc3RlcjsKLSAgICAgICAg
aWYgKCFtX2NvZGVCbG9jay0+ZmluZENvbnN0YW50KHZhbHVlLCBjb25zdGFudFJlZ2lzdGVyKSkg
ewotICAgICAgICAgICAgY29uc3RhbnRSZWdpc3RlciA9IG1fY29kZUJsb2NrLT5hZGRDb25zdGFu
dExhemlseSgpOwotICAgICAgICAgICAgaW5pdGlhbGl6ZUxhenlXcml0ZUJhcnJpZXJGb3JDb25z
dGFudCgKLSAgICAgICAgICAgICAgICBtX3BsYW4ud3JpdGVCYXJyaWVycywKLSAgICAgICAgICAg
ICAgICBtX2NvZGVCbG9jay0+Y29uc3RhbnRzKClbY29uc3RhbnRSZWdpc3Rlcl0sCi0gICAgICAg
ICAgICAgICAgbV9jb2RlQmxvY2ssCi0gICAgICAgICAgICAgICAgY29uc3RhbnRSZWdpc3RlciwK
LSAgICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCi0gICAgICAg
ICAgICAgICAgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb25zdGFudFJlZ2lz
dGVyOwotICAgIH0KKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplRnJhZ2lsZShKU1ZhbHVlIHZhbHVl
KTsKKyAgICBGcm96ZW5WYWx1ZSogZnJlZXplKEpTVmFsdWUgdmFsdWUpOyAvLyBXZSB1c2Ugd2Vh
ayBmcmVlemluZyBieSBkZWZhdWx0LgorICAgIEZyb3plblZhbHVlKiBmcmVlemVTdHJvbmcoSlNW
YWx1ZSB2YWx1ZSk7IC8vIFNob3J0aGFuZCBmb3IgZnJlZXplKHZhbHVlKS0+bWFya1N0cm9uZ2x5
KCkuCisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBGcm96ZW5W
YWx1ZSogdmFsdWUpOworICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNW
YWx1ZSB2YWx1ZSk7CisgICAgdm9pZCBjb252ZXJ0VG9TdHJvbmdDb25zdGFudChOb2RlKiBub2Rl
LCBKU1ZhbHVlIHZhbHVlKTsKICAgICAKICAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBu
b2RlLCBKU1ZhbHVlIHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQot
ICAgICAgICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICAgICAgbm9kZS0+Y29udmVy
dFRvV2Vha0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29udmVydFRvQ29uc3RhbnQobm9kZSwgY29uc3RhbnRSZWdpc3RlckZvckNvbnN0YW50KHZh
bHVlKSk7Ci0gICAgfQotCiAgICAgLy8gQ29kZUJsb2NrIGlzIG9wdGlvbmFsLCBidXQgbWF5IGFs
bG93IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gdG8gYmUgZHVtcGVkIChlLmcuIElkZW50aWZpZXIg
bmFtZXMpLgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgPSBXVEY6OmRhdGFGaWxlKCksIER1
bXBDb250ZXh0KiA9IDApOwogICAgIGVudW0gUGhpTm9kZUR1bXBNb2RlIHsgRHVtcExpdmVQaGlz
T25seSwgRHVtcEFsbFBoaXMgfTsKQEAgLTE5NCwxMSArMTY4LDYgQEAgcHVibGljOgogICAgIC8v
IHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQuCiAg
ICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwg
Tm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRl
eHQpOwogCi0gICAgU3BlY3VsYXRlZFR5cGUgZ2V0SlNDb25zdGFudFNwZWN1bGF0aW9uKE5vZGUq
IG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tVmFsdWUobm9kZS0+
dmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2spKTsKLSAgICB9Ci0gICAgCiAgICAgQWRkU3Bl
Y3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3Vs
ZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIpCiAgICAgewog
ICAgICAgICBBU1NFUlQoYWRkLT5vcCgpID09IFZhbHVlQWRkIHx8IGFkZC0+b3AoKSA9PSBBcml0
aEFkZCB8fCBhZGQtPm9wKCkgPT0gQXJpdGhTdWIpOwpAQCAtMzAzLDg4ICsyNzIsNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+YXJndW1l
bnRJbmRleEFmdGVyQ2FwdHVyZShhcmd1bWVudCkpOwogICAgIH0KICAgICAKLSAgICAvLyBIZWxw
ZXIgbWV0aG9kcyB0byBjaGVjayBub2RlcyBmb3IgY29uc3RhbnRzLgotICAgIGJvb2wgaXNDb25z
dGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGUtPmhhc0NvbnN0YW50
KCk7Ci0gICAgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICByZXR1cm4gbm9kZS0+aGFzQ29uc3RhbnQoKTsKLSAgICB9Ci0gICAgYm9vbCBpc0ludDMy
Q29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0ludDMy
Q29uc3RhbnQobV9jb2RlQmxvY2spOwotICAgIH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQo
Tm9kZSogbm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0RvdWJsZUNvbnN0YW50
KG1fY29kZUJsb2NrKTsKLSAgICB9Ci0gICAgYm9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+aXNOdW1iZXJDb25zdGFudChtX2NvZGVC
bG9jayk7Ci0gICAgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBub2RlLT5pc0Jvb2xlYW5Db25zdGFudChtX2NvZGVCbG9jayk7
Ci0gICAgfQotICAgIGJvb2wgaXNDZWxsQ29uc3RhbnQoTm9kZSogbm9kZSkKLSAgICB7Ci0gICAg
ICAgIGlmICghaXNKU0NvbnN0YW50KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9kZSk7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS5pc0NlbGwoKSAmJiAhIXZhbHVlOwotICAgIH0KLSAgICBib29sIGlzRnVu
Y3Rpb25Db25zdGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0pTQ29uc3Rh
bnQobm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZ2V0SlNG
dW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBib29sIGlzSW50ZXJuYWxGdW5j
dGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBpZiAoIWlzSlNDb25zdGFu
dChub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgp
IHx8ICF2YWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgSlNDZWxsKiBj
ZWxsID0gdmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmICghY2VsbC0+aW5oZXJpdHMoSW50ZXJu
YWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotICAgIC8vIEhlbHBlciBtZXRob2RzIGdldCBjb25zdGFudCB2
YWx1ZXMgZnJvbSBub2Rlcy4KLSAgICBKU1ZhbHVlIHZhbHVlT2ZKU0NvbnN0YW50KE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS0+dmFsdWVPZkpTQ29uc3RhbnQobV9jb2Rl
QmxvY2spOwotICAgIH0KLSAgICBpbnQzMl90IHZhbHVlT2ZJbnQzMkNvbnN0YW50KE5vZGUqIG5v
ZGUpCi0gICAgewotICAgICAgICBKU1ZhbHVlIHZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQobm9k
ZSk7Ci0gICAgICAgIGlmICghdmFsdWUuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBkYXRhTG9n
KCJWYWx1ZSBpc24ndCBpbnQzMjogIiwgdmFsdWUsICJcbiIpOwotICAgICAgICAgICAgZHVtcCgp
OwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gdmFsdWUuYXNJbnQzMigpOwotICAgIH0KLSAgICBkb3VibGUgdmFsdWVP
Zk51bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkuYXNOdW1iZXIoKTsKLSAgICB9Ci0gICAgYm9vbCB2YWx1ZU9mQm9v
bGVhbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdmFsdWVPZkpT
Q29uc3RhbnQobm9kZSkuYXNCb29sZWFuKCk7Ci0gICAgfQotICAgIEpTRnVuY3Rpb24qIHZhbHVl
T2ZGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpCi0gICAgewotICAgICAgICBKU0NlbGwqIGZ1
bmN0aW9uID0gZ2V0SlNGdW5jdGlvbih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Ci0gICAgICAg
IEFTU0VSVChmdW5jdGlvbik7Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1
bmN0aW9uKTsKLSAgICB9Ci0KICAgICBzdGF0aWMgY29uc3QgY2hhciAqb3BOYW1lKE5vZGVUeXBl
KTsKICAgICAKICAgICBTdHJ1Y3R1cmVTZXQqIGFkZFN0cnVjdHVyZVNldChjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCkKQEAgLTgwMiw2ICs2ODksOCBAQCBwdWJsaWM6CiAgICAgSlNB
cnJheUJ1ZmZlclZpZXcqIHRyeUdldEZvbGRhYmxlVmlldyhOb2RlKiwgQXJyYXlNb2RlKTsKICAg
ICBKU0FycmF5QnVmZmVyVmlldyogdHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKE5vZGUqKTsK
ICAgICAKKyAgICB2b2lkIHJlZ2lzdGVyRnJvemVuVmFsdWVzKCk7CisgICAgCiAgICAgdmlydHVh
bCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKICAgICAKICAgICBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKQEAgLTgx
NSwxMCArNzA0LDE0IEBAIHB1YmxpYzoKICAgICAKICAgICBOb2RlQWxsb2NhdG9yJiBtX2FsbG9j
YXRvcjsKIAotICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fbXVzdEhhbmRsZUFic3RyYWN0
VmFsdWVzOworICAgIE9wZXJhbmRzPEZyb3plblZhbHVlKj4gbV9tdXN0SGFuZGxlVmFsdWVzOwog
ICAgIAogICAgIFZlY3RvcjwgUmVmUHRyPEJhc2ljQmxvY2s+ICwgOD4gbV9ibG9ja3M7CiAgICAg
VmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0NoaWxkcmVuOworCisgICAgSGFzaE1hcDxFbmNvZGVk
SlNWYWx1ZSwgRnJvemVuVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZUhhc2gsIEVuY29kZWRKU1ZhbHVl
SGFzaFRyYWl0cz4gbV9mcm96ZW5WYWx1ZU1hcDsKKyAgICBCYWc8RnJvemVuVmFsdWU+IG1fZnJv
emVuVmFsdWVzOworICAgIAogICAgIFZlY3RvcjxTdG9yYWdlQWNjZXNzRGF0YT4gbV9zdG9yYWdl
QWNjZXNzRGF0YTsKICAgICBWZWN0b3I8Tm9kZSosIDg+IG1fYXJndW1lbnRzOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsK
QEAgLTg0OSw2ICs3NDIsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBPcHRpbWl6YXRp
b25GaXhwb2ludFN0YXRlIG1fZml4cG9pbnRTdGF0ZTsKKyAgICBTdHJ1Y3R1cmVXYXRjaHBvaW50
U3RhdGUgbV9zdHJ1Y3R1cmVXYXRjaHBvaW50U3RhdGU7CiAgICAgR3JhcGhGb3JtIG1fZm9ybTsK
ICAgICBVbmlmaWNhdGlvblN0YXRlIG1fdW5pZmljYXRpb25TdGF0ZTsKICAgICBSZWZDb3VudFN0
YXRlIG1fcmVmQ291bnRTdGF0ZTsKQEAgLTg2MSw3ICs3NTUsNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGltbWVkaWF0ZS0+aGFzQ29uc3RhbnQoKSk7CiAgICAgICAgIAotICAg
ICAgICBKU1ZhbHVlIGltbWVkaWF0ZVZhbHVlID0gaW1tZWRpYXRlLT52YWx1ZU9mSlNDb25zdGFu
dChtX2NvZGVCbG9jayk7CisgICAgICAgIEpTVmFsdWUgaW1tZWRpYXRlVmFsdWUgPSBpbW1lZGlh
dGUtPmFzSlNWYWx1ZSgpOwogICAgICAgICBpZiAoIWltbWVkaWF0ZVZhbHVlLmlzTnVtYmVyKCkp
CiAgICAgICAgICAgICByZXR1cm4gRG9udFNwZWN1bGF0ZUludDMyOwogICAgICAgICAKQEAgLTg3
OCwzMCArNzcyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHJldHVybiBieXRlY29k
ZUNhblRydW5jYXRlSW50ZWdlcihhZGQtPmFyaXRoTm9kZUZsYWdzKCkpID8gU3BlY3VsYXRlSW50
MzJBbmRUcnVuY2F0ZUNvbnN0YW50cyA6IERvbnRTcGVjdWxhdGVJbnQzMjsKICAgICB9Ci0gICAg
Ci0gICAgYm9vbCBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnQzMihOb2RlKiBtdWwsIE5v
ZGUqIHZhcmlhYmxlLCBOb2RlKiBpbW1lZGlhdGUpCi0gICAgewotICAgICAgICBBU1NFUlQoaW1t
ZWRpYXRlLT5oYXNDb25zdGFudCgpKTsKLSAgICAgICAgCi0gICAgICAgIEpTVmFsdWUgaW1tZWRp
YXRlVmFsdWUgPSBpbW1lZGlhdGUtPnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrKTsKLSAg
ICAgICAgaWYgKCFpbW1lZGlhdGVWYWx1ZS5pc0ludDMyKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhcmlhYmxlLT5zaG91bGRTcGVjdWxhdGVJ
bnQzMkZvckFyaXRobWV0aWMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGludDMyX3QgaW50SW1tZWRpYXRlID0gaW1tZWRpYXRlVmFsdWUuYXNJbnQzMigp
OwotICAgICAgICAvLyBEb3VibGVzIGhhdmUgYSA1MyBiaXQgbWFudGlzc2Egc28gd2UgZXhwZWN0
IGEgbXVsdGlwbGljYXRpb24gb2YgMl4zMSAodGhlIGhpZ2hlc3QKLSAgICAgICAgLy8gbWFnbml0
dWRlIHBvc3NpYmxlIGludDMyIHZhbHVlKSBhbmQgYW55IHZhbHVlIGxlc3MgdGhhbiAyXjIyIHRv
IG5vdCByZXN1bHQgaW4gYW55Ci0gICAgICAgIC8vIHJvdW5kaW5nIGluIGEgZG91YmxlIG11bHRp
cGxpY2F0aW9uIC0gaGVuY2UgaXQgd2lsbCBiZSBlcXVpdmFsZW50IHRvIGFuIGludGVnZXIKLSAg
ICAgICAgLy8gbXVsdGlwbGljYXRpb24sIGlmIHdlIGFyZSBkb2luZyBpbnQzMiB0cnVuY2F0aW9u
IGFmdGVyd2FyZHMgKHdoaWNoIGlzIHdoYXQKLSAgICAgICAgLy8gY2FuU3BlY3VsYXRlSW50MzIo
KSBpbXBsaWVzKS4KLSAgICAgICAgY29uc3QgaW50MzJfdCB0d29Ub1RoZTIyID0gMSA8PCAyMjsK
LSAgICAgICAgaWYgKGludEltbWVkaWF0ZSA8PSAtdHdvVG9UaGUyMiB8fCBpbnRJbW1lZGlhdGUg
Pj0gdHdvVG9UaGUyMikKLSAgICAgICAgICAgIHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMy
KCkgJiYgIW5vZGVNYXlPdmVyZmxvdyhtdWwtPmFyaXRoTm9kZUZsYWdzKCkpOwotCi0gICAgICAg
IHJldHVybiBtdWwtPmNhblNwZWN1bGF0ZUludDMyKCk7Ci0gICAgfQogfTsKIAogI2RlZmluZSBE
RkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgdGhpbmdUb0RvKSBkbyB7ICAgICAg
ICAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJh
Y3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTEsMTcgKzE1MSwxOCBAQCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFs
aXplKCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYmxvY2stPmJ5dGVjb2Rl
QmVnaW4gIT0gbV9ncmFwaC5tX3BsYW4ub3NyRW50cnlCeXRlY29kZUluZGV4KQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5tX211
c3RIYW5kbGVBYnN0cmFjdFZhbHVlcy5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaW50IG9w
ZXJhbmQgPSBtX2dyYXBoLm1fbXVzdEhhbmRsZUFic3RyYWN0VmFsdWVzLm9wZXJhbmRGb3JJbmRl
eChpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2dyYXBoLm1fbXVzdEhhbmRs
ZVZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaW50IG9wZXJhbmQgPSBtX2dyYXBo
Lm1fbXVzdEhhbmRsZVZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAg
ICAgICAgaWYgKCFub2RlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgubV9tdXN0SGFuZGxlQWJzdHJhY3RWYWx1ZXNb
aV07Ci0gICAgICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlID0gYmxvY2stPnZh
bHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBz
b3VyY2U7CisgICAgICAgICAgICBzb3VyY2Uuc2V0T1NSRW50cnlWYWx1ZShtX2dyYXBoLCAqbV9n
cmFwaC5tX211c3RIYW5kbGVWYWx1ZXNbaV0pOworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dGFyZ2V0ID0gYmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGUtPmZsdXNoRm9y
bWF0KCk7Ci0gICAgICAgICAgICBhYnN0cmFjdFZhbHVlLm1lcmdlKHZhbHVlKTsKLSAgICAgICAg
ICAgIGFic3RyYWN0VmFsdWUuZml4VHlwZUZvclJlcHJlc2VudGF0aW9uKHJlc3VsdEZvcihmb3Jt
YXQpKTsKKyAgICAgICAgICAgIHRhcmdldC5tZXJnZShzb3VyY2UpOworICAgICAgICAgICAgdGFy
Z2V0LmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihyZXN1bHRGb3IoZm9ybWF0KSk7CiAgICAgICAg
IH0KICAgICAgICAgYmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOwogICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAkocmV2aXNpb24g
MTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtNjIsMjMgKzYyLDIxIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAg
ICAgTm9kZSogaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdp
biBvcmlnaW4sIEpTVmFsdWUgdmFsdWUsCisgICAgICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdp
biBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwKICAgICAgICAgTm9kZVR5cGUgb3AgPSBKU0Nv
bnN0YW50KQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgY29uc3RhbnRSZWcgPQotICAgICAgICAg
ICAgbV9ncmFwaC5jb25zdGFudFJlZ2lzdGVyRm9yQ29uc3RhbnQodmFsdWUpOwogICAgICAgICBy
ZXR1cm4gaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4LCBzcGVjdWxhdGlvbkZyb21WYWx1
ZSh2YWx1ZSksIG9wLCBvcmlnaW4sIE9wSW5mbyhjb25zdGFudFJlZykpOworICAgICAgICAgICAg
aW5kZXgsIHNwZWN1bGF0aW9uRnJvbVZhbHVlKHZhbHVlLT52YWx1ZSgpKSwgb3AsIG9yaWdpbiwg
T3BJbmZvKHZhbHVlKSk7CiAgICAgfQogICAgIAogICAgIE5vZGUqIGluc2VydENvbnN0YW50KAot
ICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBO
b2RlVHlwZSBvcCA9IEpTQ29uc3RhbnQpCisgICAgICAgIHNpemVfdCBpbmRleCwgQ29kZU9yaWdp
biBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwgTm9kZVR5cGUgb3AgPSBKU0NvbnN0YW50KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50KGluZGV4LCBOb2RlT3JpZ2luKG9y
aWdpbiksIHZhbHVlLCBvcCk7CiAgICAgfQogICAgIAogICAgIEVkZ2UgaW5zZXJ0Q29uc3RhbnRG
b3JVc2UoCi0gICAgICAgIHNpemVfdCBpbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEpTVmFsdWUg
dmFsdWUsIFVzZUtpbmQgdXNlS2luZCkKKyAgICAgICAgc2l6ZV90IGluZGV4LCBOb2RlT3JpZ2lu
IG9yaWdpbiwgRnJvemVuVmFsdWUqIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewogICAg
ICAgICBOb2RlVHlwZSBvcDsKICAgICAgICAgaWYgKGlzRG91YmxlKHVzZUtpbmQpKQpAQCAtOTEs
NyArODksMjcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICBFZGdlIGluc2VydENvbnN0YW50
Rm9yVXNlKAotICAgICAgICBzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVl
IHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCisgICAgICAgIHNpemVfdCBpbmRleCwgQ29kZU9yaWdp
biBvcmlnaW4sIEZyb3plblZhbHVlKiB2YWx1ZSwgVXNlS2luZCB1c2VLaW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGluc2VydENvbnN0YW50Rm9yVXNlKGluZGV4LCBOb2RlT3JpZ2luKG9yaWdp
biksIHZhbHVlLCB1c2VLaW5kKTsKKyAgICB9CisKKyAgICBOb2RlKiBpbnNlcnRDb25zdGFudChz
aXplX3QgaW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBOb2RlVHlwZSBv
cCA9IEpTQ29uc3RhbnQpCisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnQoaW5k
ZXgsIG9yaWdpbiwgbV9ncmFwaC5mcmVlemUodmFsdWUpLCBvcCk7CisgICAgfQorICAgIAorICAg
IE5vZGUqIGluc2VydENvbnN0YW50KHNpemVfdCBpbmRleCwgQ29kZU9yaWdpbiBvcmlnaW4sIEpT
VmFsdWUgdmFsdWUsIE5vZGVUeXBlIG9wID0gSlNDb25zdGFudCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpbnNlcnRDb25zdGFudChpbmRleCwgb3JpZ2luLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSks
IG9wKTsKKyAgICB9CisgICAgCisgICAgRWRnZSBpbnNlcnRDb25zdGFudEZvclVzZShzaXplX3Qg
aW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBKU1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQp
CisgICAgeworICAgICAgICByZXR1cm4gaW5zZXJ0Q29uc3RhbnRGb3JVc2UoaW5kZXgsIG9yaWdp
biwgbV9ncmFwaC5mcmVlemUodmFsdWUpLCB1c2VLaW5kKTsKKyAgICB9CisgICAgCisgICAgRWRn
ZSBpbnNlcnRDb25zdGFudEZvclVzZShzaXplX3QgaW5kZXgsIENvZGVPcmlnaW4gb3JpZ2luLCBK
U1ZhbHVlIHZhbHVlLCBVc2VLaW5kIHVzZUtpbmQpCiAgICAgewogICAgICAgICByZXR1cm4gaW5z
ZXJ0Q29uc3RhbnRGb3JVc2UoaW5kZXgsIE5vZGVPcmlnaW4ob3JpZ2luKSwgdmFsdWUsIHVzZUtp
bmQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW50ZWdlckNo
ZWNrQ29tYmluaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSW50ZWdlckNoZWNrQ29tYmluaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk2ODEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ludGVnZXJDaGVja0NvbWJpbmluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDExICszMTEsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlmIChub2RlLT5hcml0aE1vZGUoKSAhPSBBcml0aDo6Q2hlY2tPdmVyZmxvdwog
ICAgICAgICAgICAgICAgICYmIG5vZGUtPmFyaXRoTW9kZSgpICE9IEFyaXRoOjpDaGVja092ZXJm
bG93QW5kTmVnYXRpdmVaZXJvKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
aWYgKCFtX2dyYXBoLmlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAg
ICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gUmFuZ2VLZXlBbmRBZGRlbmQoCiAg
ICAgICAgICAgICAgICAgUmFuZ2VLZXk6OmFkZGl0aW9uKG5vZGUtPmNoaWxkMSgpKSwKLSAgICAg
ICAgICAgICAgICBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5v
ZGUoKSkpOworICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCkpOwogICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ2hlY2tJbkJvdW5kczogewpA
QCAtMzI1LDE1ICszMjUsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
RWRnZSBpbmRleCA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobV9ncmFwaC5pc0ludDMyQ29uc3RhbnQoaW5kZXgubm9kZSgpKSkgeworICAgICAgICAgICAg
aWYgKGluZGV4LT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgIHNvdXJjZSA9
IEVkZ2UoKTsKLSAgICAgICAgICAgICAgICBhZGRlbmQgPSBtX2dyYXBoLnZhbHVlT2ZJbnQzMkNv
bnN0YW50KGluZGV4Lm5vZGUoKSk7CisgICAgICAgICAgICAgICAgYWRkZW5kID0gaW5kZXgtPmFz
SW50MzIoKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgaW5kZXgt
Pm9wKCkgPT0gQXJpdGhBZGQKICAgICAgICAgICAgICAgICAmJiBpbmRleC0+aXNCaW5hcnlVc2VL
aW5kKEludDMyVXNlKQotICAgICAgICAgICAgICAgICYmIG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50
KGluZGV4LT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAgICAgICAgICAgJiYgbm9kZS0+Y2hp
bGQyKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgc291cmNlID0gaW5k
ZXgtPmNoaWxkMSgpOwotICAgICAgICAgICAgICAgIGFkZGVuZCA9IG1fZ3JhcGgudmFsdWVPZklu
dDMyQ29uc3RhbnQoaW5kZXgtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgYWRk
ZW5kID0gaW5kZXgtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIHNvdXJjZSA9IGluZGV4OwogICAgICAgICAgICAgICAgIGFkZGVuZCA9
IDA7CkBAIC0zNDEsNyArMzQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgcmV0dXJuIFJhbmdlS2V5QW5kQWRkZW5kKFJhbmdlS2V5OjphcnJheUJvdW5kcyhzb3VyY2Us
IGtleSksIGFkZGVuZCk7CiAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw4IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIG1faml0Q29k
ZS0+Y29tbW9uLmRvdWJsZUNvbnN0YW50cyA9IHN0ZDo6bW92ZShtX2dyYXBoLm1fZG91YmxlQ29u
c3RhbnRzKTsKICNlbmRpZgorICAgIAorICAgIG1fZ3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMo
KTsKIAogICAgIEJpdFZlY3RvciB1c2VkSnVtcFRhYmxlczsKICAgICBmb3IgKEJhZzxTd2l0Y2hE
YXRhPjo6aXRlcmF0b3IgaXRlciA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlK
U1ZhbHVlLmNwcAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMYXp5SlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDE0ICszNiwxNCBAQCBKU1Zh
bHVlIExhenlKU1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvCiB7CiAgICAgc3dpdGNoIChtX2tp
bmQpIHsKICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgIHJldHVybiB2YWx1ZSgpOworICAg
ICAgICByZXR1cm4gdmFsdWUoKS0+dmFsdWUoKTsKICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0
cmluZzoKICAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCZ2bSwgdS5jaGFy
YWN0ZXIpOwogICAgIGNhc2UgS25vd25TdHJpbmdJbXBsOgogICAgICAgICByZXR1cm4ganNTdHJp
bmcoJnZtLCB1LnN0cmluZ0ltcGwpOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiB2YWx1ZSgpOworICAgIHJldHVybiBKU1ZhbHVlKCk7CiB9CiAK
IHN0YXRpYyBUcmlTdGF0ZSBlcXVhbFRvU2luZ2xlQ2hhcmFjdGVyKEpTVmFsdWUgdmFsdWUsIFVD
aGFyIGNoYXJhY3RlcikKQEAgLTgxLDExICs4MSwxMSBAQCBUcmlTdGF0ZSBMYXp5SlNWYWx1ZTo6
c3RyaWN0RXF1YWwoY29uc3QgCiAgICAgY2FzZSBLbm93blZhbHVlOgogICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgewogICAgICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90aGVyLnZhbHVlKCkpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSgpLT52YWx1
ZSgpLCBvdGhlci52YWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0
ZXJTdHJpbmc6Ci0gICAgICAgICAgICByZXR1cm4gZXF1YWxUb1NpbmdsZUNoYXJhY3Rlcih2YWx1
ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gZXF1YWxUb1Npbmds
ZUNoYXJhY3Rlcih2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5jaGFyYWN0ZXIoKSk7CiAgICAgICAg
IGNhc2UgS25vd25TdHJpbmdJbXBsOgotICAgICAgICAgICAgcmV0dXJuIGVxdWFsVG9TdHJpbmdJ
bXBsKHZhbHVlKCksIG90aGVyLnN0cmluZ0ltcGwoKSk7CisgICAgICAgICAgICByZXR1cm4gZXF1
YWxUb1N0cmluZ0ltcGwodmFsdWUoKS0+dmFsdWUoKSwgb3RoZXIuc3RyaW5nSW1wbCgpKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoK
QEAgLTExNyw3ICsxMTcsNyBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyCiB7CiAgICAgc3dpdGNoIChtX2tpbmQpIHsKICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAg
ICAgIHZhbHVlKCkuZHVtcEluQ29udGV4dChvdXQsIGNvbnRleHQpOworICAgICAgICB2YWx1ZSgp
LT5kdW1wSW5Db250ZXh0KG91dCwgY29udGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNl
IFNpbmdsZUNoYXJhY3RlclN0cmluZzoKICAgICAgICAgb3V0LnByaW50KCJMYXp5OlNpbmdsZUNo
YXJhY3RlclN0cmluZygiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xh
enlKU1ZhbHVlLmgJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGF6eUpTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKLSNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiREZH
RnJvemVuVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQ0LDEwICs0NCwxMCBAQCBlbnVtIExhemlu
ZXNzS2luZCB7CiAKIGNsYXNzIExhenlKU1ZhbHVlIHsKIHB1YmxpYzoKLSAgICBMYXp5SlNWYWx1
ZShKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIExhenlKU1ZhbHVlKEZyb3plblZhbHVl
KiB2YWx1ZSA9IEZyb3plblZhbHVlOjplbXB0eVNpbmdsZXRvbigpKQogICAgICAgICA6IG1fa2lu
ZChLbm93blZhbHVlKQogICAgIHsKLSAgICAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSk7CisgICAgICAgIHUudmFsdWUgPSB2YWx1ZTsKICAgICB9CiAgICAgCiAgICAgc3RhdGlj
IExhenlKU1ZhbHVlIHNpbmdsZUNoYXJhY3RlclN0cmluZyhVQ2hhciBjaGFyYWN0ZXIpCkBAIC02
NiwxOSArNjYsMTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKLSAgICBKU1ZhbHVlIHRyeUdldFZhbHVlKCkgY29uc3QKKyAgICBGcm96ZW5WYWx1ZSogdHJ5
R2V0VmFsdWUoR3JhcGgmKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1fa2luZCA9PSBLbm93
blZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7Ci0gICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KICAgICAKICAgICBKU1ZhbHVl
IGdldFZhbHVlKFZNJikgY29uc3Q7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0Cisg
ICAgRnJvemVuVmFsdWUqIHZhbHVlKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2tp
bmQgPT0gS25vd25WYWx1ZSk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS52YWx1
ZSk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOwogICAgIH0KICAgICAKICAgICBVQ2hhciBjaGFy
YWN0ZXIoKSBjb25zdApAQCAtMTAyLDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZm9y
IGEga2luZCBvZiB2YWx1ZSB0aGF0IGNhbid0LgogICAgICAgICBzd2l0Y2ggKG1fa2luZCkgewog
ICAgICAgICBjYXNlIEtub3duVmFsdWU6Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUoKS5hc0lu
dDMyKCk7CisgICAgICAgICAgICByZXR1cm4gdmFsdWUoKS0+dmFsdWUoKS5hc0ludDMyKCk7CiAg
ICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgogICAgICAgICAgICAgcmV0dXJuIGNo
YXJhY3RlcigpOwogICAgICAgICBkZWZhdWx0OgpAQCAtMTE2LDcgKzExNiw3IEBAIHB1YmxpYzoK
ICAgICAKIHByaXZhdGU6CiAgICAgdW5pb24gewotICAgICAgICBFbmNvZGVkSlNWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgRnJvemVuVmFsdWUqIHZhbHVlOwogICAgICAgICBVQ2hhciBjaGFyYWN0ZXI7
CiAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZ0ltcGw7CiAgICAgfSB1OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmNwcAkocmV2aXNpb24gMTY5
NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMCArMzksOCBAQCBNaW5pZmllZE5vZGUgTWlu
aWZpZWROb2RlOjpmcm9tTm9kZShOb2RlCiAgICAgTWluaWZpZWROb2RlIHJlc3VsdDsKICAgICBy
ZXN1bHQubV9pZCA9IE1pbmlmaWVkSUQobm9kZSk7CiAgICAgcmVzdWx0Lm1fb3AgPSBub2RlLT5v
cCgpOwotICAgIGlmIChoYXNDb25zdGFudE51bWJlcihub2RlLT5vcCgpKSkKLSAgICAgICAgcmVz
dWx0Lm1faW5mbyA9IG5vZGUtPmNvbnN0YW50TnVtYmVyKCk7Ci0gICAgZWxzZSBpZiAoaGFzV2Vh
a0NvbnN0YW50KG5vZGUtPm9wKCkpKQotICAgICAgICByZXN1bHQubV9pbmZvID0gYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+d2Vha0NvbnN0YW50KCkpOworICAgIGlmIChoYXNDb25zdGFu
dChub2RlLT5vcCgpKSkKKyAgICAgICAgcmVzdWx0Lm1faW5mbyA9IEpTVmFsdWU6OmVuY29kZShu
b2RlLT5hc0pTVmFsdWUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ID09IFBoYW50b21Bcmd1bWVudHMpOwogICAgICAgICByZXN1bHQubV9pbmZvID0gMDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24g
MTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNDIsNyArNDIsNiBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmll
ZEdyYXBoKE5vZGVUCiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgSW50NTJDb25zdGFu
dDoKICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAg
ICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgpAQCAtNTksMjIgKzU4LDExIEBAIHB1YmxpYzoKICAgICBNaW5pZmllZElEIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQogICAgIE5vZGVUeXBlIG9wKCkgY29uc3QgeyByZXR1cm4gbV9v
cDsgfQogICAgIAotICAgIGJvb2wgaGFzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNDb25z
dGFudE51bWJlcigpIHx8IGhhc1dlYWtDb25zdGFudCgpOyB9CisgICAgYm9vbCBoYXNDb25zdGFu
dCgpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0YW50KG1fb3ApOyB9CiAgICAgCi0gICAgYm9vbCBo
YXNDb25zdGFudE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGhhc0NvbnN0YW50TnVtYmVyKG1fb3Ap
OyB9Ci0gICAgCi0gICAgdW5zaWduZWQgY29uc3RhbnROdW1iZXIoKSBjb25zdAorICAgIEpTVmFs
dWUgY29uc3RhbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc0NvbnN0YW50TnVt
YmVyKG1fb3ApKTsKLSAgICAgICAgcmV0dXJuIG1faW5mbzsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBoYXNXZWFrQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBoYXNXZWFrQ29uc3RhbnQobV9vcCk7
IH0KLSAgICAKLSAgICBKU0NlbGwqIHdlYWtDb25zdGFudCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBBU1NFUlQoaGFzV2Vha0NvbnN0YW50KG1fb3ApKTsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxKU0NlbGwqPihtX2luZm8pOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGJp
dHdpc2VfY2FzdDxFbmNvZGVkSlNWYWx1ZT4obV9pbmZvKSk7CiAgICAgfQogICAgIAogICAgIHN0
YXRpYyBNaW5pZmllZElEIGdldElEKE1pbmlmaWVkTm9kZSogbm9kZSkgeyByZXR1cm4gbm9kZS0+
aWQoKTsgfQpAQCAtODQsMTcgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiBwcml2YXRl
OgotICAgIHN0YXRpYyBib29sIGhhc0NvbnN0YW50TnVtYmVyKE5vZGVUeXBlIHR5cGUpCisgICAg
c3RhdGljIGJvb2wgaGFzQ29uc3RhbnQoTm9kZVR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0eXBlID09IEpTQ29uc3RhbnQgfHwgdHlwZSA9PSBJbnQ1MkNvbnN0YW50IHx8IHR5cGUg
PT0gRG91YmxlQ29uc3RhbnQ7CiAgICAgfQotICAgIHN0YXRpYyBib29sIGhhc1dlYWtDb25zdGFu
dChOb2RlVHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUgPT0gV2Vha0pTQ29u
c3RhbnQ7Ci0gICAgfQogICAgIAogICAgIE1pbmlmaWVkSUQgbV9pZDsKLSAgICB1aW50cHRyX3Qg
bV9pbmZvOworICAgIHVpbnQ2NF90IG1faW5mbzsKICAgICBOb2RlVHlwZSBtX29wOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2OTY4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MDYsMTEgKzQwNiw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICBib29sIGlzV2Vha0NvbnN0YW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvcCgpID09IFdl
YWtKU0NvbnN0YW50OwotICAgIH0KLSAgICAKICAgICBib29sIGlzUGhhbnRvbUFyZ3VtZW50cygp
CiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBQaGFudG9tQXJndW1lbnRzOwpAQCAtNDIy
LDcgKzQxNyw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgogICAg
ICAgICBjYXNlIERvdWJsZUNvbnN0YW50OgogICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6Ci0g
ICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgpAQCAtNDMwLDEz
ICs0MjQsMTYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogCi0gICAgdW5zaWdu
ZWQgY29uc3RhbnROdW1iZXIoKQorICAgIEZyb3plblZhbHVlKiBjb25zdGFudCgpCiAgICAgewot
ICAgICAgICBBU1NFUlQoaXNDb25zdGFudCgpKTsKLSAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwor
ICAgICAgICBBU1NFUlQoaGFzQ29uc3RhbnQoKSk7CisgICAgICAgIGlmIChvcCgpID09IFBoYW50
b21Bcmd1bWVudHMpCisgICAgICAgICAgICByZXR1cm4gRnJvemVuVmFsdWU6OmVtcHR5U2luZ2xl
dG9uKCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8RnJvemVuVmFsdWUqPihtX29wSW5m
byk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQodW5zaWduZWQgY29u
c3RhbnROdW1iZXIpCisgICAgLy8gRG9uJ3QgY2FsbCB0aGlzIGRpcmVjdGx5IC0gdXNlIEdyYXBo
Ojpjb252ZXJ0VG9Db25zdGFudCgpIGluc3RlYWQhCisgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFu
dChGcm96ZW5WYWx1ZSogdmFsdWUpCiAgICAgewogICAgICAgICBpZiAoaGFzRG91YmxlUmVzdWx0
KCkpCiAgICAgICAgICAgICBtX29wID0gRG91YmxlQ29uc3RhbnQ7CkBAIC00NDUsMTUgKzQ0Miw3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9vcCA9IEpTQ29u
c3RhbnQ7CiAgICAgICAgIG1fZmxhZ3MgJj0gfihOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0
Q2xvYmJlciB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKLSAgICAgICAgbV9vcEluZm8gPSBjb25zdGFu
dE51bWJlcjsKLSAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjb252ZXJ0VG9XZWFrQ29uc3RhbnQoSlNDZWxsKiBjZWxsKQotICAgIHsKLSAgICAgICAgbV9v
cCA9IFdlYWtKU0NvbnN0YW50OwotICAgICAgICBtX2ZsYWdzICY9IH4oTm9kZU11c3RHZW5lcmF0
ZSB8IE5vZGVNaWdodENsb2JiZXIgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7Ci0gICAgICAgIG1fb3BJ
bmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oY2VsbCk7CisgICAgICAgIG1fb3BJbmZvID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOwogICAgICAgICBjaGlsZHJlbi5yZXNldCgp
OwogICAgIH0KICAgICAKQEAgLTUxOCw1MiArNTA3LDc3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgbV9vcCA9IFRvU3RyaW5nOwogICAgIH0KICAgICAKLSAgICBKU0NlbGwqIHdlYWtDb25zdGFu
dCgpCisgICAgSlNWYWx1ZSBhc0pTVmFsdWUoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKG9wKCkg
PT0gV2Vha0pTQ29uc3RhbnQpOwotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEpTQ2VsbCo+
KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuIGNvbnN0YW50KCktPnZhbHVlKCk7CiAgICAgfQog
ICAgIAotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgYm9vbCBpc0ludDMyQ29uc3RhbnQoKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChvcCgp
KSB7Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSh3ZWFrQ29uc3RhbnQoKSk7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgICAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVyKCkpLmdldCgpOwotICAgICAgICBjYXNlIFBoYW50
b21Bcmd1bWVudHM6Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7IC8vIEhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZyBpbiByZWxl
YXNlIG1vZGUuCi0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25z
dGFudCgpLT52YWx1ZSgpLmlzSW50MzIoKTsKICAgICB9Ci0KLSAgICBib29sIGlzSW50MzJDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICAKKyAgICBpbnQzMl90IGFzSW50MzIoKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiB2YWx1ZU9mSlNDb25zdGFudChj
b2RlQmxvY2spLmlzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIGFzSlNWYWx1ZSgpLmFzSW50MzIo
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KENvZGVCbG9jayogY29k
ZUJsb2NrKQorICAgIHVpbnQzMl90IGFzVUludDMyKCkKICAgICB7Ci0gICAgICAgIGJvb2wgcmVz
dWx0ID0gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNvZGVCbG9jaykuaXNEb3Vi
bGUoKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIEFTU0VSVCghaXNJbnQzMkNv
bnN0YW50KGNvZGVCbG9jaykpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gYXNJbnQzMigpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzTnVtYmVyQ29uc3RhbnQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgYm9vbCBpc0RvdWJsZUNvbnN0YW50KCkKICAgICB7Ci0g
ICAgICAgIGJvb2wgcmVzdWx0ID0gaXNDb25zdGFudCgpICYmIHZhbHVlT2ZKU0NvbnN0YW50KGNv
ZGVCbG9jaykuaXNOdW1iZXIoKTsKLSAgICAgICAgQVNTRVJUKHJlc3VsdCA9PSAoaXNJbnQzMkNv
bnN0YW50KGNvZGVCbG9jaykgfHwgaXNEb3VibGVDb25zdGFudChjb2RlQmxvY2spKSk7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgY29uc3Rh
bnQoKS0+dmFsdWUoKS5pc0RvdWJsZSgpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzTnVtYmVy
Q29uc3RhbnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzQ29uc3RhbnQoKSAmJiBjb25zdGFu
dCgpLT52YWx1ZSgpLmlzTnVtYmVyKCk7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBhc051bWJl
cigpCisgICAgeworICAgICAgICByZXR1cm4gYXNKU1ZhbHVlKCkuYXNOdW1iZXIoKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc01hY2hpbmVJbnRDb25zdGFudCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCktPnZhbHVlKCkuaXNNYWNoaW5lSW50KCk7
CisgICAgfQorICAgIAorICAgIGludDY0X3QgYXNNYWNoaW5lSW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBhc0pTVmFsdWUoKS5hc01hY2hpbmVJbnQoKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc0Jvb2xlYW5Db25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBib29sIGlzQm9v
bGVhbkNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NvbnN0YW50KCkgJiYgdmFs
dWVPZkpTQ29uc3RhbnQoY29kZUJsb2NrKS5pc0Jvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIGlz
Q29uc3RhbnQoKSAmJiBjb25zdGFudCgpLT52YWx1ZSgpLmlzQm9vbGVhbigpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGFzQm9vbGVhbigpCisgICAgeworICAgICAgICByZXR1cm4gY29uc3RhbnQo
KS0+dmFsdWUoKS5hc0Jvb2xlYW4oKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NlbGxDb25z
dGFudCgpCisgICAgeworICAgICAgICByZXR1cm4gaXNDb25zdGFudCgpICYmIGNvbnN0YW50KCkt
PnZhbHVlKCkuaXNDZWxsKCk7CisgICAgfQorICAgIAorICAgIEpTQ2VsbCogYXNDZWxsKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBjb25zdGFudCgpLT52YWx1ZSgpLmFzQ2VsbCgpOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZHluYW1pY0Nhc3RDb25zdGFu
dCgpCisgICAgeworICAgICAgICBpZiAoIWlzQ2VsbENvbnN0YW50KCkpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGpzRHluYW1pY0Nhc3Q8VD4oYXNDZWxsKCkp
OwogICAgIH0KICAgICAKICAgICBib29sIGNvbnRhaW5zTW92SGludCgpCkBAIC0xMDUwLDEyICsx
MDY0LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KIAotICAgIEpTQ2VsbCog
ZnVuY3Rpb24oKQorICAgIEZyb3plblZhbHVlKiBmdW5jdGlvbigpCiAgICAgewogICAgICAgICBB
U1NFUlQoaGFzRnVuY3Rpb24oKSk7Ci0gICAgICAgIEpTQ2VsbCogcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxKU0Z1bmN0aW9uKj4obV9vcEluZm8pOwotICAgICAgICBBU1NFUlQoSlNWYWx1ZShy
ZXN1bHQpLmlzRnVuY3Rpb24oKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEZyb3plblZhbHVlKj4obV9vcEluZm8pOwogICAgIH0KICAg
ICAKICAgICBib29sIGhhc0V4ZWN1dGFibGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oRG91YmxlQ29uc3RhbnQs
IE5vZGVSZXN1bHREb3VibGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhJbnQ1MkNv
bnN0YW50LCBOb2RlUmVzdWx0SW50NTIgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBcCi0gICAg
LyogQSBjb25zdGFudCBub3QgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0YW50IHBvb2wuIFVzZXMg
Z2V0IHBhdGNoZWQgdG8ganVtcHMgdGhhdCBleGl0IHRoZSAqL1wKLSAgICAvKiBjb2RlIGJsb2Nr
LiAqL1wKLSAgICBtYWNybyhXZWFrSlNDb25zdGFudCwgTm9kZVJlc3VsdEpTIHwgTm9kZURvZXNO
b3RFeGl0KSBcCi0gICAgXAogICAgIC8qIE1hcmtlciB0byBpbmRpY2F0ZSB0aGF0IGFuIG9wZXJh
dGlvbiB3YXMgb3B0aW1pemVkIGVudGlyZWx5IGFuZCBhbGwgdGhhdCBpcyBsZWZ0ICovXAogICAg
IC8qIGlzIHRvIG1ha2Ugb25lIG5vZGUgYWxpYXMgYW5vdGhlci4gQ1NFIHdpbGwgbGF0ZXIgdXN1
YWxseSBlbGltaW5hdGUgdGhpcyBub2RlLCAqL1wKICAgICAvKiB0aG91Z2ggaXQgbWF5IGNob29z
ZSBub3QgdG8gaWYgaXQgd291bGQgY29ycnVwdCBwcmVkaWN0aW9ucyAodmVyeSByYXJlKS4gKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9p
ZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIFByb2ZpbGVyOjpPU1JFeGl0KiBwcm9maWxlckV4aXQgPSBjb21waWxhdGlvbi0+YWRkT1NS
RXhpdCgKICAgICAgICAgICAgICAgICBleGl0SW5kZXgsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhk
YXRhYmFzZSwgY29kZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAgICAgICAgICAg
ZXhpdC5tX2tpbmQsIGlzV2F0Y2hwb2ludChleGl0Lm1fa2luZCkpOworICAgICAgICAgICAgICAg
IGV4aXQubV9raW5kLCBleGl0Lm1fa2luZCA9PSBVbmNvdW50YWJsZUludmFsaWRhdGlvbik7CiAg
ICAgICAgICAgICBqaXQuYWRkNjQoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxs
SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKHByb2ZpbGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkp
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsOSArMTM1LDggQEAgcHJp
dmF0ZToKICAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgSlNDb25zdGFudDoKLSAgICAgICAgY2FzZSBXZWFr
SlNDb25zdGFudDogewotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IHNwZWN1bGF0
aW9uRnJvbVZhbHVlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6IHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHR5cGUgPSBzcGVj
dWxhdGlvbkZyb21WYWx1ZShub2RlLT5hc0pTVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAodHlw
ZSA9PSBTcGVjSW50NTJBc0RvdWJsZSAmJiBlbmFibGVJbnQ1MigpKQogICAgICAgICAgICAgICAg
IHR5cGUgPSBTcGVjSW50NTI7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24o
dHlwZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNiBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBKU0NvbnN0YW50Ogog
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CiAgICAgY2FzZSBJbnQ1MkNvbnN0YW50OgotICAgIGNh
c2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIFRvVGhpczoK
ICAgICBjYXNlIENyZWF0ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDExICs1OCwxMiBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpmaWxs
SlNWYWx1ZShFZGdlIGVkCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7CiAgICAg
ICAgICAgICB0YWdHUFIgPSBhbGxvY2F0ZSgpOwogICAgICAgICAgICAgcGF5bG9hZEdQUiA9IGFs
bG9jYXRlKCk7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKEltbTMyKHZhbHVlT2ZKU0NvbnN0YW50
KGVkZ2Uubm9kZSgpKS50YWcoKSksIHRhZ0dQUik7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKElt
bTMyKHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKS5wYXlsb2FkKCkpLCBwYXlsb2FkR1BS
KTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoSW1tMzIodmFsdWUudGFnKCkpLCB0YWdHUFIpOworICAgICAgICAg
ICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZS5wYXlsb2FkKCkpLCBwYXlsb2FkR1BSKTsKICAgICAg
ICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnR1BSLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJD
b25zdGFudCk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWluKHBheWxvYWRHUFIsIHZpcnR1YWxS
ZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIGluZm8uZmlsbEpTVmFs
dWUoKm1fc3RyZWFtLCB0YWdHUFIsIHBheWxvYWRHUFIsIGlzSW50MzJDb25zdGFudChlZGdlLm5v
ZGUoKSkgPyBEYXRhRm9ybWF0SlNJbnQzMiA6IERhdGFGb3JtYXRKUyk7CisgICAgICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKCptX3N0cmVhbSwgdGFnR1BSLCBwYXlsb2FkR1BSLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1h
dCA9IGluZm8uc3BpbGxGb3JtYXQoKTsKICAgICAgICAgICAgIEFTU0VSVChzcGlsbEZvcm1hdCAh
PSBEYXRhRm9ybWF0Tm9uZSAmJiBzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFnZSk7CkBA
IC03MzYsNyArNzM3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
MwogICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVn
aXN0ZXIoKTsKICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZp
cnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogCi0gICAgaWYgKGVkZ2UtPmhhc0NvbnN0
YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpIHsKKyAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIDAp
OwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50MzI7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZSgpOwpAQCAtNzQ1LDkgKzc0Niw5IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludDMKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewog
ICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50
KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgIEFTU0VSVChlZGdlLT5pc0ludDMyQ29uc3RhbnQoKSk7CiAgICAgICAgICAg
ICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7
CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMihlZGdlLT5hc0lu
dDMyKCkpLCBncHIpOwogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgIGluZm8uZmlsbEludDMyKCpt
X3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQz
MjsKQEAgLTgzNSw3ICs4MzYsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVEb3ViCiAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkg
ewogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc051bWJlckNvbnN0YW50KGVkZ2Uubm9kZSgpKSk7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChlZGdlLT5pc051bWJlckNvbnN0YW50KCkpOwogICAgICAgICAgICAgRlBS
UmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKGFk
ZHJlc3NPZkRvdWJsZUNvbnN0YW50KGVkZ2Uubm9kZSgpKSwgZnByKTsKICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBA
IC04NzQsNyArODc1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAg
ICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7CiAgICAgICAgICAgICBpZiAoanNWYWx1ZS5p
c0NlbGwoKSkgewogICAgICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJDb25zdGFudCk7CkBAIC05NjMsNyArOTY0LDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSBqc1Zh
bHVlID0gdmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgSlNWYWx1
ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0g
YWxsb2NhdGUoKTsKICAgICAgICAgICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigpKSB7CiAgICAg
ICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckNvbnN0YW50KTsKQEAgLTE2ODMsMTEgKzE2ODQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGluaXRDb25zdGFudEluZm8obm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogCi0gICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgbV9qaXQuYWRk
V2Vha1JlZmVyZW5jZShub2RlLT53ZWFrQ29uc3RhbnQoKSk7Ci0gICAgICAgIGluaXRDb25zdGFu
dEluZm8obm9kZSk7Ci0gICAgICAgIGJyZWFrOwotCiAgICAgY2FzZSBJZGVudGl0eTogewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTE4
NTYsMTggKzE4NTIsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBCaXRYb3I6Ci0g
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgeworICAg
ICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPmlzSW50MzJDb25zdGFudCgpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIG9wMik7CiAKLSAgICAgICAg
ICAgIGJpdE9wKG9wLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkp
LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgICAgICBiaXRPcChvcCwgbm9kZS0+
Y2hpbGQxKCktPmFzSW50MzIoKTssIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAg
ICAgICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIGlm
IChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICB9IGVs
c2UgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOwogCi0gICAgICAgICAg
ICBiaXRPcChvcCwgdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSwg
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIG5vZGUtPmNo
aWxkMigpLT5hc0ludDMyKCksIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAg
ICAgaW50MzJSZXN1bHQocmVzdWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKQEAg
LTE4ODYsMTEgKzE4ODIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIGNhc2UgQml0UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2Ug
Qml0VVJTaGlmdDoKLSAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3Ax
KTsKIAotICAgICAgICAgICAgc2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25z
dGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgICAgIHNoaWZ0T3Aob3AsIG9wMS5ncHIoKSwgbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKSAm
IDB4MWYsIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yMTU4LDcgKzIxNTQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAg
ICAgICAKICAgICBjYXNlIENvbXBhcmVFcUNvbnN0YW50OgotICAgICAgICBBU1NFUlQoaXNOdWxs
Q29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5j
aGlsZDIoKS0+YXNKU1ZhbHVlKCkuaXNOdWxsKCkpOwogICAgICAgICBpZiAobm9uU3BlY3VsYXRp
dmVDb21wYXJlTnVsbChub2RlLCBub2RlLT5jaGlsZDEoKSkpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCwyMSArODAsOSBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2Ug
CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5o
YXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9k
ZSgpKSkgewotICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRKU0ludDMyKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBq
c051bWJlcih2YWx1ZU9mSW50MzJDb25zdGFudChlZGdlLm5vZGUoKSkpOwotICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KEpTVmFsdWU6OmVuY29kZShqc1Zh
bHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyQ29uc3RhbnQoZWRn
ZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZSgqbV9zdHJlYW0s
IGdwciwgRGF0YUZvcm1hdEpTRG91YmxlKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUoSlNWYWx1ZTo6RW5jb2RlQXNEb3VibGUsIHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5v
ZGUoKSkpOwotICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0
KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0pTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAgICAg
ICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUo
KSk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShqc1ZhbHVlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5m
by5maWxsSlNWYWx1ZSgqbV9zdHJlYW0sIGdwciwgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAg
IH0KLQorICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKKyAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUo
Km1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBtX2dwcnMucmV0YWlu
KGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgRGF0YUZvcm1hdCBzcGlsbEZvcm1hdCA9IGluZm8uc3BpbGxGb3Jt
YXQoKTsKQEAgLTcyNiw3ICs3MTQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVJbnQzCiAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVkZ2UtPnZp
cnR1YWxSZWdpc3RlcigpOwogICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbklu
Zm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CiAKLSAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSkgeworICAgIGlm
IChlZGdlLT5oYXNDb25zdGFudCgpICYmICFlZGdlLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAg
ICAgICAvLyBQcm90ZWN0IHRoZSBzaWxlbnQgc3BpbGwvZmlsbCBsb2dpYyBieSBmYWlsaW5nIGVh
cmx5LiBJZiB3ZSAic3BlY3VsYXRlIiBvbgogICAgICAgICAvLyB0aGUgY29uc3RhbnQgdGhlbiB0
aGUgc2lsZW50IGZpbGxlciBtYXkgdGhpbmsgdGhhdCB3ZSBoYXZlIGFuIGludDMyIGFuZCBhCiAg
ICAgICAgIC8vIGNvbnN0YW50LCBzbyBpdCB3aWxsIHRyeSB0byBmaWxsIHRoaXMgYXMgYW4gaW50
MzIgY29uc3RhbnQuIEJhZCB0aGluZ3Mgd2lsbApAQCAtNzQyLDggKzczMCw4IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludDMKIAogICAgICAgICBpZiAoZWRnZS0+aGFz
Q29uc3RhbnQoKSkgewogICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgIEFTU0VSVChpc0ludDMyQ29u
c3RhbnQoZWRnZS5ub2RlKCkpKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OkltbTMyKHZhbHVlT2ZJbnQzMkNvbnN0YW50KGVkZ2Uubm9kZSgpKSksIGdwcik7CisgICAg
ICAgICAgICBBU1NFUlQoZWRnZS0+aXNJbnQzMkNvbnN0YW50KCkpOworICAgICAgICAgICAgbV9q
aXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tMzIoZWRnZS0+YXNJbnQzMigpKSwgZ3ByKTsKICAg
ICAgICAgICAgIGluZm8uZmlsbEludDMyKCptX3N0cmVhbSwgZ3ByKTsKICAgICAgICAgICAgIHJl
dHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnQzMjsKICAgICAgICAgICAgIHJldHVybiBncHI7CkBA
IC04NzgsNyArODY2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
NQogCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFG
b3JtYXROb25lOiB7Ci0gICAgICAgIGlmICgoZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhdmFsdWVP
ZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpLmlzTWFjaGluZUludCgpKSkgeworICAgICAgICBpZiAo
ZWRnZS0+aGFzQ29uc3RhbnQoKSAmJiAhZWRnZS0+aXNNYWNoaW5lSW50Q29uc3RhbnQoKSkgewog
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIDApOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAg
IH0KQEAgLTg4Niw3ICs4NzQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVJbnQ1CiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxvY2F0ZSgpOwogCiAgICAgICAgIGlmIChl
ZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1
ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUg
PSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAgIEFTU0VSVChqc1ZhbHVlLmlzTWFjaGlu
ZUludCgpKTsKICAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJDb25zdGFudCk7CiAgICAgICAgICAgICBpbnQ2NF90IHZhbHVlID0ganNWYWx1
ZS5hc01hY2hpbmVJbnQoKTsKQEAgLTk2Nyw5ICs5NTUsOSBAQCBGUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7
CiAgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKIAotICAgICAgICAgICAgaWYg
KGlzTnVtYmVyQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoZWRnZS0+
aXNOdW1iZXJDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFs
bG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1t
NjQocmVpbnRlcnByZXREb3VibGVUb0ludDY0KHZhbHVlT2ZOdW1iZXJDb25zdGFudChlZGdlLm5v
ZGUoKSkpKSwgZ3ByKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpJbW02NChyZWludGVycHJldERvdWJsZVRvSW50NjQoZWRnZS0+YXNOdW1iZXIoKSkpLCBncHIp
OwogICAgICAgICAgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKGdwciwgZnByKTsKICAgICAg
ICAgICAgICAgICB1bmxvY2soZ3ByKTsKIApAQCAtMTAxMCw3ICs5OTgsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOwogCiAgICAgICAgIGlmIChlZGdlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAg
ICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChlZGdlLm5vZGUoKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSBlZGdlLT5hc0pTVmFsdWUoKTsKICAgICAgICAgICAg
IGlmIChqc1ZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2Rl
KGpzVmFsdWUpKSwgZ3ByKTsKQEAgLTEwOTEsNyArMTA3OSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7
CiAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAg
IEpTVmFsdWUganNWYWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYgKGpz
VmFsdWUuaXNCb29sZWFuKCkpIHsKICAgICAgICAgICAgICAgICBtX2dwcnMucmV0YWluKGdwciwg
dmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNW
YWx1ZSkpLCBncHIpOwpAQCAtMTc5MSwxMSArMTc3OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgaW5pdENvbnN0YW50SW5mbyhub2RlKTsKICAg
ICAgICAgYnJlYWs7CiAKLSAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgotICAgICAgICBtX2ppdC5h
ZGRXZWFrUmVmZXJlbmNlKG5vZGUtPndlYWtDb25zdGFudCgpKTsKLSAgICAgICAgaW5pdENvbnN0
YW50SW5mbyhub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICAgIAogICAgIGNhc2UgSWRlbnRp
dHk6IHsKICAgICAgICAgLy8gQ1NFIHNob3VsZCBhbHdheXMgZWxpbWluYXRlIHRoaXMuCiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xOTU5LDE4ICsxOTQyLDE4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEJpdEFu
ZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNhc2UgQml0WG9yOgotICAgICAgICBpZiAoaXNJbnQz
MkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMsIFJldXNlLCBvcDIpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFs
dWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSwgb3AyLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIG5vZGUtPmNoaWxkMSgpLT5hc0ludDMy
KCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50MzJSZXN1bHQo
cmVzdWx0LmdwcigpLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgeworICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmNoaWxk
MigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIFJldXNlLCBvcDEpOwogCi0gICAgICAgICAgICBiaXRPcChvcCwgdmFsdWVP
ZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSwgb3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOworICAgICAgICAgICAgYml0T3Aob3AsIG5vZGUtPmNoaWxkMigpLT5hc0ludDMyKCks
IG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgaW50MzJSZXN1bHQocmVz
dWx0LmdwcigpLCBub2RlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE5ODksMTEgKzE5NzIsMTEg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgQml0
UlNoaWZ0OgogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKLSAgICAg
ICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgICAg
IGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgb3AxKTsKIAotICAgICAgICAgICAg
c2hpZnRPcChvcCwgb3AxLmdwcigpLCB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIo
KS5ub2RlKCkpICYgMHgxZiwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIHNoaWZ0T3Aob3As
IG9wMS5ncHIoKSwgbm9kZS0+Y2hpbGQyKCktPmFzSW50MzIoKSAmIDB4MWYsIHJlc3VsdC5ncHIo
KSk7CiAKICAgICAgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0yMjYzLDcgKzIyNDYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIENv
bXBhcmVFcUNvbnN0YW50OgotICAgICAgICBBU1NFUlQoaXNOdWxsQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5jaGlsZDIoKS0+YXNKU1ZhbHVl
KCkuaXNOdWxsKCkpOwogICAgICAgICBpZiAobm9uU3BlY3VsYXRpdmVDb21wYXJlTnVsbChub2Rl
LCBub2RlLT5jaGlsZDEoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwpA
QCAtMzcxOSw3ICszNzAyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICAKICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZEZ1bmN0aW9uLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChm
dW5jdGlvbi5ncHIoKSksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUtPmZ1bmN0aW9uKCkpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRGdW5jdGlvbiwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoZnVuY3Rpb24uZ3ByKCkpLCBub2RlLT5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoV2Vha1B0
cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLT5mdW5jdGlvbigp
LT52YWx1ZSgpLmFzQ2VsbCgpKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0zNzM3LDggKzM3MjAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkpOwogICAgICAgICAKICAgICAgICAgRXhpdEtpbmQgZXhpdEtpbmQ7Ci0gICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCkKLSAgICAgICAgICAgIGV4
aXRLaW5kID0gQmFkV2Vha0NvbnN0YW50Q2FjaGU7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3RhbnRDYWNo
ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsKICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBT
aWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAgICAgIEFTU0VSVChp
bmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgIEFTU0VSVChpc0pTSW50MzIoaW5mby5yZWdp
c3RlckZvcm1hdCgpKSk7CiAgICAgICAgIGlmIChub2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoaXNJbnQzMkNvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIEFTU0VS
VChub2RlLT5pc0ludDMyQ29uc3RhbnQoKSk7CiAgICAgICAgICAgICBmaWxsQWN0aW9uID0gU2V0
SW50MzJDb25zdGFudDsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBmaWxsQWN0aW9uID0g
TG9hZDMyUGF5bG9hZDsKQEAgLTMzOSw4ICszMzksNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFu
IFNwZWN1bGF0aXZlSklUOjpzCiAgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRh
Rm9ybWF0Q2VsbCkgewogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAg
ICAgICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh2
YWx1ZSwgdmFsdWUuaXNDZWxsKCkpOworICAgICAgICAgICAgbm9kZS0+YXNDZWxsKCk7IC8vIFRv
IGdldCB0aGUgYXNzZXJ0aW9uLgogICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldENlbGxDb25z
dGFudDsKICAgICAgICAgfSBlbHNlIHsKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMzgzLDggKzM4
Miw5IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAg
ICBpZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpLmlzQ2VsbCgpKQorICAgICAgICAgICAgaWYgKG5vZGUtPmlzQ2VsbENvbnN0
YW50KCkpCiAgICAgICAgICAgICAgICAgZmlsbEFjdGlvbiA9IFNldFRydXN0ZWRKU0NvbnN0YW50
OworICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXRKU0Nv
bnN0YW50OwogICAgICAgICB9IGVsc2UgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0SW50MzIpIHsKICAgICAgICAgICAgIEFTU0VSVChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9y
bWF0SlNJbnQzMik7CkBAIC00NDIsNyArNDQyLDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBT
cGVjdWxhdGl2ZUpJVDo6cwogICAgICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGlmIChu
b2RlLT5oYXNDb25zdGFudCgpKSB7Ci0gICAgICAgIEFTU0VSVChpc051bWJlckNvbnN0YW50KG5v
ZGUpKTsKKyAgICAgICAgbm9kZS0+YXNOdW1iZXIoKTsgLy8gVG8gZ2V0IHRoZSBhc3NlcnRpb24u
CiAgICAgICAgIGZpbGxBY3Rpb24gPSBTZXREb3VibGVDb25zdGFudDsKICAgICB9IGVsc2Ugewog
ICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXROb25lIHx8IGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKTsKQEAgLTQ1MSw3ICs0NTEsNyBA
QCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgIEFTU0VSVChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSk7CiAgICAgaWYgKG5vZGUtPmhhc0NvbnN0YW50KCkpIHsKLSAgICAgICAgQVNTRVJU
KGlzTnVtYmVyQ29uc3RhbnQobm9kZSkpOworICAgICAgICBub2RlLT5hc051bWJlcigpOyAvLyBU
byBnZXQgdGhlIGFzc2VydGlvbi4KICAgICAgICAgZmlsbEFjdGlvbiA9IFNldERvdWJsZUNvbnN0
YW50OwogICAgIH0gZWxzZQogICAgICAgICBmaWxsQWN0aW9uID0gTG9hZERvdWJsZTsKQEAgLTQ5
NiwyMSArNDk2LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNpbGVudEZpbGwoY29uc3QgU2kK
ICAgICBjYXNlIERvTm90aGluZ0ZvckZpbGw6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2V0
SW50MzJDb25zdGFudDoKLSAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSW50MzJDb25z
dGFudChwbGFuLm5vZGUoKSkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJbW0z
MihwbGFuLm5vZGUoKS0+YXNJbnQzMigpKSwgcGxhbi5ncHIoKSk7CiAgICAgICAgIGJyZWFrOwog
I2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgY2FzZSBTZXRJbnQ1MkNvbnN0YW50OgotICAgICAgICBt
X2ppdC5tb3ZlKEltbTY0KHZhbHVlT2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgpKS5hc01hY2hpbmVJ
bnQoKSA8PCBKU1ZhbHVlOjppbnQ1MlNoaWZ0QW1vdW50KSwgcGxhbi5ncHIoKSk7CisgICAgICAg
IG1faml0Lm1vdmUoSW1tNjQocGxhbi5ub2RlKCktPmFzTWFjaGluZUludCgpIDw8IEpTVmFsdWU6
OmludDUyU2hpZnRBbW91bnQpLCBwbGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTZXRTdHJpY3RJbnQ1MkNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHZhbHVl
T2ZKU0NvbnN0YW50KHBsYW4ubm9kZSgpKS5hc01hY2hpbmVJbnQoKSksIHBsYW4uZ3ByKCkpOwor
ICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHBsYW4ubm9kZSgpLT5hc01hY2hpbmVJbnQoKSksIHBs
YW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogICAg
IGNhc2UgU2V0Qm9vbGVhbkNvbnN0YW50OgotICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
Mih2YWx1ZU9mQm9vbGVhbkNvbnN0YW50KHBsYW4ubm9kZSgpKSksIHBsYW4uZ3ByKCkpOworICAg
ICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihwbGFuLm5vZGUoKS0+YXNCb29sZWFuKCkpLCBw
bGFuLmdwcigpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZXRDZWxsQ29uc3RhbnQ6Ci0g
ICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5v
ZGUoKSkuYXNDZWxsKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tUHRyKHBsYW4ubm9kZSgpLT5hc0NlbGwoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVh
azsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGNhc2UgU2V0VHJ1c3RlZEpTQ29uc3RhbnQ6CkBA
IC01MjAsNyArNTIwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c2lsZW50RmlsbChjb25zdCBT
aQogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlT2ZKU0NvbnN0YW50QXNJbW02NChwbGFuLm5vZGUo
KSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNldERvdWJsZUNvbnN0
YW50OgotICAgICAgICBtX2ppdC5tb3ZlKEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NCh2
YWx1ZU9mTnVtYmVyQ29uc3RhbnQocGxhbi5ub2RlKCkpKSksIGNhblRyYW1wbGUpOworICAgICAg
ICBtX2ppdC5tb3ZlKEltbTY0KHJlaW50ZXJwcmV0RG91YmxlVG9JbnQ2NChwbGFuLm5vZGUoKS0+
YXNOdW1iZXIoKSkpLCBjYW5UcmFtcGxlKTsKICAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUo
Y2FuVHJhbXBsZSwgcGxhbi5mcHIoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTG9hZDMy
UGF5bG9hZEJveEludDoKQEAgLTUzOCwxMCArNTM4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNpbGVudEZpbGwoY29uc3QgU2kKICAgICAgICAgYnJlYWs7CiAjZWxzZQogICAgIGNhc2UgU2V0
SlNDb25zdGFudFRhZzoKLSAgICAgICAgbV9qaXQubW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFu
dChwbGFuLm5vZGUoKSkudGFnKCkpLCBwbGFuLmdwcigpKTsKKyAgICAgICAgbV9qaXQubW92ZShJ
bW0zMihwbGFuLm5vZGUoKS0+YXNKU1ZhbHVlKCkudGFnKCkpLCBwbGFuLmdwcigpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTZXRKU0NvbnN0YW50UGF5bG9hZDoKLSAgICAgICAgbV9qaXQu
bW92ZShJbW0zMih2YWx1ZU9mSlNDb25zdGFudChwbGFuLm5vZGUoKSkucGF5bG9hZCgpKSwgcGxh
bi5ncHIoKSk7CisgICAgICAgIG1faml0Lm1vdmUoSW1tMzIocGxhbi5ub2RlKCktPmFzSlNWYWx1
ZSgpLnBheWxvYWQoKSksIHBsYW4uZ3ByKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNl
dEludDMyVGFnOgogICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZyksIHBsYW4uZ3ByKCkpOwpAQCAtODU1LDEyICs4NTUsOSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSW4oTm9kZSogbm9kCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwotICAgICAgICAKLSAgICBpZiAoaXNDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7
Ci0gICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPQotICAgICAgICAgICAganNEeW5hbWljQ2FzdDxK
U1N0cmluZyo+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwotICAg
ICAgICBpZiAoc3RyaW5nICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkKLSAgICAgICAgICAg
ICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKKyAgICAKKyAgICBp
ZiAoSlNTdHJpbmcqIHN0cmluZyA9IG5vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENvbnN0YW50
PEpTU3RyaW5nKj4oKSkgeworICAgICAgICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSAm
JiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpLT5pc0F0b21pYygpKSB7CiAgICAgICAgICAgICBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkU3R1Yklu
Zm8oKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKQEAgLTEyMTgsMTMgKzEyMTUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlQm9vbAogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAgICB9CiAKLSAgICBpZiAoaXNC
b29sZWFuQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICBib29sIGlt
bSA9IHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPmlzQm9vbGVhbkNvbnN0YW50KCkpIHsKKyAgICAgICAgYm9vbCBp
bW0gPSBub2RlLT5jaGlsZDEoKS0+YXNCb29sZWFuKCk7CiAgICAgICAgIFNwZWN1bGF0ZUJvb2xl
YW5PcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIGJyYW5jaDMyKGNv
bmRpdGlvbiwgSklUQ29tcGlsZXI6OkltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oaW1tKSkpKSwgb3AyLmdwcigpLCB0YWtlbik7Ci0gICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5Db25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAgfSBl
bHNlIGlmIChub2RlLT5jaGlsZDIoKS0+aXNCb29sZWFuQ29uc3RhbnQoKSkgewogICAgICAgICBT
cGVjdWxhdGVCb29sZWFuT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBib29sIGltbSA9IHZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgp
KTsKKyAgICAgICAgYm9vbCBpbW0gPSBub2RlLT5jaGlsZDIoKS0+YXNCb29sZWFuKCk7CiAgICAg
ICAgIGJyYW5jaDMyKGNvbmRpdGlvbiwgb3AxLmdwcigpLCBKSVRDb21waWxlcjo6SW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihpbW0pKSkpLCB0YWtl
bik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQgb3AxKHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTEyNDksMTMgKzEyNDYsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50MwogICAgICAgICBub3RUYWtlbiA9IHRtcDsKICAg
ICB9CiAKLSAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpIHsK
LSAgICAgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+aXNJbnQzMkNvbnN0YW50KCkpIHsK
KyAgICAgICAgaW50MzJfdCBpbW0gPSBub2RlLT5jaGlsZDEoKS0+YXNJbnQzMigpOwogICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKICAgICAg
ICAgYnJhbmNoMzIoY29uZGl0aW9uLCBKSVRDb21waWxlcjo6SW1tMzIoaW1tKSwgb3AyLmdwcigp
LCB0YWtlbik7Ci0gICAgfSBlbHNlIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCku
bm9kZSgpKSkgeworICAgIH0gZWxzZSBpZiAobm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFu
dCgpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUt
PmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGludDMyX3QgaW1tID0gbm9kZS0+Y2hpbGQyKCkt
PmFzSW50MzIoKTsKICAgICAgICAgYnJhbmNoMzIoY29uZGl0aW9uLCBvcDEuZ3ByKCksIEpJVENv
bXBpbGVyOjpJbW0zMihpbW0pLCB0YWtlbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgU3BlY3Vs
YXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkBAIC0xNDE1LDExICsx
NDEyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAg
ICAgICAgICAgIG1fbWluaWZpZWRHcmFwaC0+YXBwZW5kKE1pbmlmaWVkTm9kZTo6ZnJvbU5vZGUo
bV9jdXJyZW50Tm9kZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAgICAgICAgICAgICBtX2pp
dC5hZGRXZWFrUmVmZXJlbmNlKG1fY3VycmVudE5vZGUtPndlYWtDb25zdGFudCgpKTsKLSAgICAg
ICAgICAgICAgICBtX21pbmlmaWVkR3JhcGgtPmFwcGVuZChNaW5pZmllZE5vZGU6OmZyb21Ob2Rl
KG1fY3VycmVudE5vZGUpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIwODgsNyAr
MjA4MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXAoTm8KIHsKICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgTnVtYmVyVXNl
OiB7Ci0gICAgICAgIEFTU0VSVCghaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsgLy8gVGhpcyBzaG91bGQgaGF2ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KKyAgICAgICAg
QVNTRVJUKCFub2RlLT5jaGlsZDEoKS0+aXNOdW1iZXJDb25zdGFudCgpKTsgLy8gVGhpcyBzaG91
bGQgaGF2ZSBiZWVuIGNvbnN0YW50IGZvbGRlZC4KICAgICAKICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCks
IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7CkBAIC0yMjg1LDcgKzIyNzcsNyBAQCBKSVRDb21w
aWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6anVtcEZvCiAgICAgaWYgKEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3ID0gbV9qaXQuZ3JhcGgoKS50cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEobm9k
ZSkpIHsKICAgICAgICAgdWludDMyX3QgbGVuZ3RoID0gdmlldy0+bGVuZ3RoKCk7CiAgICAgICAg
IE5vZGUqIGluZGV4Tm9kZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMSkubm9kZSgpOwot
ICAgICAgICBpZiAobV9qaXQuZ3JhcGgoKS5pc0ludDMyQ29uc3RhbnQoaW5kZXhOb2RlKSAmJiBz
dGF0aWNfY2FzdDx1aW50MzJfdD4obV9qaXQuZ3JhcGgoKS52YWx1ZU9mSW50MzJDb25zdGFudChp
bmRleE5vZGUpKSA8IGxlbmd0aCkKKyAgICAgICAgaWYgKGluZGV4Tm9kZS0+aXNJbnQzMkNvbnN0
YW50KCkgJiYgaW5kZXhOb2RlLT5hc1VJbnQzMigpIDwgbGVuZ3RoKQogICAgICAgICAgICAgcmV0
dXJuIEpJVENvbXBpbGVyOjpKdW1wKCk7CiAgICAgICAgIHJldHVybiBtX2ppdC5icmFuY2gzMigK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tMzIobGVuZ3RoKSk7CkBAIC0yMzgxLDcgKzIzNzMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgR1BSUmVnIHZhbHVlR1BSID0g
SW52YWxpZEdQUlJlZzsKICAgICAKICAgICBpZiAodmFsdWVVc2UtPmlzQ29uc3RhbnQoKSkgewot
ICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZVVzZS5ub2Rl
KCkpOworICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZVVzZS0+YXNKU1ZhbHVlKCk7CiAg
ICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgMCk7CiAgICAg
ICAgICAgICBub1Jlc3VsdChub2RlKTsKQEAgLTI2NjksOCArMjY2MSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBZGQoTm9kZSogbm8KICAgICBjYXNlIEludDMyVXNlOiB7CiAgICAg
ICAgIEFTU0VSVCghc2hvdWxkQ2hlY2tOZWdhdGl2ZVplcm8obm9kZS0+YXJpdGhNb2RlKCkpKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkgewotICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQo
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc0lu
dDMyQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgaW50MzJfdCBpbW0xID0gbm9kZS0+Y2hpbGQx
KCktPmFzSW50MzIoKTsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBvcDIodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKIApAQCAtMjY4NCw5ICsyNjc2LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFk
ZChOb2RlKiBubwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpIHsKKyAgICAg
ICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAg
ICAgICBpbnQzMl90IGltbTIgPSB2YWx1ZU9mSW50MzJDb25zdGFudChub2RlLT5jaGlsZDIoKS5u
b2RlKCkpOworICAgICAgICAgICAgaW50MzJfdCBpbW0yID0gbm9kZS0+Y2hpbGQyKCktPmFzSW50
MzIoKTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoIXNob3VsZENoZWNrT3ZlcmZsb3cobm9kZS0+YXJpdGhN
b2RlKCkpKSB7CkBAIC0yODY1LDkgKzI4NTcsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhTdWIoTm9kCiAgICAgY2FzZSBJbnQzMlVzZTogewogICAgICAgICBBU1NFUlQoIXNo
b3VsZENoZWNrTmVnYXRpdmVaZXJvKG5vZGUtPmFyaXRoTW9kZSgpKSk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CisgICAg
ICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAg
ICAgICAgIGludDMyX3QgaW1tMiA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigp
Lm5vZGUoKSk7CisgICAgICAgICAgICBpbnQzMl90IGltbTIgPSBub2RlLT5jaGlsZDIoKS0+YXNJ
bnQzMigpOwogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKIAogICAgICAg
ICAgICAgaWYgKCFzaG91bGRDaGVja092ZXJmbG93KG5vZGUtPmFyaXRoTW9kZSgpKSkgewpAQCAt
Mjg4Miw4ICsyODc0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoU3ViKE5v
ZAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
aWYgKGlzTnVtYmVyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICAg
ICAgaW50MzJfdCBpbW0xID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5pc051bWJlckNvbnN0YW50KCkpIHsK
KyAgICAgICAgICAgIGludDMyX3QgaW1tMSA9IG5vZGUtPmNoaWxkMSgpLT5hc0ludDMyKCk7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICAg
ICAgCkBAIC0zMzIyLDggKzMzMTQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhNb2QoTm9kCiAgICAgICAgIC8vIChpbiBjYXNlIG9mIHxkaXZpZGVuZHwgPCB8ZGl2aXNvcnwp
LCBzbyB3ZSBzcGVjdWxhdGUgaXQgYXMgc3RyaWN0IGludDMyLgogICAgICAgICBTcGVjdWxhdGVT
dHJpY3RJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewotICAg
ICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gdmFsdWVPZkludDMyQ29uc3RhbnQobm9kZS0+Y2hp
bGQyKCkubm9kZSgpKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5pc0ludDMyQ29uc3Rh
bnQoKSkgeworICAgICAgICAgICAgaW50MzJfdCBkaXZpc29yID0gbm9kZS0+Y2hpbGQyKCktPmFz
SW50MzIoKTsKICAgICAgICAgICAgIGlmIChkaXZpc29yID4gMSAmJiBoYXNPbmVCaXRTZXQoZGl2
aXNvcikpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb2dhcml0aG0gPSBXVEY6OmZhc3RM
b2cyKGRpdmlzb3IpOwogICAgICAgICAgICAgICAgIEdQUlJlZyBkaXZpZGVuZEdQUiA9IG9wMS5n
cHIoKTsKQEAgLTMzODQsOCArMzM3Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE1vZChOb2QKICAgICAgICAgfQogICAgICAgICAKICNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQotICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUtPmNoaWxkMigpLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IHZhbHVlT2ZJbnQzMkNvbnN0YW50KG5v
ZGUtPmNoaWxkMigpLm5vZGUoKSk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+aXNJbnQz
MkNvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIGludDMyX3QgZGl2aXNvciA9IG5vZGUtPmNoaWxk
MigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICBpZiAoZGl2aXNvciAmJiBkaXZpc29yICE9IC0x
KSB7CiAgICAgICAgICAgICAgICAgR1BSUmVnIG9wMUdwciA9IG9wMS5ncHIoKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NTYsMjkgKzU1Niw2IEBAIHB1YmxpYzoKICAgICBib29s
IGlzS25vd25Ob3ROdW1iZXIoTm9kZSogbm9kZSkgeyByZXR1cm4gIShtX3N0YXRlLmZvck5vZGUo
bm9kZSkubV90eXBlICYgU3BlY0Z1bGxOdW1iZXIpOyB9CiAgICAgYm9vbCBpc0tub3duTm90Q2Vs
bChOb2RlKiBub2RlKSB7IHJldHVybiAhKG1fc3RhdGUuZm9yTm9kZShub2RlKS5tX3R5cGUgJiBT
cGVjQ2VsbCk7IH0KICAgICAKLSAgICAvLyBDaGVja3MvYWNjZXNzb3JzIGZvciBjb25zdGFudCB2
YWx1ZXMuCi0gICAgYm9vbCBpc0NvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0Lmdy
YXBoKCkuaXNDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNKU0NvbnN0YW50KE5vZGUqIG5v
ZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCkuaXNKU0NvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9v
bCBpc0ludDMyQ29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0lu
dDMyQ29uc3RhbnQobm9kZSk7IH0KLSAgICBib29sIGlzRG91YmxlQ29uc3RhbnQoTm9kZSogbm9k
ZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0RvdWJsZUNvbnN0YW50KG5vZGUpOyB9Ci0gICAg
Ym9vbCBpc051bWJlckNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0LmdyYXBoKCku
aXNOdW1iZXJDb25zdGFudChub2RlKTsgfQotICAgIGJvb2wgaXNCb29sZWFuQ29uc3RhbnQoTm9k
ZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS5pc0Jvb2xlYW5Db25zdGFudChub2RlKTsg
fQotICAgIGJvb2wgaXNGdW5jdGlvbkNvbnN0YW50KE5vZGUqIG5vZGUpIHsgcmV0dXJuIG1faml0
LmdyYXBoKCkuaXNGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgaW50MzJfdCB2YWx1ZU9m
SW50MzJDb25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZJ
bnQzMkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgZG91YmxlIHZhbHVlT2ZOdW1iZXJDb25zdGFudChO
b2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFwaCgpLnZhbHVlT2ZOdW1iZXJDb25zdGFudChu
b2RlKTsgfQotI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgdm9pZCogYWRkcmVzc09mRG91Ymxl
Q29uc3RhbnQoTm9kZSogbm9kZSkgeyByZXR1cm4gbV9qaXQuYWRkcmVzc09mRG91YmxlQ29uc3Rh
bnQobm9kZSk7IH0KLSNlbmRpZgotICAgIEpTVmFsdWUgdmFsdWVPZkpTQ29uc3RhbnQoTm9kZSog
bm9kZSkgeyByZXR1cm4gbV9qaXQuZ3JhcGgoKS52YWx1ZU9mSlNDb25zdGFudChub2RlKTsgfQot
ICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2pp
dC5ncmFwaCgpLnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQobm9kZSk7IH0KLSAgICBKU0Z1bmN0aW9u
KiB2YWx1ZU9mRnVuY3Rpb25Db25zdGFudChOb2RlKiBub2RlKSB7IHJldHVybiBtX2ppdC5ncmFw
aCgpLnZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KG5vZGUpOyB9Ci0gICAgYm9vbCBpc051bGxDb25z
dGFudChOb2RlKiBub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFpc0NvbnN0YW50KG5vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3Rh
bnQobm9kZSkuaXNOdWxsKCk7Ci0gICAgfQotCiAgICAgU3RyaW5nSW1wbCogaWRlbnRpZmllclVJ
RCh1bnNpZ25lZCBpbmRleCkKICAgICB7CiAgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLmlk
ZW50aWZpZXJzKClbaW5kZXhdOwpAQCAtNjE5LDkgKzU5Niw5IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQgdmFsdWVPZkpT
Q29uc3RhbnRBc0ltbTY0KE5vZGUqIG5vZGUpCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpJ
bW02NCB2YWx1ZU9mSlNDb25zdGFudEFzSW1tNjQoTm9kZSogbm9kZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6SW1tNjQoSlNW
YWx1ZTo6ZW5jb2RlKG5vZGUtPmFzSlNWYWx1ZSgpKSk7CiAgICAgfQogI2VuZGlmCiAKQEAgLTk1
Nyw3ICs5MzQsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgIHZvaWQgaW5pdENvbnN0YW50SW5mbyhO
b2RlKiBub2RlKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzSW50MzJDb25zdGFudChub2RlKSB8
fCBpc051bWJlckNvbnN0YW50KG5vZGUpIHx8IGlzSlNDb25zdGFudChub2RlKSk7CisgICAgICAg
IEFTU0VSVChub2RlLT5oYXNDb25zdGFudCgpKTsKICAgICAgICAgZ2VuZXJhdGlvbkluZm8obm9k
ZSkuaW5pdENvbnN0YW50KG5vZGUsIG5vZGUtPnJlZkNvdW50KCkpOwogICAgIH0KICAgICAKQEAg
LTE5ODMsMTcgKzE5NjAsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciog
bGFiZWwgPSAwKTsKIAotICAgIGJvb2wgaXNJbnRlZ2VyKE5vZGUqIG5vZGUpCi0gICAgewotICAg
ICAgICBpZiAobm9kZS0+aGFzSW50MzJSZXN1bHQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZSkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4gZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNKU0ludDMy
KCk7Ci0gICAgfQotICAgIAogICAgIGJvb2wgYmV0dGVyVXNlU3RyaWN0SW50NTIoTm9kZSogbm9k
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiAhZ2VuZXJhdGlvbkluZm8obm9kZSkuaXNJbnQ1Migp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVu
Z3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MiwxMiArNzIsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEJpdE9yOgogICAgICAg
ICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOwogCi0gICAgICAgICAgICBpZiAobV9ub2RlLT5j
aGlsZDIoKS0+aXNDb25zdGFudCgpKSB7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBvcDIgPSBt
X2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAob3AyLmlzSW50MzIoKSAmJiAhb3AyLmFzSW50MzIoKSkgewotICAgICAg
ICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpICYmICFtX25vZGUtPmNoaWxkMigpLT5hc0lu
dDMyKCkpIHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCkBAIC04OSwzOCArODYsMjggQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBCaXRMU2hpZnQ6CiAgICAgICAgIGNhc2UgQml0UlNoaWZ0OgogICAgICAgICBjYXNlIEJpdFVS
U2hpZnQ6Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNDb25zdGFudCgpKSB7
Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBvcDIgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICBpZiAob3AyLmlzSW50
MzIoKSAmJiAhKG9wMi5hc0ludDMyKCkgJiAweDFmKSkgewotICAgICAgICAgICAgICAgICAgICBj
b252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlz
SW50MzJDb25zdGFudCgpICYmICEobV9ub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigpICYgMHgxZikp
IHsKKyAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAgICAgICAgICAgICBpZiAo
bV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBCaXRVUlNoaWZ0Ci0gICAgICAgICAgICAgICAgJiYg
bV9ub2RlLT5jaGlsZDEoKS0+Y2hpbGQyKCktPmlzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAg
ICAgIEpTVmFsdWUgc2hpZnRBbW91bnQgPSBtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KAotICAg
ICAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS5ub2RlKCkpOwotICAg
ICAgICAgICAgICAgIGlmIChzaGlmdEFtb3VudC5pc0ludDMyKCkgJiYgKHNoaWZ0QW1vdW50LmFz
SW50MzIoKSAmIDB4MWYpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRv
SWRlbnRpdHkoKTsKLSAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICYmIG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKQorICAgICAg
ICAgICAgICAgICYmIChtX25vZGUtPmNoaWxkMSgpLT5jaGlsZDIoKS0+YXNJbnQzMigpICYgMHgx
ZikpIHsKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNvbnZlcnRUb0lkZW50aXR5KCk7CisgICAg
ICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhBZGQ6CiAgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzSW50MzJDb25zdGFudChtX25vZGUtPmNo
aWxkMigpLm5vZGUoKSkpIHsKLSAgICAgICAgICAgICAgICBpbnQzMl90IHZhbHVlID0gbV9ncmFw
aC52YWx1ZU9mSW50MzJDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGls
ZDIoKS5ub2RlKCkpOwotICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNo
aWxkMigpLT5pc0ludDMyQ29uc3RhbnQoKSAmJiAhbV9ub2RlLT5jaGlsZDIoKS0+YXNJbnQzMigp
KSB7CisgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIApAQCAtMTI5LDkgKzExNiw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3ViOgotICAgICAgICAgICAgaWYg
KG1fZ3JhcGguaXNJbnQzMkNvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKQorICAgICAg
ICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCktPmlzSW50MzJDb25zdGFudCgpCiAgICAgICAgICAg
ICAgICAgJiYgbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7Ci0gICAgICAgICAg
ICAgICAgaW50MzJfdCB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkludDMyQ29uc3RhbnQobV9ub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGludDMyX3QgdmFsdWUgPSBtX25v
ZGUtPmNoaWxkMigpLT5hc0ludDMyKCk7CiAgICAgICAgICAgICAgICAgaWYgKC12YWx1ZSAhPSB2
YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICBtX25vZGUtPnNldE9wKEFyaXRoQWRkKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDIoKS5zZXROb2RlKApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTksNiArMTk5LDM0IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlKCkpCiAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKChub2RlKSwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmhhc0Z1bmN0aW9uKCkpCisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+ZnVuY3Rpb24oKS0+dmFsdWUoKS5pc0Z1bmN0aW9u
KCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgTWFrZVJvcGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICAgICAg
ICAgIGNhc2UgQXJpdGhTdWI6CisgICAgICAgICAgICAgICAgY2FzZSBBcml0aE11bDoKKyAgICAg
ICAgICAgICAgICBjYXNlIEFyaXRoSU11bDoKKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoRGl2
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CisgICAgICAgICAgICAgICAgY2FzZSBB
cml0aE1pbjoKKyAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgorICAgICAgICAgICAgICAg
IGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgor
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgICAgICAgICAgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgorICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAg
ICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
ISFub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwg
ISFub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTdHJlbmd0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHVmFsdWVT
dHJlbmd0aC5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBWYWx1ZVN0cmVuZ3RoIHN0cmVuZ3RoKQoreworICAgIHN3aXRjaCAoc3RyZW5ndGgp
IHsKKyAgICBjYXNlIEZyYWdpbGVWYWx1ZToKKyAgICAgICAgb3V0LnByaW50KCJGcmFnaWxlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFdlYWtWYWx1ZToKKyAgICAgICAgb3V0LnByaW50
KCJXZWFrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0cm9uZ1ZhbHVlOgorICAgICAg
ICBvdXQucHJpbnQoIlN0cm9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFsdWVTdHJlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsdWVTdHJlbmd0aC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYWx1ZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1ZhbHVlU3RyZW5ndGhfaAorI2RlZmluZSBERkdWYWx1ZVN0cmVuZ3RoX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBWYWx1ZVN0cmVuZ3RoIHsKKyAgICAvLyBU
aGUgdmFsdWUgaXMga25vd24gdG8gdGhlIERGRyBidXQgbm8gb3B0aW1pemF0aW9ucyBoYXZlIGJl
ZW4gcGVyZm9ybWVkIHRoYXQgcmVxdWlyZSB0aGUKKyAgICAvLyB2YWx1ZSB0byBiZSBrZXB0IGFs
aXZlLiBBbGwgT1NSIGVudHJ5IHZhbHVlcyBhcmUgZnJhZ2lsZSB1bnRpbCB3ZSBkbyBzb21lIG9w
dGltaXphdGlvbiB0aGF0CisgICAgLy8gdXNlcyB0aGVtLCBsaWtlIGFjdHVhbGx5IGNvbnN0YW50
IGZvbGRpbmcgYSB2YXJpYWJsZSB0byB0aGF0IHZhbHVlLiBCeSBjb252ZW50aW9uIHdlIHNheQor
ICAgIC8vIHRoYXQgYWxsIG5vbi1jZWxscyBhcmUgZnJhZ2lsZS4KKyAgICBGcmFnaWxlVmFsdWUs
CisgICAgCisgICAgLy8gVGhlIHZhbHVlIGhhcyBiZWVuIHVzZWQgZm9yIG9wdGltaXphdGlvbiBh
bmQgaXQgYXJvc2UgdGhyb3VnaCBpbmZlcmVuY2UuIFdlIGRvbid0IHdhbnQgdGhlCisgICAgLy8g
ZmFjdCB0aGF0IHdlIG9wdGltaXplZCB0aGUgY29kZSB0byByZXN1bHQgaW4gdGhlIEdDIGtlZXBp
bmcgdGhpcyB2YWx1ZSBhbGl2ZSB1bm5lY2Vzc2FyaWx5LAorICAgIC8vIHNvIHdlJ2QgcmF0aGVy
IGtpbGwgdGhlIGNvZGUgYW5kIHJlY29tcGlsZSB0aGFuIGtlZXAgdGhlIG9iamVjdCBhbGl2ZSBs
b25nZXIuCisgICAgV2Vha1ZhbHVlLAorICAgIAorICAgIC8vIFRoZSBjb2RlIHdpbGwga2VlcCB0
aGlzIHZhbHVlIGFsaXZlLiBUaGlzIGlzIHRydWUgb2YgY29uc3RhbnRzIHRoYXQgd2VyZSBwcmVz
ZW50IGluIHRoZQorICAgIC8vIHNvdXJjZS4gU3RyaW5nIGNvbnN0YW50cyB0ZW5kIHRvIGJlIHN0
cm9uZy4KKyAgICBTdHJvbmdWYWx1ZQorfTsKKworaW5saW5lIFZhbHVlU3RyZW5ndGggbWVyZ2Uo
VmFsdWVTdHJlbmd0aCBhLCBWYWx1ZVN0cmVuZ3RoIGIpCit7CisgICAgc3dpdGNoIChhKSB7Cisg
ICAgY2FzZSBGcmFnaWxlVmFsdWU6CisgICAgICAgIHJldHVybiBiOworICAgIGNhc2UgV2Vha1Zh
bHVlOgorICAgICAgICBpZiAoYiA9PSBTdHJvbmdWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBT
dHJvbmdWYWx1ZTsKKyAgICAgICAgcmV0dXJuIFdlYWtWYWx1ZTsKKyAgICBjYXNlIFN0cm9uZ1Zh
bHVlOgorICAgICAgICByZXR1cm4gU3Ryb25nVmFsdWU7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZH
OjpWYWx1ZVN0cmVuZ3RoKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhbHVlU3RyZW5ndGhfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5j
cHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxLDIwICs4
MSwxMyBAQCBzdHJ1Y3QgTWluaWZpZWRHZW5lcmF0aW9uSW5mbyB7CiAKIH0gLy8gbmFtZXNwYWNl
CiAKLWJvb2wgVmFyaWFibGVFdmVudFN0cmVhbTo6dHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KFZh
bHVlUmVjb3ZlcnkmIHJlY292ZXJ5LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgTWluaWZpZWROb2Rl
KiBub2RlKSBjb25zdAorYm9vbCBWYXJpYWJsZUV2ZW50U3RyZWFtOjp0cnlUb1NldENvbnN0YW50
UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSYgcmVjb3ZlcnksIE1pbmlmaWVkTm9kZSogbm9kZSkgY29u
c3QKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBp
ZiAobm9kZS0+aGFzQ29uc3RhbnROdW1iZXIoKSkgewotICAgICAgICByZWNvdmVyeSA9IFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KAotICAgICAgICAgICAgY29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVyKAotICAgICAgICAgICAgICAgIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgbm9kZS0+
Y29uc3RhbnROdW1iZXIoKSkuZ2V0KCkpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKG5vZGUtPmhhc1dlYWtDb25zdGFudCgpKSB7Ci0gICAgICAgIHJlY292ZXJ5
ID0gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQobm9kZS0+d2Vha0NvbnN0YW50KCkpOworICAgIGlm
IChub2RlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIHJlY292ZXJ5ID0gVmFsdWVSZWNvdmVy
eTo6Y29uc3RhbnQobm9kZS0+Y29uc3RhbnQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKQEAgLTE4Nyw3ICsxODAsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJl
Y29uc3RydWN0KAogICAgICAgICAKICAgICAgICAgQVNTRVJUKHNvdXJjZS5raW5kKCkgPT0gSGF2
ZU5vZGUpOwogICAgICAgICBNaW5pZmllZE5vZGUqIG5vZGUgPSBncmFwaC5hdChzb3VyY2UuaWQo
KSk7Ci0gICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVz
W2ldLCBjb2RlQmxvY2ssIG5vZGUpKQorICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292
ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgbm9kZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCiAgICAgICAgIE1pbmlmaWVkR2VuZXJhdGlvbkluZm8gaW5mbyA9IGdlbmVyYXRpb25J
bmZvcy5nZXQoc291cmNlLmlkKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9w
ZXJhbmRzPFZhbHVlUmVjb3Zlcnk+JikgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCB0cnlU
b1NldENvbnN0YW50UmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSYsIENvZGVCbG9jayosIE1pbmlmaWVk
Tm9kZSopIGNvbnN0OworICAgIGJvb2wgdHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KFZhbHVlUmVj
b3ZlcnkmLCBNaW5pZmllZE5vZGUqKSBjb25zdDsKICAgICAKICAgICB2b2lkIGxvZ0V2ZW50KGNv
bnN0IFZhcmlhYmxlRXZlbnQmKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDkgKzQ3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgLy8gVGhlc2UgYXJlIHByZXR0eSBkdW1iLCBi
dXQgbmVlZGVkIHRvIHBsYWNhdGUgc3Vic2VxdWVudCBhc3NlcnRpb25zLiBXZSBjb24ndCBhY3R1
YWxseQogICAgICAgICAvLyBoYXZlIHRvIHdhdGNoIHRoZXNlIGJlY2F1c2UgdGhlcmUgaXMgbm8g
d2F5IHRvIHRyYW5zaXRpb24gYXdheSBmcm9tIGl0LCBidXQgdGhleSBhcmUKICAgICAgICAgLy8g
d2F0Y2hhYmxlIGFuZCBzbyB3ZSB3aWxsIGFzc2VydCBpZiB0aGV5IGFyZW4ndCB3YXRjaGVkLgot
ICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsgCisg
ICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOwogICAg
ICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsK
ICAgICAgICAgCisgICAgICAgIGZvciAoRnJvemVuVmFsdWUqIHZhbHVlIDogbV9ncmFwaC5tX2Zy
b3plblZhbHVlcykKKyAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLT5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVt
QmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCkBA
IC01OSwxNyArNjIsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgICAg
ICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdh
dGNoKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIENoZWNrRnVu
Y3Rpb246Ci0gICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmZ1bmN0aW9uKCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
bm9kZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+
ZXhlY3V0YWJsZSgpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CkBA
IC05Myw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRj
aChtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSktPnN0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBhbnl0aGlu
ZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdz
LiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQpAQCAtMTM5LDIyICsxMzMsMTIgQEAgcHVibGljOgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBtX2dyYXBoLm1fc3Ry
dWN0dXJlV2F0Y2hwb2ludFN0YXRlID0gV2F0Y2hpbmdBbGxXYXRjaGFibGVTdHJ1Y3R1cmVzOwor
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZv
aWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1ZS5pc0Nl
bGwoKSkKLSAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLmFzQ2VsbCgpKTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCB0cnlXYXRjaChKU0NlbGwqIGNlbGwpCi0gICAgewotICAgICAgICBpZiAoY2Vs
bCkKLSAgICAgICAgICAgIHRyeVdhdGNoKGNlbGwtPnN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAg
CiAgICAgdm9pZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTspCkBAIC0xNjMsNyArMTQ3LDgg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHRyeVdhdGNoKFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKLSAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVy
ZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9p
bnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3
ICsxMTQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6Ci0gICAgICAgICAgICBhZGRM
YXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICBhZGRMYXppbHkoanNDYXN0PEpT
RnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCkpLT5hbGxvY2F0aW9uUHJvZmls
ZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNyArNDQsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSog
CiAgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBKU0NvbnN0YW50Ogot
ICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoK
ICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExpbmsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHJldmlzaW9uIDE2OTY4MSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGluay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDgg
QEAgdm9pZCBsaW5rKFN0YXRlJiBzdGF0ZSkKICAgICBpZiAoIWdyYXBoLm1fcGxhbi5pbmxpbmVD
YWxsRnJhbWVzLT5pc0VtcHR5KCkpCiAgICAgICAgIHN0YXRlLmppdENvZGUtPmNvbW1vbi5pbmxp
bmVDYWxsRnJhbWVzID0gZ3JhcGgubV9wbGFuLmlubGluZUNhbGxGcmFtZXM7CiAgICAgCisgICAg
Z3JhcGgucmVnaXN0ZXJGcm96ZW5WYWx1ZXMoKTsKKwogICAgIC8vIENyZWF0ZSB0aGUgZW50cnlw
b2ludC4gTm90ZSB0aGF0IHdlIHVzZSB0aGlzIGVudHJ5cG9pbnQgdG90YWxseSBkaWZmZXJlbnRs
eQogICAgIC8vIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlJ3JlIGRvaW5nIE9TUiBlbnRyeSBvciBu
b3QuCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9jayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24g
MTY5NjgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1OSw5ICszNTksNiBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIEludDUyQ29uc3RhbnQ6CiAgICAgICAgICAgICBjb21waWxlSW50NTJDb25zdGFudCgpOwog
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6Ci0gICAgICAg
ICAgICBjb21waWxlV2Vha0pTQ29uc3RhbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgICAgICBjb21waWxlUGhhbnRvbUFyZ3Vt
ZW50cygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NzEsMjIgKzc2OCwxNyBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZURvdWJsZUNvbnN0YW50KCkKICAgICB7Ci0gICAgICAg
IHNldERvdWJsZShtX291dC5jb25zdERvdWJsZShtX2dyYXBoLnZhbHVlT2ZOdW1iZXJDb25zdGFu
dChtX25vZGUpKSk7CisgICAgICAgIHNldERvdWJsZShtX291dC5jb25zdERvdWJsZShtX25vZGUt
PmFzTnVtYmVyKCkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlSW50NTJDb25zdGFu
dCgpCiAgICAgewotICAgICAgICBpbnQ2NF90IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25z
dGFudChtX25vZGUpLmFzTWFjaGluZUludCgpOworICAgICAgICBpbnQ2NF90IHZhbHVlID0gbV9u
b2RlLT5hc01hY2hpbmVJbnQoKTsKICAgICAgICAgCiAgICAgICAgIHNldEludDUyKG1fb3V0LmNv
bnN0SW50NjQodmFsdWUgPDwgSlNWYWx1ZTo6aW50NTJTaGlmdEFtb3VudCkpOwogICAgICAgICBz
ZXRTdHJpY3RJbnQ1MihtX291dC5jb25zdEludDY0KHZhbHVlKSk7CiAgICAgfQogCi0gICAgdm9p
ZCBjb21waWxlV2Vha0pTQ29uc3RhbnQoKQotICAgIHsKLSAgICAgICAgc2V0SlNWYWx1ZSh3ZWFr
UG9pbnRlcihtX25vZGUtPndlYWtDb25zdGFudCgpKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQg
Y29tcGlsZVBoYW50b21Bcmd1bWVudHMoKQogICAgIHsKICAgICAgICAgc2V0SlNWYWx1ZShtX291
dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CkBAIC0xNjM5LDggKzE2
MzEsOCBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBFeGl0S2luZCBleGl0S2luZDsKLSAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQpCi0gICAgICAgICAg
ICBleGl0S2luZCA9IEJhZFdlYWtDb25zdGFudENhY2hlOworICAgICAgICBpZiAobV9ub2RlLT5j
aGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkKKyAgICAgICAgICAgIGV4aXRLaW5kID0gQmFkQ29uc3Rh
bnRDYWNoZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZXhpdEtpbmQgPSBCYWRDYWNoZTsK
ICAgICAgICAgCkBAIC0xNjc4LDcgKzE2NzAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgQmFkRnVuY3Rpb24sIGpzVmFsdWVWYWx1ZShjZWxs
KSwgbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCksCi0gICAgICAgICAgICBtX291dC5ub3RFcXVhbChj
ZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUtPmZ1bmN0aW9uKCkpKSk7CisgICAgICAgICAgICBtX291
dC5ub3RFcXVhbChjZWxsLCB3ZWFrUG9pbnRlcihtX25vZGUtPmZ1bmN0aW9uKCktPnZhbHVlKCku
YXNDZWxsKCkpKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNoZWNrRXhlY3V0YWJs
ZSgpCkBAIC0zNDU5LDcgKzM0NTEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGls
ZUNvbXBhcmVFcUNvbnN0YW50KCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpKS5pc051bGwoKSk7CisgICAgICAg
IEFTU0VSVChtX25vZGUtPmNoaWxkMigpLT5hc0pTVmFsdWUoKS5pc051bGwoKSk7CiAgICAgICAg
IHNldEJvb2xlYW4oCiAgICAgICAgICAgICBlcXVhbE51bGxPclVuZGVmaW5lZCgKICAgICAgICAg
ICAgICAgICBtX25vZGUtPmNoaWxkMSgpLCBBbGxDZWxsc0FyZUZhbHNlLCBFcXVhbE51bGxPclVu
ZGVmaW5lZCkpOwpAQCAtMzU1Miw3ICszNTQ0LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNvbXBpbGVDb21wYXJlU3RyaWN0RXFDb25zdGFudCgpCiAgICAgewotICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50ID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX25vZGUtPmNoaWxkMigpLm5v
ZGUoKSk7CisgICAgICAgIEpTVmFsdWUgY29uc3RhbnQgPSBtX25vZGUtPmNoaWxkMigpLT5hc0pT
VmFsdWUoKTsKIAogICAgICAgICBzZXRCb29sZWFuKAogICAgICAgICAgICAgbV9vdXQuZXF1YWwo
CkBAIC00OTU4LDcgKzQ5NTAsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IChlZGdlLnVzZUtpbmQoKSA9
PSBJbnQzMlVzZSB8fCBlZGdlLnVzZUtpbmQoKSA9PSBLbm93bkludDMyVXNlKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgSlNWYWx1
ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpOworICAgICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwogICAgICAgICAgICAgaWYg
KCF2YWx1ZS5pc0ludDMyKCkpIHsKICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFi
bGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CkBAIC01MDcyLDcg
KzUwNjQsNyBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IERGRzo6aXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KSB7Ci0gICAg
ICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChlZGdlLm5v
ZGUoKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZWRnZS0+YXNKU1ZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICAgICAgdGVybWlu
YXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVy
bzsKQEAgLTUxMzUsNyArNTEyNyw3IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
bW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkg
PT0gQm9vbGVhblVzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQo
KSkgewotICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudmFsdWVPZkpTQ29uc3Rh
bnQoZWRnZS5ub2RlKCkpOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNW
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Jvb2xlYW4oKSkgewogICAgICAgICAg
ICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
b3V0LmJvb2xlYW5GYWxzZTsKQEAgLTUxODEsOCArNTE3Myw4IEBAIHByaXZhdGU6CiAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSAhPSBJbnQ1MlJlcFVz
ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKLSAgICAgICAg
ICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtX2dyYXBoLnZhbHVl
T2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSkpOwotICAgICAgICAKKyAgICAgICAgICAgIHJldHVy
biBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOwor
CiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0
dXJuIHZhbHVlLnZhbHVlKCk7CkBAIC02MDg3LDggKzYwNzksNyBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSW50NTJDb25zdGFudDoKICAgICAgICAg
Y2FzZSBEb3VibGVDb25zdGFudDoKLSAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKLSAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpjb25zdGFudChtX2dyYXBo
LnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaW5k
ZXhdID0gRXhpdFZhbHVlOjpjb25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7CiAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmFyZ3VtZW50c09iamVjdFRoYXRX
YXNOb3RDcmVhdGVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDcgKzg3LDcgQEAgc3RhdGljIHZvaWQgY29tcGlsZVN0dWIoCiAgICAgICAgIAogICAgICAgICBQ
cm9maWxlcjo6T1NSRXhpdCogcHJvZmlsZXJFeGl0ID0gY29tcGlsYXRpb24tPmFkZE9TUkV4aXQo
CiAgICAgICAgICAgICBleGl0SUQsIFByb2ZpbGVyOjpPcmlnaW5TdGFjayhkYXRhYmFzZSwgY29k
ZUJsb2NrLCBleGl0Lm1fY29kZU9yaWdpbiksCi0gICAgICAgICAgICBleGl0Lm1fa2luZCwgaXNX
YXRjaHBvaW50KGV4aXQubV9raW5kKSk7CisgICAgICAgICAgICBleGl0Lm1fa2luZCwgZXhpdC5t
X2tpbmQgPT0gVW5jb3VudGFibGVJbnZhbGlkYXRpb24pOwogICAgICAgICBqaXQuYWRkNjQoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoMSksIENDYWxsSGVscGVyczo6QWJzb2x1dGVBZGRyZXNz
KHByb2ZpbGVyRXhpdC0+Y291bnRlckFkZHJlc3MoKSkpOwogICAgIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTY4
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDEzIEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb24KIAogdm9pZCBKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogeworICAgIGR1bXBJbkNvbnRleHRB
c3N1bWluZ1N0cnVjdHVyZSgKKyAgICAgICAgb3V0LCBjb250ZXh0LCAoISEqdGhpcyAmJiBpc0Nl
bGwoKSkgPyBhc0NlbGwoKS0+c3RydWN0dXJlKCkgOiBudWxscHRyKTsKK30KKwordm9pZCBKU1Zh
bHVlOjpkdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUoCisgICAgUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQsIFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorewog
ICAgIGlmICghKnRoaXMpCiAgICAgICAgIG91dC5wcmludCgiPEpTVmFsdWUoKT4iKTsKICAgICBl
bHNlIGlmIChpc0ludDMyKCkpCkBAIC0yMDcsNyArMjE0LDcgQEAgdm9pZCBKU1ZhbHVlOjpkdW1w
SW5Db250ZXh0KFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnRmKCJEb3VibGU6ICUwOHg6
JTA4eCwgJWxmIiwgdS5hc1R3b0ludDMyc1sxXSwgdS5hc1R3b0ludDMyc1swXSwgYXNEb3VibGUo
KSk7CiAjZW5kaWYKICAgICB9IGVsc2UgaWYgKGlzQ2VsbCgpKSB7Ci0gICAgICAgIGlmIChhc0Nl
bGwoKS0+aW5oZXJpdHMoSlNTdHJpbmc6OmluZm8oKSkpIHsKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihKU1N0cmluZzo6aW5mbygpKSkgewogICAgICAg
ICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKTsKICAg
ICAgICAgICAgIG91dC5wcmludCgiU3RyaW5nIik7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5p
c1JvcGUoKSkKQEAgLTIyMywxMSArMjMwLDExIEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4
dChQcmludFN0cmVhbSYKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG91dC5w
cmludCgiICh1bnJlc29sdmVkKSIpOwogICAgICAgICAgICAgb3V0LnByaW50KCI6ICIsIGltcGwp
OwotICAgICAgICB9IGVsc2UgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cyhTdHJ1Y3R1cmU6OmluZm8o
KSkpCisgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFz
c09mKFN0cnVjdHVyZTo6aW5mbygpKSkKICAgICAgICAgICAgIG91dC5wcmludCgiU3RydWN0dXJl
OiAiLCBpbkNvbnRleHQoKmpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0NlbGwoKSksIGNvbnRleHQpKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBvdXQucHJpbnQoIkNlbGw6ICIsIFJhd1BvaW50
ZXIoYXNDZWxsKCkpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICgiLCBpbkNvbnRleHQoKmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSwgY29udGV4dCksICIpIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIiAoIiwgaW5Db250ZXh0KCpzdHJ1Y3R1cmUsIGNvbnRleHQpLCAiKSIpOwogICAgICAgICB9
CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgb3V0LnByaW50KCIsIElEOiAiLCBhc0NlbGwo
KS0+c3RydWN0dXJlSUQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xh
c3MgSlNTdHJpbmc7CiBjbGFzcyBQcm9wZXJ0eU5hbWU7CiBjbGFzcyBQcm9wZXJ0eVNsb3Q7CiBj
bGFzcyBQdXRQcm9wZXJ0eVNsb3Q7CitjbGFzcyBTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKERGR19K
SVQpCiBuYW1lc3BhY2UgREZHIHsKIGNsYXNzIEpJVENvbXBpbGVyOwpAQCAtMjc3LDYgKzI3OCw3
IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250
ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW5Db250ZXh0QXNzdW1pbmdTdHJ1Y3R1cmUoUHJp
bnRTdHJlYW0mLCBEdW1wQ29udGV4dCosIFN0cnVjdHVyZSopIGNvbnN0OwogCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgSlNPYmplY3QqIHN5bnRoZXNpemVQcm90b3R5cGUoRXhlY1N0YXRlKikgY29u
c3Q7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShy
ZXZpc2lvbiAxNjk2ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzYxLDcgKzM2MSw3IEBAIHB1YmxpYzoKICAgICAKICAg
ICBib29sIGRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgpIGNvbnN0CiAgICAgewotICAgICAgICBy
ZXR1cm4gIWlzRGljdGlvbmFyeSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBkZmdTaG91bGRXYXRjaCgpIGNvbnN0Cg==
</data>
<flag name="review"
          id="257290"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>