<?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>127335</bug_id>
          
          <creation_ts>2014-01-20 23:14:10 -0800</creation_ts>
          <short_desc>FTL should do polyvariant Call/Construct inlining</short_desc>
          <delta_ts>2014-02-13 03:51:44 -0800</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>127538</dependson>
          <blocked>127325</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>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>970175</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-20 23:14:10 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970176</commentid>
    <comment_count>1</comment_count>
      <attachid>221723</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-20 23:15:42 -0800</bug_when>
    <thetext>Created attachment 221723
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970187</commentid>
    <comment_count>2</comment_count>
      <attachid>221725</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-20 23:54:54 -0800</bug_when>
    <thetext>Created attachment 221725
almost building</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970361</commentid>
    <comment_count>3</comment_count>
      <attachid>221773</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-21 12:08:49 -0800</bug_when>
    <thetext>Created attachment 221773
it inlined something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971054</commentid>
    <comment_count>4</comment_count>
      <attachid>221953</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-23 00:01:19 -0800</bug_when>
    <thetext>Created attachment 221953
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971058</commentid>
    <comment_count>5</comment_count>
      <attachid>221953</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2014-01-23 00:18:45 -0800</bug_when>
    <thetext>Comment on attachment 221953
the patch

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

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1189
&gt; +            vm, codeBlock-&gt;newReplacement().get(), 0, DFG::DFGMode, bytecodeIndex,

nullptr here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971274</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-01-23 12:13:51 -0800</bug_when>
    <thetext>What&apos;s the performance result here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971299</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-23 12:53:34 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; What&apos;s the performance result here?

None yet, since V8v7/raytrace uses op_call_varargs and the DFG bytecode parser always emits a Call node rather than going doing the handleInlining path.  That will be a separate fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971481</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-23 20:08:38 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; What&apos;s the performance result here?
&gt; 
&gt; None yet, since V8v7/raytrace uses op_call_varargs and the DFG bytecode parser always emits a Call node rather than going doing the handleInlining path.  That will be a separate fix.

I&apos;m actually going to implement op_call_varargs inlining before landing this.  https://bugs.webkit.org/show_bug.cgi?id=127538</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971872</commentid>
    <comment_count>9</comment_count>
      <attachid>222187</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-24 19:54:17 -0800</bug_when>
    <thetext>Created attachment 222187
rebased patch

Still testing this.  I&apos;m seeing weird performance pathologies including a large raytrace regression despite the patch successfully leading to the right things being inlined.  I am investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972001</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 11:42:46 -0800</bug_when>
    <thetext>Lol, I think we&apos;re running into pathologies here because we disallow recursive inlining and because the DFG cannot compile op_call_varargs except by way of inlining.

Without this patch, we always inline Raytrace&apos;s &quot;constructors&quot; but then fail to inline the initialize methods. The constructors then get to run in the DFG because they were inlined.

With this patch, we then inline the initialize methods, which may allocate some other objects, resulting in another call to the Raytrace &quot;constructor&quot;.  But, at this point, we choose not to inline the &quot;constructor&quot; because we think that it&apos;s a bad idea to do recursive inlining.

I think there are a handful of issues here:

1) Our hardline prohibition against recursive inlining is probably hurting us.

2) The depth/recursion limits on inlining should never apply for functions that can only be compiled by the DFG if they are inlined.

3) op_call_varargs should be compilable by the DFG even if it ain&apos;t inlined.

Note that (3) won&apos;t actually solve any problems - if we ever have the Raytrace &quot;constructor&quot; execute in an uninlined context then we will have problems, since we will be running it in a monovariant context.  I think that even if op_call_varargs gets supported by the DFG in non-inlined mode, we&apos;ll want heuristics that tend to cause op_call_varargs users to get inlined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972013</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 12:39:32 -0800</bug_when>
    <thetext>OK - I&apos;ve fixed the regression.  I still don&apos;t see speed-ups on V8v7/raytrace.  There&apos;s more work to do.  I think that we&apos;ll also need polyvariant GetById to see a speed-up on this benchmark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972018</commentid>
    <comment_count>12</comment_count>
      <attachid>222228</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 13:02:39 -0800</bug_when>
    <thetext>Created attachment 222228
more

This could use further reviewage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>972118</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-25 20:01:37 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/162788.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980222</commentid>
    <comment_count>14</comment_count>
      <attachid>222228</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-13 03:51:44 -0800</bug_when>
    <thetext>Comment on attachment 222228
more

Cleared review? from attachment 222228 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221723</attachid>
            <date>2014-01-20 23:15:42 -0800</date>
            <delta_ts>2014-01-20 23:54:54 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25259</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmgJ
KHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua0luZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBzdHJ1Y3QgQ2FsbExp
bmtJbmZvIDogcHVibGljIEJhc2ljUmF3U2VuCiAgICAgICAgICwgaGFzU2VlblNob3VsZFJlcGF0
Y2goZmFsc2UpCiAgICAgICAgICwgaGFzU2VlbkNsb3N1cmUoZmFsc2UpCiAgICAgICAgICwgY2Fs
bFR5cGUoTm9uZSkKKyAgICAgICAgLCBzbG93UGF0aENvdW50KDApCiAgICAgewogICAgIH0KICAg
ICAgICAgCkBAIC04Miw2ICs4Myw3IEBAIHN0cnVjdCBDYWxsTGlua0luZm8gOiBwdWJsaWMgQmFz
aWNSYXdTZW4KICAgICBib29sIGlzRlRMIDogMTsKICAgICBib29sIGhhc1NlZW5TaG91bGRSZXBh
dGNoIDogMTsKICAgICBib29sIGhhc1NlZW5DbG9zdXJlIDogMTsKKyAgICBib29sIGhhc1NlZW5W
aXJ0dWFsQ2FsbCA6IDE7CiAgICAgdW5zaWduZWQgY2FsbFR5cGUgOiA1OyAvLyBDYWxsVHlwZQog
ICAgIHVuc2lnbmVkIGNhbGxlZUdQUiA6IDg7CiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNjI0MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMjEgKzEyMCw1MiBA
QCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgICAgIHJldHVy
biB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8g
PSBwcm9maWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8oYnl0ZWNvZGVJbmRleCk7CisgICAgCisg
ICAgQ2FsbExpbmtTdGF0dXMgcmVzdWx0ID0gY29tdXRlRm9yKGxvY2tlciwgY2FsbExpbmtJbmZv
LCBwcm9maWxlZEJsb2NrKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGNvbXB1
dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAK
KyAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50
RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRnVuY3Rpb24pKSkKKyAgICAgICAgcmVzdWx0Lm1h
a2VDbG9zdXJlQ2FsbCgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIHJl
dHVybiBDYWxsTGlua1N0YXR1cygpOworI2VuZGlmCit9CisKK0NhbGxMaW5rU3RhdHVzIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlRm9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlu
a0luZm8mIGNhbGxMaW5rSW5mbykKK3sKICAgICBpZiAoY2FsbExpbmtJbmZvLnN0dWIpCiAgICAg
ICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8uc3R1Yi0+ZXhlY3V0YWJsZSgp
LCBjYWxsTGlua0luZm8uc3R1Yi0+c3RydWN0dXJlKCkpOwogICAgIAogICAgIEpTRnVuY3Rpb24q
IHRhcmdldCA9IGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5nZXQoKTsKICAgICBpZiAoIXRh
cmdldCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJs
b2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7CiAg
ICAgCi0gICAgaWYgKGNhbGxMaW5rSW5mby5oYXNTZWVuQ2xvc3VyZQotICAgICAgICB8fCBwcm9m
aWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRl
Y29kZUluZGV4LCBCYWRGdW5jdGlvbikpKQorICAgIGlmIChjYWxsTGlua0luZm8uaGFzU2VlbkNs
b3N1cmUpCiAgICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyh0YXJnZXQtPmV4ZWN1dGFibGUo
KSwgdGFyZ2V0LT5zdHJ1Y3R1cmUoKSk7CiAKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFy
Z2V0KTsKLSNlbHNlCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0jZW5kaWYKK30KKwor
dm9pZCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKAorICAgIENvZGVCbG9jayog
ZGZnQ29kZUJsb2NrLAorICAgIEhhc2hNYXA8Q29kZU9yaWdpbiwgQ2FsbExpbmtTdGF0dXMsIENv
ZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+JiBtYXApCit7CisgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIoZGZnQ29kZUJsb2NrLT5tX2xvY2spOworICAgIERGRzo6SklUQ29kZSogaml0Q29k
ZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChk
ZmdDb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpID09IGppdENvZGUtPnNsb3dQYXRo
Q2FsbHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gZGZnQ29kZUJsb2NrLT5udW1iZXJP
ZkNhbGxMaW5rSW5mb3MoKTsgaS0tOykgeworICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBk
ZmdDb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAgICAgaWYgKGppdENvZGUtPnNsb3dQ
YXRoQ2FsbHNbaV0gPj0gT3B0aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSkK
KyAgICAgICAgICAgIG1hcC5hZGQoaW5mby5jb2RlT3JpZ2luLCB0YWtlc1Nsb3dQYXRoKCkpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHN0YXR1cyA9IGNvbXB1
dGVGb3IobG9ja2VyLCBpbmZvKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTZXQoKSkKKyAg
ICAgICAgICAgICAgICBtYXAuYWRkKGluZm8uY29kZU9yaWdpbiwgc3RhdHVzKTsKKyAgICAgICAg
fQorICAgIH0KIH0KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3Rh
dHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxM
aW5rU3RhdHVzLmgJKHJldmlzaW9uIDE2MjQyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwxNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgCisgICAgLy8gQ29tcHV0ZXMg
dGhlIHN0YXR1cyBhc3N1bWluZyB0aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBwYXRoIGFuZCBuZXZl
ciBwcmV2aW91c2x5CisgICAgLy8gZXhpdGVkLgorICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBj
b21wdXRlRm9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm8mKTsKKyAg
ICAKKyAgICAvLyBDb21wdXRlcyBhbGwgb2YgdGhlIHN0YXR1c2VzIG9mIHRoZSBERkcgY29kZSBi
bG9jay4gRG9lc24ndCBpbmNsdWRlIHN0YXR1c2VzIHRoYXQgaGFkCisgICAgLy8gbm8gaW5mb3Jt
YXRpb24uIEN1cnJlbnRseSB3ZSB1c2UgdGhpcyB3aGVuIGNvbXBpbGluZyBGVEwgY29kZSwgdG8g
ZW5hYmxlIHBvbHl2YXJpYW50CisgICAgLy8gaW5saW5pbmcuCisgICAgc3RhdGljIHZvaWQgY29t
cHV0ZURGR1N0YXR1c2VzKAorICAgICAgICBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywKKyAgICAg
ICAgSGFzaE1hcDxDb2RlT3JpZ2luLCBDYWxsTGlua1N0YXR1cywgQ29kZU9yaWdpbkFwcHJveGlt
YXRlSGFzaD4mKTsKKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
VGFyZ2V0IHx8IG1fZXhlY3V0YWJsZSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQpAQCAtOTQsNiAr
MTA1LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICAKIHByaXZhdGU6CisgICAgdm9pZCBtYWtlQ2xvc3VyZUNhbGwoKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2lzUHJvdmVkKTsKKyAgICAgICAgLy8gVHVybiB0aGlzIGludG8gYSBjbG9zdXJl
IGNhbGwuCisgICAgICAgIG1fY2FsbFRhcmdldCA9IEpTVmFsdWUoKTsKKyAgICB9CisgICAgCiAg
ICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVu
dEpJVExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAog
ICAgIEpTVmFsdWUgbV9jYWxsVGFyZ2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyNDI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsOCArNDkw
LDggQEAgcHVibGljOgogICAgIFJhcmVDYXNlUHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJl
dHVybiB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2Fz
ZVByb2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIG1fc3BlY2lh
bEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZU9mZnNldCwKKyAgICAgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0
KTsKICAgICB9CiAKICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0
ZWNvZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYzIEBA
IHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4g
aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KKworYm9vbCBDb2Rl
T3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBj
b25zdAoreworICAgIGlmICghYS5pc1NldCgpKQorICAgICAgICByZXR1cm4gIWIuaXNTZXQoKTsK
KyAgICBpZiAoIWIuaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlm
IChhLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiBiLmlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCk7CisgICAgaWYgKGIuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIENvZGVPcmlnaW4gYSA9ICp0aGlzOwor
ICAgIENvZGVPcmlnaW4gYiA9IG90aGVyOworICAgIGZvciAoOzspIHsKKyAgICAgICAgQVNTRVJU
KGEuaXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChiLmlzU2V0KCkpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGEuYnl0ZWNvZGVJbmRleCAhPSBvdGhlci5ieXRlY29kZUluZGV4KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCghIWEuaW5saW5lQ2FsbEZy
YW1lKSAhPSAoISFiLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBpZiAoIWEuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4
ZWN1dGFibGUgIT0gYi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcjsKKyAgICAgICAgYiA9IGIuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQorfQor
Cit1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2goKSBjb25zdAoreworICAgIGlm
ICghaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkpCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9
IDI7CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CisgICAgZm9yICg7Oykgewor
ICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICAKKyAg
ICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2Vs
bCo+OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsK
KyAgICAgICAgCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyOworICAgIH0KK30KKwogVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46Omlu
bGluZVN0YWNrKCkgY29uc3QKIHsKICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGlu
ZURlcHRoKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0cnVjdCBD
b2RlT3JpZ2luIHsKICAgICAKICAgICBDb2RlT3JpZ2luKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKICAgICAgICAgOiBieXRlY29kZUluZGV4KGludmFsaWRCeXRlY29kZUluZGV4KQot
ICAgICAgICAsIGlubGluZUNhbGxGcmFtZShiaXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSkpCisgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKGRl
bGV0ZWRNYXJrZXIoKSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTcsMTEgKzk3LDIzIEBAIHN0
cnVjdCBDb2RlT3JpZ2luIHsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYg
b3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2RlT3JpZ2luJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKKyAgICAvLyBUaGlz
IGNoZWNrcyBpZiB0aGUgdHdvIGNvZGUgb3JpZ2lucyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHN0
YWNrIHRyYWNlIHNuaXBwZXRzLAorICAgIC8vIGJ1dCBpZ25vcmUgd2hldGhlciB0aGUgSW5saW5l
Q2FsbEZyYW1lJ3MgYXJlIGlkZW50aWNhbC4KKyAgICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFs
VG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGFw
cHJveGltYXRlSGFzaCgpIGNvbnN0OworICAgIAogICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNr
LiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAg
VmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgSW5saW5l
Q2FsbEZyYW1lKiBkZWxldGVkTWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAg
fQogfTsKIAogc3RydWN0IElubGluZUNhbGxGcmFtZSB7CkBAIC0xODUsNiArMTk3LDEyIEBAIHN0
cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFy
ZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAorc3RydWN0IENvZGVPcmlnaW5BcHByb3hp
bWF0ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtl
eSkgeyByZXR1cm4ga2V5LmFwcHJveGltYXRlSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYS5p
c0FwcHJveGltYXRlbHlFcXVhbFRvKGIpOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlND
CiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RGR0V4aXRQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw4IEBAIEV4aXRQcm9maWxlOjp+RXhpdFByb2ZpbGUoKSB7IH0KIAogYm9v
bCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBGcmVx
dWVudEV4aXRTaXRlJiBzaXRlKQogeworICAgIEFTU0VSVChzaXRlLmppdFR5cGUoKSAhPSBFeGl0
RnJvbUFueXRoaW5nKTsKKyAgICAKICAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVx
dWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQogICAgIC8v
IGludG8gaXQuCiAgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CkBAIC03OCw3ICs4MCw3
IEBAIGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmMKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fZnJlcXVlbnRFeGl0U2l0
ZXMtPnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQo
aSkgPT0gc2l0ZSkKKyAgICAgICAgaWYgKHNpdGUuc3Vic3VtZXMobV9mcmVxdWVudEV4aXRTaXRl
cy0+YXQoaSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0
UHJvZmlsZS5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzksMTggKzM5LDIyIEBAIHB1YmxpYzoKICAgICBGcmVxdWVudEV4aXRTaXRlKCkKICAg
ICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQogICAgICAgICAs
IG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgICAgICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRo
aW5nKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAx
ID0gZGVsZXRlZCB2YWx1ZQogICAgICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgICAg
ICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRoaW5nKQogICAgIHsKICAgICB9CiAgICAgCi0gICAg
ZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtp
bmQga2luZCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9
IEV4aXRGcm9tQW55dGhpbmcpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9m
ZnNldCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlw
ZSkKICAgICB7CiAgICAgICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewogICAg
ICAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdo
ZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKQEAgLTYxLDkgKzY1
LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBVc2UgdGhpcyBjb25zdHJ1Y3RvciBpZiB5b3Ug
d2lzaCBmb3IgdGhlIGV4aXQgc2l0ZSB0byBiZSBjb3VudGVkIGdsb2JhbGx5IHdpdGhpbiBpdHMK
ICAgICAvLyBjb2RlIGJsb2NrLgotICAgIGV4cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUoRXhpdEtp
bmQga2luZCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQsIEV4
aXRpbmdKSVRUeXBlIGppdFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICA6IG1fYnl0
ZWNvZGVPZmZzZXQoMCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5
cGUoaml0VHlwZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzUsMTYgKzgwLDM2IEBAIHB1Ymxp
YzoKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNv
bnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5
dGVjb2RlT2Zmc2V0Ci0gICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAg
ICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9qaXRU
eXBlID09IG90aGVyLmppdFR5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgc3Vic3VtZXMoY29u
c3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9i
eXRlY29kZU9mZnNldCAhPSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1faml0VHlwZSA9PSBFeGl0RnJvbUFueXRo
aW5nKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtX2ppdFR5cGUg
PT0gb3RoZXIubV9qaXRUeXBlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9mZnNldCkg
KyBtX2tpbmQ7CisgICAgICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9mZnNldCkg
KyBtX2tpbmQgKyBtX2ppdFR5cGUgKiA3OwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KICAgICBFeGl0
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgRXhpdGluZ0pJVFR5cGUg
aml0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faml0VHlwZTsgfQorICAgIAorICAgIEZyZXF1ZW50
RXhpdFNpdGUgd2l0aEpJVFR5cGUoRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKKyAgICB7CisgICAg
ICAgIEZyZXF1ZW50RXhpdFNpdGUgcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5tX2pp
dFR5cGUgPSBqaXRUeXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKQEAgLTk0LDYgKzExOSw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKICAg
ICBFeGl0S2luZCBtX2tpbmQ7CisgICAgRXhpdGluZ0pJVFR5cGUgbV9qaXRUeXBlOwogfTsKIAog
c3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKQEAgLTE2Niw2ICsxOTIsMTAgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBj
b25zdAogICAgIHsKKyAgICAgICAgaWYgKHNpdGUuaml0VHlwZSgpID09IEV4aXRGcm9tQW55dGhp
bmcpIHsKKyAgICAgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShzaXRlLndpdGhKSVRUeXBlKEV4
aXRGcm9tREZHKSkKKyAgICAgICAgICAgICAgICB8fCBoYXNFeGl0U2l0ZShzaXRlLndpdGhKSVRU
eXBlKEV4aXRGcm9tRlRMKSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1fZnJlcXVlbnRF
eGl0U2l0ZXMuZmluZChzaXRlKSAhPSBtX2ZyZXF1ZW50RXhpdFNpdGVzLmVuZCgpOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCShy
ZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtp
bmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotZW51bSBFeGl0S2luZCB7CitlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7CiAg
ICAgRXhpdEtpbmRVbnNldCwKICAgICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHR5
cGUgcHJlZGljdGlvbiB3YXMgd3JvbmcuCiAgICAgQmFkRnVuY3Rpb24sIC8vIFdlIGV4aXRlZCBi
ZWNhdXNlIHdlIG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hhdCBmdW5jdGlv
biB3ZSB3b3VsZCBzZWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhp
dGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBFeGl0aW5nSklUVHlwZV9oCisjZGVmaW5lIEV4aXRpbmdKSVRUeXBlX2gKKworbmFtZXNwYWNl
IEpTQyB7CisKK2VudW0gRXhpdGluZ0pJVFR5cGUgOiB1aW50OF90IHsKKyAgICBFeGl0RnJvbUFu
eXRoaW5nLAorICAgIEV4aXRGcm9tREZHLAorICAgIEV4aXRGcm9tRlRMCit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEV4aXRpbmdKSVRUeXBlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTksNiAr
MTE5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxERkc6Ok9TUkVudHJ5RGF0YT4gb3NyRW50cnk7
CiAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICBWZWN0
b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxhdGlvblJlY292ZXJ5OworICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gc2xvd1BhdGhDYWxsczsKICAgICBERkc6OlZhcmlhYmxlRXZlbnRTdHJl
YW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlmaWVkR3JhcGggbWluaWZpZWRE
Rkc7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw2
ICsyMzEsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAg
ICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29k
ZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5t
X3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CiAgICAgfQogICAgIAorICAgIFJFTEVBU0Vf
QVNTRVJUKG1faml0Q29kZS0+c2xvd1BhdGhDYWxscy5zaXplKCkgPT0gbV9qc0NhbGxzLnNpemUo
KSk7CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMu
c2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1fY29kZUJsb2NrLT5jYWxsTGlu
a0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsyMjEsMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgbV9pbnMuYXBwZW5kKHJlY29yZCk7CiAgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGN1cnJlbnRKU0NhbGxJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9qc0NhbGxzLnNpemUoKTsKKyAgICB9CiAKICAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RD
YWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShy
ZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMSBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1
YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgdW5zaWduZWQgbV9zdHJlYW1JbmRleDsKICAgICAKICAg
ICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsK
KyAgICAKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gT1NSRXhpdEJhc2U6
OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0
RnJvbURGRyk7CisgICAgfQogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5m
byB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGlu
Z0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKK2Jv
b2wgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogewogICAg
IENvZGVCbG9jayogc291cmNlUHJvZmlsZWRDb2RlQmxvY2sgPQogICAgICAgICBiYXNlbGluZUNv
ZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKApAQCAtNDMsNyArNDMsNyBAQCBi
b29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlCiAgICAgaWYgKCFzb3VyY2VQ
cm9maWxlZENvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBzb3Vy
Y2VQcm9maWxlZENvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0U2l0ZSgKLSAgICAgICAgICAgIEZy
ZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwg
bV9raW5kKSk7CisgICAgICAgIEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kLCBqaXRUeXBlKSk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRCYXNlLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTUgKzU4LDE2IEBAIHN0cnVj
dCBPU1JFeGl0QmFzZSB7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CiAgICAgQ29kZU9y
aWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKIAotICAgIGJvb2wgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKK3Byb3Rl
Y3RlZDoKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiAgICAgewogICAg
ICAgICBpZiAoIW1fY291bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cocHJvZmlsZWRDb2RlQmxv
Y2spOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KHByb2ZpbGVkQ29kZUJsb2NrLCBqaXRUeXBlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgYm9v
bCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBwcm9maWxl
ZENvZGVCbG9jayk7CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3coQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSk7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MjQy
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY5Niw2ICs2OTYsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIAogICAgIHNsb3dQ
YXRoLmxpbmsoJm1faml0KTsKICAgICAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3BsYW4ud2ls
bFRyeVRvVGllclVwKSB7CisgICAgICAgIG1faml0LmFkZDMyKAorICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKDEpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygK
KyAgICAgICAgICAgICAgICBtX2ppdC5qaXRDb2RlKCktPnNsb3dQYXRoQ2FsbHMuYmVnaW4oKSAr
IG1faml0LmN1cnJlbnRKU0NhbGxJbmRleCgpKSk7CisgICAgfQorICAgIAogICAgIG1faml0Lm1v
dmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiBy
ZWdUMAogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3OSwxMCArMTU3OSw0
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgbV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpw
cmVwYXJlSklUQ29kZUZvclRpZXJVcCgpCit7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxscyA9
IDA7CisgICAgCisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2ppdC5ncmFwaCgp
Lm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICBjYXNlIENhbGw6CisgICAgICAg
ICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgICAgICAgICBudW1iZXJPZkNhbGxzKys7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIG1faml0LmppdENvZGUoKS0+c2xvd1BhdGhDYWxscy5maWxsKDAsIG51
bWJlck9mQ2FsbHMpOworfQorCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKIHsKICAg
ICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKLQorICAgIAorICAgIGlmIChtX2ppdC5ncmFwaCgpLm1f
cGxhbi53aWxsVHJ5VG9UaWVyVXApCisgICAgICAgIHByZXBhcmVKSVRDb2RlRm9yVGllclVwKCk7
CisgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyAr
K2Jsb2NrSW5kZXgpIHsKICAgICAgICAgbV9qaXQuc2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDYgKzExOSw5IEBAIHB1YmxpYzoK
ICAgICB+U3BlY3VsYXRpdmVKSVQoKTsKIAogICAgIGJvb2wgY29tcGlsZSgpOworICAgIAorICAg
IHZvaWQgcHJlcGFyZUpJVENvZGVGb3JUaWVyVXAoKTsKKyAgICAKICAgICB2b2lkIGNyZWF0ZU9T
UkVudHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JFbnRyaWVzKExpbmtCdWZmZXImKTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDE2MjQyMikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjYsNiArMTY2LDExIEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhp
dEJhc2UKICAgICB1aW50MzJfdCBtX3N0YWNrbWFwSUQ7CiAgICAgCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25z
dDsKKyAgICAKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVC
bG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gT1NSRXhpdEJh
c2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2ZpbGVkQ29kZUJsb2NrLCBF
eGl0RnJvbUZUTCk7CisgICAgfQogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3
ICs1NCwxNCBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29k
ZVJlZjsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBDb2RlUHRyOwogCi0gICAg
ZW51bSBKSVRUeXBlIHsgTm9uZSwgSG9zdENhbGxUaHVuaywgSW50ZXJwcmV0ZXJUaHVuaywgQmFz
ZWxpbmVKSVQsIERGR0pJVCwgRlRMSklUIH07CisgICAgZW51bSBKSVRUeXBlIDogdWludDhfdCB7
CisgICAgICAgIE5vbmUsCisgICAgICAgIEhvc3RDYWxsVGh1bmssCisgICAgICAgIEludGVycHJl
dGVyVGh1bmssCisgICAgICAgIEJhc2VsaW5lSklULAorICAgICAgICBERkdKSVQsCisgICAgICAg
IEZUTEpJVAorICAgIH07CiAgICAgCiAgICAgc3RhdGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgp
CiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221725</attachid>
            <date>2014-01-20 23:54:54 -0800</date>
            <delta_ts>2014-01-21 12:08:49 -0800</delta_ts>
            <desc>almost building</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41795</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjI0MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEwLDYgKzIxMCw3IEBACiAJCTBGMzhCMDE5MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERG
R0NvbXBpbGF0aW9uTW9kZS5jcHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAv
KiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzhCMDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNBQzc1MjE4M0VBMTA0MDAzMjAyOUYgLyogU3RhY2tBbGlnbm1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0FDNzUxMTgzRUExMDQwMDMyMDI5
RiAvKiBTdGFja0FsaWdubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQUM3
NTMxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
ICovOyB9OwpAQCAtMTU0Nyw2ICsxNTQ4LDcgQEAKIAkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQz
IC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9u
TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE2MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmg7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25N
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0FDNzUxMTgzRUExMDQwMDMy
MDI5RiAvKiBTdGFja0FsaWdubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGFja0FsaWdubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNBQzc1
MzE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTI0MTU0NEM5OTEw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDIwNyw2ICs0MjA5LDcgQEAKIAkJCQk5NjlBMDc5MjBFRDFEM0FFMDBGMUY2
ODEgLyogRXZhbENvZGVDYWNoZS5oICovLAogCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJCMSAv
KiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKIAkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTkyQjEg
LyogRXhlY3V0aW9uQ291bnRlci5oICovLAorCQkJCTBGM0FDNzUzMTg4RTVFQzgwMDMyMDI5RiAv
KiBFeGl0aW5nSklUVHlwZS5oICovLAogCQkJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8sCiAJCQkJMEZCMTA1ODMxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggKi8sCiAJCQkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUlu
Zm8uaCAqLywKQEAgLTQ3NDQsNiArNDc0Nyw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JF
OEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0FDNzU0MTg4RTVF
QzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QjFD
QzQxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTYyNDI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDIx
ICsxMjAsOTMgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAg
ICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAgIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKGJ5dGVjb2RlSW5kZXgp
OworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9IGNvbXV0ZUZvcihsb2NrZXIsIGNh
bGxMaW5rSW5mbywgcHJvZmlsZWRCbG9jayk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRl
eCk7CisgICAgCisgICAgaWYgKHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZH
OjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEZ1bmN0aW9uKSkpCisgICAgICAg
IHJlc3VsdC5tYWtlQ2xvc3VyZUNhbGwoKTsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vs
c2UKKyAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKKyNlbmRpZgorfQorCitDYWxsTGlua1N0
YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8pCit7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5z
dHViKQogICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoY2FsbExpbmtJbmZvLnN0dWItPmV4
ZWN1dGFibGUoKSwgY2FsbExpbmtJbmZvLnN0dWItPnN0cnVjdHVyZSgpKTsKICAgICAKICAgICBK
U0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0luZm8ubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CiAg
ICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHJldHVybiBDYWxsTGlua1N0
YXR1cygpOwogICAgIAotICAgIGlmIChjYWxsTGlua0luZm8uaGFzU2VlbkNsb3N1cmUKLSAgICAg
ICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRnVuY3Rpb24pKSkKKyAgICBpZiAoY2FsbExpbmtJbmZv
Lmhhc1NlZW5DbG9zdXJlKQogICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0LT5l
eGVjdXRhYmxlKCksIHRhcmdldC0+c3RydWN0dXJlKCkpOwogCiAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKHRhcmdldCk7Ci0jZWxzZQotICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygpOwotI2Vu
ZGlmCit9CisKK3ZvaWQgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVERkdTdGF0dXNlcygKKyAgICBD
b2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRNYXAmIG1hcCkK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2Rl
OjpERkdKSVQpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBkZmdDb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCk7CisgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gZGZnQ29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvZGVCbG9jay0+
bnVtYmVyT2ZDYWxsTGlua0luZm9zKCkgPT0gaml0Q29kZS0+c2xvd1BhdGhDYWxscy5zaXplKCkp
OworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSBkZmdDb2RlQmxvY2stPm51bWJlck9mQ2FsbExp
bmtJbmZvcygpOyBpLS07KSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGRmZ0NvZGVC
bG9jay0+Y2FsbExpbmtJbmZvKGkpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBp
bmZvLmNvZGVPcmlnaW47CisgICAgICAgIAorICAgICAgICBib29sIHRha2VTbG93UGF0aDsKKyAg
ICAgICAgYm9vbCBiYWRGdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHdl
IGhhZCBhbHJlYWR5IHByZXZpb3VzbHkgbWFkZSBhIHRlcnJpYmxlIG1pc3Rha2UgaW4gdGhlIEZU
TCBmb3IgdGhpcworICAgICAgICAvLyBjb2RlIG9yaWdpbi4gTm90ZSB0aGF0IHRoaXMgaXMgYXBw
cm94aW1hdGUgYmVjYXVzZSB3ZSBjb3VsZCBoYXZlIGEgbW9ub3ZhcmlhbnQKKyAgICAgICAgLy8g
aW5saW5lIGluIHRoZSBGVEwgdGhhdCBlbmRlZCB1cCBmYWlsaW5nLiBXZSBzaG91bGQgZml4IHRo
YXQgYXQgc29tZSBwb2ludCBieQorICAgICAgICAvLyBoYXZpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRv
IHRyYWNrIHRoZSBjb250ZXh0IG9mIGZyZXF1ZW50IGV4aXRzLiBUaGlzIGlzIGN1cnJlbnRseQor
ICAgICAgICAvLyBjaGFsbGVuZ2luZyBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgY3JlYXRpbmcg
YSBDb2RlT3JpZ2luLWJhc2VkIGRhdGFiYXNlIGluCisgICAgICAgIC8vIGJhc2VsaW5lIENvZGVC
bG9ja3MsIGJ1dCB0aG9zZSBDb2RlQmxvY2tzIGRvbid0IHJlYWxseSBoYXZlIGEgcGxhY2UgdG8g
cHV0IHRoZQorICAgICAgICAvLyBJbmxpbmVDYWxsRnJhbWVzLgorICAgICAgICB7CisgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgICAgIENvZGVCbG9jayogY3VycmVudEJhc2VsaW5lID0KKyAgICAgICAgICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVP
cmlnaW4pOworICAgICAgICAgICAgdGFrZVNsb3dQYXRoID0KKyAgICAgICAgICAgICAgICBjdXJy
ZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKERGRzo6RnJlcXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlLCBFeGl0RnJvbUZUTCkpCisgICAgICAgICAgICAgICAg
fHwgY3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQsIEV4aXRGcm9tRlRMKSkK
KyAgICAgICAgICAgICAgICB8fCBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKERGRzo6RnJl
cXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZEV4ZWN1dGFibGUsIEV4
aXRGcm9tRlRMKSk7CisgICAgICAgICAgICBiYWRGdW5jdGlvbiA9CisgICAgICAgICAgICAgICAg
Y3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbiwgRXhpdEZyb21GVEwpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoZGZnQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgaWYgKHRha2VTbG93UGF0
aCB8fCBqaXRDb2RlLT5zbG93UGF0aENhbGxzW2ldID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dD
YXNlTWluaW11bUNvdW50KCkpCisgICAgICAgICAgICAgICAgbWFwLmFkZChpbmZvLmNvZGVPcmln
aW4sIHRha2VzU2xvd1BhdGgoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICBDYWxsTGlua1N0YXR1cyBzdGF0dXMgPSBjb21wdXRlRm9yKGxvY2tlciwgaW5mbyk7CisgICAg
ICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChiYWRGdW5jdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5tYWtlQ2xvc3Vy
ZUNhbGwoKTsKKyAgICAgICAgICAgICAgICAgICAgbWFwLmFkZChpbmZvLmNvZGVPcmlnaW4sIHN0
YXR1cyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCitDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICBD
b2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgY29uc3QgQ2Fs
bExpbmtTdGF0dXM6OkNvbnRleHRNYXAmIG1hcCkKK3sKKyAgICBDb250ZXh0TWFwOjppdGVyYXRv
ciBpdGVyID0gbWFwLmZpbmQoY29kZU9yaWdpbik7CisgICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgp
KQorICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVG
b3IocHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKIH0KIAogdm9pZCBD
YWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHJldmlzaW9u
IDE2MjQyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw2ICs3NSwyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CiAgICAgCisgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBhc3N1bWluZyB0
aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBwYXRoIGFuZCBuZXZlciBwcmV2aW91c2x5CisgICAgLy8g
ZXhpdGVkLgorICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm8mKTsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q29kZU9yaWdpbiwgQ2FsbExpbmtTdGF0dXMsIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+
IENvbnRleHRNYXA7CisgICAgCisgICAgLy8gQ29tcHV0ZXMgYWxsIG9mIHRoZSBzdGF0dXNlcyBv
ZiB0aGUgREZHIGNvZGUgYmxvY2suIERvZXNuJ3QgaW5jbHVkZSBzdGF0dXNlcyB0aGF0IGhhZAor
ICAgIC8vIG5vIGluZm9ybWF0aW9uLiBDdXJyZW50bHkgd2UgdXNlIHRoaXMgd2hlbiBjb21waWxp
bmcgRlRMIGNvZGUsIHRvIGVuYWJsZSBwb2x5dmFyaWFudAorICAgIC8vIGlubGluaW5nLgorICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVERkdTdGF0dXNlcyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywg
Q29udGV4dE1hcCYpOworICAgIAorICAgIC8vIEhlbHBlciB0aGF0IGZpcnN0IGNvbnN1bHRzIHRo
ZSBDb250ZXh0TWFwIGFuZCB0aGVuIGRvZXMgY29tcHV0ZUZvcigpLgorICAgIHN0YXRpYyBDYWxs
TGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IENvbnRl
eHRNYXAmKTsKKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFy
Z2V0IHx8IG1fZXhlY3V0YWJsZSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQpAQCAtOTQsNiArMTA4
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAK
IHByaXZhdGU6CisgICAgdm9pZCBtYWtlQ2xvc3VyZUNhbGwoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2lzUHJvdmVkKTsKKyAgICAgICAgLy8gVHVybiB0aGlzIGludG8gYSBjbG9zdXJlIGNh
bGwuCisgICAgICAgIG1fY2FsbFRhcmdldCA9IEpTVmFsdWUoKTsKKyAgICB9CisgICAgCiAgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAg
IEpTVmFsdWUgbV9jYWxsVGFyZ2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyNDI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00OTAsOCArNDkwLDgg
QEAgcHVibGljOgogICAgIFJhcmVDYXNlUHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2FzZVBy
b2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIG1fc3BlY2lhbEZh
c3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29k
ZU9mZnNldCwKKyAgICAgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsK
ICAgICB9CiAKICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNv
ZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYzIEBAIHVu
c2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5s
aW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KKworYm9vbCBDb2RlT3Jp
Z2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25z
dAoreworICAgIGlmICghYS5pc1NldCgpKQorICAgICAgICByZXR1cm4gIWIuaXNTZXQoKTsKKyAg
ICBpZiAoIWIuaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChh
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiBiLmlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCk7CisgICAgaWYgKGIuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAorICAgIENvZGVPcmlnaW4gYSA9ICp0aGlzOworICAg
IENvZGVPcmlnaW4gYiA9IG90aGVyOworICAgIGZvciAoOzspIHsKKyAgICAgICAgQVNTRVJUKGEu
aXNTZXQoKSk7CisgICAgICAgIEFTU0VSVChiLmlzU2V0KCkpOworICAgICAgICAKKyAgICAgICAg
aWYgKGEuYnl0ZWNvZGVJbmRleCAhPSBvdGhlci5ieXRlY29kZUluZGV4KQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCghIWEuaW5saW5lQ2FsbEZyYW1l
KSAhPSAoISFiLmlubGluZUNhbGxGcmFtZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWEuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1
dGFibGUgIT0gYi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNhbGxl
cjsKKyAgICAgICAgYiA9IGIuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQorfQorCit1
bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhhc2goKSBjb25zdAoreworICAgIGlmICgh
aXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkpCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDI7
CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gKnRoaXM7CisgICAgZm9yICg7OykgeworICAg
ICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICAKKyAgICAg
ICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+
OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAg
ICAgICAgCisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyOworICAgIH0KK30KKwogVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46OmlubGlu
ZVN0YWNrKCkgY29uc3QKIHsKICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGluZURl
cHRoKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0cnVjdCBDb2Rl
T3JpZ2luIHsKICAgICAKICAgICBDb2RlT3JpZ2luKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKICAgICAgICAgOiBieXRlY29kZUluZGV4KGludmFsaWRCeXRlY29kZUluZGV4KQotICAg
ICAgICAsIGlubGluZUNhbGxGcmFtZShiaXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigxKSkpCisgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKGRlbGV0
ZWRNYXJrZXIoKSkKICAgICB7CiAgICAgfQogICAgIApAQCAtOTcsMTEgKzk3LDIzIEBAIHN0cnVj
dCBDb2RlT3JpZ2luIHsKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3Ro
ZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KICAgICAKKyAgICAvLyBUaGlzIGNo
ZWNrcyBpZiB0aGUgdHdvIGNvZGUgb3JpZ2lucyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHN0YWNr
IHRyYWNlIHNuaXBwZXRzLAorICAgIC8vIGJ1dCBpZ25vcmUgd2hldGhlciB0aGUgSW5saW5lQ2Fs
bEZyYW1lJ3MgYXJlIGlkZW50aWNhbC4KKyAgICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8o
Y29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGFwcHJv
eGltYXRlSGFzaCgpIGNvbnN0OworICAgIAogICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBU
aGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVj
dG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFt
JiwgRHVtcENvbnRleHQqKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgSW5saW5lQ2Fs
bEZyYW1lKiBkZWxldGVkTWFya2VyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAgfQog
fTsKIAogc3RydWN0IElubGluZUNhbGxGcmFtZSB7CkBAIC0xODUsNiArMTk3LDEyIEBAIHN0cnVj
dCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKIAorc3RydWN0IENvZGVPcmlnaW5BcHByb3hpbWF0
ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkg
eyByZXR1cm4ga2V5LmFwcHJveGltYXRlSGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYS5pc0Fw
cHJveGltYXRlbHlFcXVhbFRvKGIpOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
IG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RG
R0V4aXRQcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw4IEBAIEV4aXRQcm9maWxlOjp+RXhpdFByb2ZpbGUoKSB7IH0KIAogYm9vbCBF
eGl0UHJvZmlsZTo6YWRkKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBGcmVxdWVu
dEV4aXRTaXRlJiBzaXRlKQogeworICAgIEFTU0VSVChzaXRlLmppdFR5cGUoKSAhPSBFeGl0RnJv
bUFueXRoaW5nKTsKKyAgICAKICAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVxdWVu
dCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQogICAgIC8vIGlu
dG8gaXQuCiAgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CkBAIC03OCw3ICs4MCw3IEBA
IGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKGNvbnN0IENvbmMKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IG1fZnJlcXVlbnRFeGl0U2l0ZXMt
PnNpemUoKTsgaS0tOykgewotICAgICAgICBpZiAobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkg
PT0gc2l0ZSkKKyAgICAgICAgaWYgKHNpdGUuc3Vic3VtZXMobV9mcmVxdWVudEV4aXRTaXRlcy0+
YXQoaSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJv
ZmlsZS5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvREZHRXhpdFByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNs
dWRlICJFeGl0S2luZC5oIgorI2luY2x1ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMzksMTggKzQwLDIyIEBAIHB1YmxpYzoKICAgICBGcmVxdWVudEV4aXRTaXRl
KCkKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQogICAg
ICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgICAgICAsIG1faml0VHlwZShFeGl0RnJv
bUFueXRoaW5nKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgx
KSAvLyAxID0gZGVsZXRlZCB2YWx1ZQogICAgICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQor
ICAgICAgICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRoaW5nKQogICAgIHsKICAgICB9CiAgICAg
Ci0gICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
RXhpdEtpbmQga2luZCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0
VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUo
aml0VHlwZSkKICAgICB7CiAgICAgICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkg
ewogICAgICAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0
dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKQEAgLTYx
LDkgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBVc2UgdGhpcyBjb25zdHJ1Y3RvciBp
ZiB5b3Ugd2lzaCBmb3IgdGhlIGV4aXQgc2l0ZSB0byBiZSBjb3VudGVkIGdsb2JhbGx5IHdpdGhp
biBpdHMKICAgICAvLyBjb2RlIGJsb2NrLgotICAgIGV4cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUo
RXhpdEtpbmQga2luZCkKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtp
bmQsIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUgPSBFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICA6
IG1fYnl0ZWNvZGVPZmZzZXQoMCkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBt
X2ppdFR5cGUoaml0VHlwZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzUsMTYgKzgxLDM2IEBA
IHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3Ro
ZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhl
ci5tX2J5dGVjb2RlT2Zmc2V0Ci0gICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
OworICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYg
bV9qaXRUeXBlID09IG90aGVyLm1faml0VHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzdWJz
dW1lcyhjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2J5dGVjb2RlT2Zmc2V0ICE9IG90aGVyLm1fYnl0ZWNvZGVPZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9qaXRUeXBlID09IEV4aXRG
cm9tQW55dGhpbmcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1f
aml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGU7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2Rl
T2Zmc2V0KSArIG1fa2luZDsKKyAgICAgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2Rl
T2Zmc2V0KSArIG1fa2luZCArIG1faml0VHlwZSAqIDc7CiAgICAgfQogICAgIAogICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQog
ICAgIEV4aXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBFeGl0aW5n
SklUVHlwZSBqaXRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9qaXRUeXBlOyB9CisgICAgCisgICAg
RnJlcXVlbnRFeGl0U2l0ZSB3aXRoSklUVHlwZShFeGl0aW5nSklUVHlwZSBqaXRUeXBlKSBjb25z
dAorICAgIHsKKyAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZSByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgcmVzdWx0Lm1faml0VHlwZSA9IGppdFR5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewpA
QCAtOTQsNiArMTIwLDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVj
b2RlT2Zmc2V0OwogICAgIEV4aXRLaW5kIG1fa2luZDsKKyAgICBFeGl0aW5nSklUVHlwZSBtX2pp
dFR5cGU7CiB9OwogCiBzdHJ1Y3QgRnJlcXVlbnRFeGl0U2l0ZUhhc2ggewpAQCAtMTY2LDYgKzE5
MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhp
dFNpdGUmIHNpdGUpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoc2l0ZS5qaXRUeXBlKCkgPT0g
RXhpdEZyb21Bbnl0aGluZykgeworICAgICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKHNpdGUu
d2l0aEpJVFR5cGUoRXhpdEZyb21ERkcpKQorICAgICAgICAgICAgICAgIHx8IGhhc0V4aXRTaXRl
KHNpdGUud2l0aEpJVFR5cGUoRXhpdEZyb21GVEwpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1
cm4gbV9mcmVxdWVudEV4aXRTaXRlcy5maW5kKHNpdGUpICE9IG1fZnJlcXVlbnRFeGl0U2l0ZXMu
ZW5kKCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRLaW5kLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9FeGl0S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1lbnVtIEV4aXRLaW5kIHsKK2VudW0gRXhpdEtpbmQg
OiB1aW50OF90IHsKICAgICBFeGl0S2luZFVuc2V0LAogICAgIEJhZFR5cGUsIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIGEgdHlwZSBwcmVkaWN0aW9uIHdhcyB3cm9uZy4KICAgICBCYWRGdW5jdGlvbiwg
Ly8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbWFkZSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91
dCB3aGF0IGZ1bmN0aW9uIHdlIHdvdWxkIHNlZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEV4aXRpbmdKSVRUeXBlX2gKKyNkZWZpbmUgRXhpdGluZ0pJVFR5cGVf
aAorCituYW1lc3BhY2UgSlNDIHsKKworZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3Qgewor
ICAgIEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21ERkcsCisgICAgRXhpdEZyb21GVEwK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRXhpdGluZ0pJVFR5cGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTYyNDI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzYsNiArMTEzNiw4IEBAIHBy
aXZhdGU6CiAgICAgLy8gd29yay1hcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBj
YW4ndCBoYW5kbGUgImVtcHR5IiB2YWx1ZXMuCiAgICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJ
bmRleDsKICAgICAKKyAgICBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCBtX2NhbGxDb250ZXh0
TWFwOworICAgIAogICAgIEluc3RydWN0aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CiAK
QEAgLTExNTYsMTAgKzExNTgsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJ
bnN0cnVjdAogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwogCi0gICAg
aWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkKLSAgICAgICAgY2FsbExpbmtTdGF0
dXMgPSBDYWxsTGlua1N0YXR1cyhtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQp
KS5zZXRJc1Byb3ZlZCh0cnVlKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxMaW5rU3RhdHVzID0g
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLCBtX2N1cnJlbnRJbmRleCk7CisgICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFy
Z2V0KSkgeworICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAorICAgICAg
ICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQo
dHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgfQog
ICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAv
LyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGgg
Y2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKQEAgLTM2MzIs
NiArMzYzNywxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgLy8gU2V0IGR1
cmluZyBjb25zdHJ1Y3Rpb24uCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAgICAgCisg
ICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpICYmICEhbV9ncmFwaC5tX3BsYW4ucHJv
ZmlsZWRERkdDb2RlQmxvY2spIHsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVERkdT
dGF0dXNlcygKKyAgICAgICAgICAgIG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2Nr
LmdldCgpLCBtX2NhbGxDb250ZXh0TWFwKTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fY29kZUJs
b2NrLT5jYXB0dXJlQ291bnQoKSkgewogICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUg
PSBtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTU1LDggKzU1LDggQEAgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKIAogI2lm
IEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAot
ICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1
bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCisg
ICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVl
PiYgbXVzdEhhbmRsZVZhbHVlcywKICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaz4gY2FsbGJhY2spCiB7CiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24o
IkRGRyBDb21waWxhdGlvbiAoRHJpdmVyKSIpOwpAQCAtNjYsNiArNjYsNyBAQCBzdGF0aWMgQ29t
cGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAg
QVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBB
U1NFUlQoIXByb2ZpbGVkREZHQ29kZUJsb2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRU
eXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZURG
R0pJVCgpIHx8ICFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAg
ICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAgLTk1LDcgKzk2LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIH0KICAgICAKICAgICBSZWZQdHI8UGxh
bj4gcGxhbiA9IGFkb3B0UmVmKAotICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOworICAgICAgICBuZXcgUGxh
bihjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsKICAgICAKICAgICBib29sIGVuYWJsZUNvbmN1cnJl
bnRKSVQ7CiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQpAQCAtMTE3LDcgKzExOCw3IEBAIHN0
YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJMRShE
RkdfSklUKQogc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIFZNJiwg
Q29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwgY29uc3QgT3BlcmFuZHM8SlNW
YWx1ZT4mLAorICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mLAogICAgIFBhc3NSZWZQdHI8RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPikKIHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWls
ZWQ7CkBAIC0xMjUsMTMgKzEyNiwxNCBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGls
ZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNv
bXBpbGUoCi0gICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2Rl
IG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUg
bW9kZSwKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRz
PEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrPiBwYXNzZWRDYWxsYmFjaykKIHsKICAgICBSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjayA9IHBhc3NlZENhbGxiYWNrOwogICAgIENvbXBp
bGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNvbXBpbGVJbXBsKAotICAgICAgICB2bSwgY29kZUJsb2Nr
LCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMsIGNhbGxiYWNr
KTsKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywKKyAgICAgICAgY2FsbGJhY2sp
OwogICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJlZCkKICAgICAgICAgY2FsbGJh
Y2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVy
biByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlz
aW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ1LDggKzQ1LDkgQEAgSlNfRVhQT1JUX1BSSVZBVEUg
dW5zaWduZWQgZ2V0TnVtQ29tcGlsYQogLy8gSWYgdGhlIHdvcmtsaXN0IGlzIG5vbi1udWxsLCB3
ZSBkbyBhIGNvbmN1cnJlbnQgY29tcGlsZS4gT3RoZXJ3aXNlIHdlIGRvIGEgc3luY2hyb25vdXMK
IC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2UgZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxs
IHRoZSBjYWxsYmFjayB3aXRoIHRoZSByZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxl
KAotICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRy
eUJ5dGVjb2RlSW5kZXgsCi0gICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVW
YWx1ZXMsIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CisgICAgVk0m
LCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlv
bk1vZGUsCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5k
czxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4pOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxNjI0MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTE5LDYgKzExOSw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9z
ckVudHJ5OwogICAgIFNlZ21lbnRlZFZlY3RvcjxERkc6Ok9TUkV4aXQsIDg+IG9zckV4aXQ7CiAg
ICAgVmVjdG9yPERGRzo6U3BlY3VsYXRpb25SZWNvdmVyeT4gc3BlY3VsYXRpb25SZWNvdmVyeTsK
KyAgICBWZWN0b3I8dW5zaWduZWQ+IHNsb3dQYXRoQ2FsbHM7CiAgICAgREZHOjpWYXJpYWJsZUV2
ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRTdHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1p
bmlmaWVkREZHOwogI2lmIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzEsNiArMjMxLDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5r
QgogICAgICAgICBpbmZvLnBhdGNoLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9p
bnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVChtX2ppdENvZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgpID09IG1fanNDYWxs
cy5zaXplKCkpOwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9q
c0NhbGxzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5z
aXplKCk7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+
Y2FsbExpbmtJbmZvKGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDExIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIG1faW5zLmFwcGVuZChyZWNvcmQpOwogICAgIH0KKyAgICAK
KyAgICB1bnNpZ25lZCBjdXJyZW50SlNDYWxsSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fanNDYWxscy5zaXplKCk7CisgICAgfQogCiAgICAgdm9pZCBhZGRKU0NhbGwoQ2Fs
bCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENh
bGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAgc3RydWN0IE9TUkV4
aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAg
ICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3Zl
cnJpZGU7CisgICAgCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9TUkV4
aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZENvZGVCbG9j
aywgRXhpdEZyb21ERkcpOworICAgIH0KIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVE
ZWJ1Z0luZm8gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5jcHAJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lk
ZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2spCitib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3coQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkK
IHsKICAgICBDb2RlQmxvY2sqIHNvdXJjZVByb2ZpbGVkQ29kZUJsb2NrID0KICAgICAgICAgYmFz
ZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKQEAgLTQzLDcgKzQz
LDcgQEAgYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogICAgIGlmICgh
c291cmNlUHJvZmlsZWRDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gc291cmNlUHJvZmlsZWRDb2RlQmxvY2stPmFkZEZyZXF1ZW50RXhpdFNpdGUoCi0gICAgICAg
ICAgICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2Rl
SW5kZXgsIG1fa2luZCkpOworICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlwZSkpOwogfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE1ICs1OCwxNiBA
QCBzdHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAg
IENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CiAKLSAgICBib29sIGNvbnNp
ZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sp
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAg
IHsKICAgICAgICAgaWYgKCFtX2NvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVk
Q29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlU2xvdyhwcm9maWxlZENvZGVCbG9jaywgaml0VHlwZSk7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spOworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGpp
dFR5cGUpOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTY3LDggKzExNjcsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJV
cE5vdyhFeGVjCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29t
cGlsZSgKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZU
TE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAotICAgICAgICBUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOworICAgICAgICAqdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBV
SU5UX01BWCwKKyAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKIH0KIAogY2hhciogSklUX09QRVJB
VElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBjaGFyKiBKSVRf
T1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgK
ICAgICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJl
YW1JbmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50
cnlSZXN1bHQgPSBjb21waWxlKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAq
dm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExGb3JP
U1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxv
Y2spKTsKICAgICAKICAgICAvLyBCdXQgd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgYSByZXBsYWNl
bWVudCBjb21waWxlLiBPZiBjb3Vyc2UsIHdlIGRvbid0IHdhbnQgdG8KQEAgLTEyNzAsOCArMTI3
MCw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgICAgICAm
JiAoIXdvcmtsaXN0CiAgICAgICAgICAgICB8fCB3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShr
ZXlGb3JSZXBsYWNlbWVudCkgPT0gV29ya2xpc3Q6Ok5vdEtub3duKSkgewogICAgICAgICBjb21w
aWxlKAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCks
IEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAotICAgICAgICAgICAgVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxvY2ss
IEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTYyNDIy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTA3LDEwICsxMDcsMTIgQEAgc3RhdGljIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQg
cHJvZmlsZQogfQogCiBQbGFuOjpQbGFuKAotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNz
ZWRDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMp
CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaywKKyAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNv
ZGVCbG9jayhwYXNzZWRDb2RlQmxvY2spCisgICAgLCBwcm9maWxlZERGR0NvZGVCbG9jayhwcm9m
aWxlZERGR0NvZGVCbG9jaykKICAgICAsIG1vZGUobW9kZSkKICAgICAsIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11
c3RIYW5kbGVWYWx1ZXMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2
aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU1LDcgKzU1LDggQEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiAKIHN0cnVj
dCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBQbGFuKAot
ICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4sIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAorICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrVG9Db21waWxlLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAg
ICBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAg
ICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFu
KCk7CiAgICAgCkBAIC03MCw2ICs3MSw3IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGUKICAgICAKICAgICBWTSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29k
ZUJsb2NrOworICAgIFJlZlB0cjxDb2RlQmxvY2s+IHByb2ZpbGVkREZHQ29kZUJsb2NrOwogICAg
IENvbXBpbGF0aW9uTW9kZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleDsKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
OTYsNiArNjk2LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUK
ICAgICAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgCisgICAgaWYgKG1faml0Lmdy
YXBoKCkubV9wbGFuLndpbGxUcnlUb1RpZXJVcCkgeworICAgICAgICBtX2ppdC5hZGQzMigKKyAg
ICAgICAgICAgIFRydXN0ZWRJbW0zMigxKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoCisgICAgICAgICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5zbG93UGF0
aENhbGxzLmJlZ2luKCkgKyBtX2ppdC5jdXJyZW50SlNDYWxsSW5kZXgoKSkpOworICAgIH0KKyAg
ICAKICAgICBtX2ppdC5tb3ZlKGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUg
bmVlZHMgdG8gYmUgaW4gcmVnVDAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1f
aml0Lm5lYXJDYWxsKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NzksMTAgKzE1NzksNDAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKAogICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKIH0KIAordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6cHJlcGFyZUpJVENvZGVGb3JUaWVyVXAoKQoreworICAgIHVuc2lnbmVk
IG51bWJlck9mQ2FsbHMgPSAwOworICAgIAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1faml0LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAg
ICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7
CisgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2Fz
ZSBDYWxsOgorICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgbnVt
YmVyT2ZDYWxscysrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2ppdC5qaXRDb2RlKCktPnNsb3dQYXRo
Q2FsbHMuZmlsbCgwLCBudW1iZXJPZkNhbGxzKTsKK30KKwogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSgpCiB7CiAgICAgY2hlY2tBcmd1bWVudFR5cGVzKCk7Ci0KKyAgICAKKyAgICBpZiAo
bV9qaXQuZ3JhcGgoKS5tX3BsYW4ud2lsbFRyeVRvVGllclVwKQorICAgICAgICBwcmVwYXJlSklU
Q29kZUZvclRpZXJVcCgpOworICAgIAogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgo
KS5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgIG1faml0LnNldEZvckJsb2Nr
SW5kZXgoYmxvY2tJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsx
MTksOSBAQCBwdWJsaWM6CiAgICAgflNwZWN1bGF0aXZlSklUKCk7CiAKICAgICBib29sIGNvbXBp
bGUoKTsKKyAgICAKKyAgICB2b2lkIHByZXBhcmVKSVRDb2RlRm9yVGllclVwKCk7CisgICAgCiAg
ICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVzKCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5r
QnVmZmVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShy
ZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2NiwxMSBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1
YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIAog
ICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0
bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9m
aWxlZENvZGVCbG9jaywgRXhpdEZyb21GVEwpOworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lv
biAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsNyArNTQsMTQgQEAgcHVibGljOgogICAgIHR5cGVkZWYgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Q29kZVB0cjsKIAotICAgIGVudW0gSklUVHlwZSB7IE5vbmUsIEhvc3RDYWxsVGh1bmssIEludGVy
cHJldGVyVGh1bmssIEJhc2VsaW5lSklULCBERkdKSVQsIEZUTEpJVCB9OworICAgIGVudW0gSklU
VHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBOb25lLAorICAgICAgICBIb3N0Q2FsbFRodW5rLAor
ICAgICAgICBJbnRlcnByZXRlclRodW5rLAorICAgICAgICBCYXNlbGluZUpJVCwKKyAgICAgICAg
REZHSklULAorICAgICAgICBGVExKSVQKKyAgICB9OwogICAgIAogICAgIHN0YXRpYyBKSVRUeXBl
IGJvdHRvbVRpZXJKSVQoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4Niw3ICsx
MTg2LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAg
ICB9CiAKICAgICAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAot
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgREZHOjpE
RkdNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVw
bGFjZW1lbnQoKS5nZXQoKSwgMCwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAogICAgICAg
ICAgICAgbXVzdEhhbmRsZVZhbHVlcywgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNyZWF0ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRp
b25TdWNjZXNzZnVsKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221773</attachid>
            <date>2014-01-21 12:08:49 -0800</date>
            <delta_ts>2014-01-23 00:01:19 -0800</delta_ts>
            <desc>it inlined something.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43808</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjI0MjIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEwLDYgKzIxMCw3IEBACiAJCTBGMzhCMDE5MTdDRkU3
NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERG
R0NvbXBpbGF0aW9uTW9kZS5jcHAgKi87IH07CiAJCTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAv
KiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMzhCMDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNBQzc1MjE4M0VBMTA0MDAzMjAyOUYgLyogU3RhY2tBbGlnbm1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0FDNzUxMTgzRUExMDQwMDMyMDI5
RiAvKiBTdGFja0FsaWdubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQUM3
NTMxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAv
KiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3Bw
ICovOyB9OwpAQCAtMTU0Nyw2ICsxNTQ4LDcgQEAKIAkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQz
IC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuY3BwOyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9u
TW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMzhCMDE2MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmg7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25N
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0FDNzUxMTgzRUExMDQwMDMy
MDI5RiAvKiBTdGFja0FsaWdubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdGFja0FsaWdubWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNBQzc1
MzE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTI0MTU0NEM5OTEw
MDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDIwNyw2ICs0MjA5LDcgQEAKIAkJCQk5NjlBMDc5MjBFRDFEM0FFMDBGMUY2
ODEgLyogRXZhbENvZGVDYWNoZS5oICovLAogCQkJCTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJCMSAv
KiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKIAkJCQkwRjU2QTFEMTE1MDAwRjMxMDAyOTkyQjEg
LyogRXhlY3V0aW9uQ291bnRlci5oICovLAorCQkJCTBGM0FDNzUzMTg4RTVFQzgwMDMyMDI5RiAv
KiBFeGl0aW5nSklUVHlwZS5oICovLAogCQkJCTBGQjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBF
eGl0S2luZC5jcHAgKi8sCiAJCQkJMEZCMTA1ODMxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5k
LmggKi8sCiAJCQkJMEYwQjgzQUExNEJDRjVCOTAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUlu
Zm8uaCAqLywKQEAgLTQ3NDQsNiArNDc0Nyw3IEBACiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNB
NkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JF
OEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0FDNzU0MTg4RTVF
QzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QjFD
QzQxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lzdGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0
YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTYyNDI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMg
KzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMu
aCIKIAorI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJMTEludENhbGxMaW5rSW5mby5oIgog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisK
IENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1cyhKU1ZhbHVlIHZhbHVlKQogICAgIDogbV9j
YWxsVGFyZ2V0KHZhbHVlKQogICAgICwgbV9leGVjdXRhYmxlKDApCkBAIC0xMjAsMjEgKzEyNCwx
MDUgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGbwogICAgICAgICBy
ZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAogICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJ
bmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKGJ5dGVjb2RlSW5kZXgpOworICAg
IAorICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9IGNvbXB1dGVGb3IobG9ja2VyLCBjYWxsTGlu
a0luZm8pOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTElu
dChsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIGlmIChw
cm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShi
eXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbikpKQorICAgICAgICByZXN1bHQubWFrZUNsb3N1cmVD
YWxsKCk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxM
aW5rU3RhdHVzKCk7CisjZW5kaWYKK30KKworQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5rSW5mbyYgY2Fs
bExpbmtJbmZvKQorewogICAgIGlmIChjYWxsTGlua0luZm8uc3R1YikKICAgICAgICAgcmV0dXJu
IENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby5zdHViLT5leGVjdXRhYmxlKCksIGNhbGxMaW5r
SW5mby5zdHViLT5zdHJ1Y3R1cmUoKSk7CiAgICAgCiAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0g
Y2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLmdldCgpOwogICAgIGlmICghdGFyZ2V0KQotICAg
ICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpOworICAgICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKICAgICAKLSAgICBp
ZiAoY2FsbExpbmtJbmZvLmhhc1NlZW5DbG9zdXJlCi0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2st
Pmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgs
IEJhZEZ1bmN0aW9uKSkpCisgICAgaWYgKGNhbGxMaW5rSW5mby5oYXNTZWVuQ2xvc3VyZSkKICAg
ICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKHRhcmdldC0+ZXhlY3V0YWJsZSgpLCB0YXJnZXQt
PnN0cnVjdHVyZSgpKTsKIAogICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyh0YXJnZXQpOwotI2Vs
c2UKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMoKTsKLSNlbmRpZgorfQorCit2b2lkIENhbGxM
aW5rU3RhdHVzOjpjb21wdXRlREZHU3RhdHVzZXMoCisgICAgQ29kZUJsb2NrKiBkZmdDb2RlQmxv
Y2ssIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwJiBtYXApCit7CisjaWYgRU5BQkxFKERGR19K
SVQpCisgICAgUkVMRUFTRV9BU1NFUlQoZGZnQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6REZHSklUKTsKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gZGZnQ29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9IGRmZ0NvZGVC
bG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBSRUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2st
Pm51bWJlck9mQ2FsbExpbmtJbmZvcygpID09IGppdENvZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgp
KTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gZGZnQ29kZUJsb2NrLT5udW1iZXJPZkNhbGxM
aW5rSW5mb3MoKTsgaS0tOykgeworICAgICAgICBDYWxsTGlua0luZm8mIGluZm8gPSBkZmdDb2Rl
QmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0g
aW5mby5jb2RlT3JpZ2luOworICAgICAgICAKKyAgICAgICAgYm9vbCB0YWtlU2xvd1BhdGg7Cisg
ICAgICAgIGJvb2wgYmFkRnVuY3Rpb247CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayBpZiB3
ZSBoYWQgYWxyZWFkeSBwcmV2aW91c2x5IG1hZGUgYSB0ZXJyaWJsZSBtaXN0YWtlIGluIHRoZSBG
VEwgZm9yIHRoaXMKKyAgICAgICAgLy8gY29kZSBvcmlnaW4uIE5vdGUgdGhhdCB0aGlzIGlzIGFw
cHJveGltYXRlIGJlY2F1c2Ugd2UgY291bGQgaGF2ZSBhIG1vbm92YXJpYW50CisgICAgICAgIC8v
IGlubGluZSBpbiB0aGUgRlRMIHRoYXQgZW5kZWQgdXAgZmFpbGluZy4gV2Ugc2hvdWxkIGZpeCB0
aGF0IGF0IHNvbWUgcG9pbnQgYnkKKyAgICAgICAgLy8gaGF2aW5nIGRhdGEgc3RydWN0dXJlcyB0
byB0cmFjayB0aGUgY29udGV4dCBvZiBmcmVxdWVudCBleGl0cy4gVGhpcyBpcyBjdXJyZW50bHkK
KyAgICAgICAgLy8gY2hhbGxlbmdpbmcgYmVjYXVzZSBpdCB3b3VsZCByZXF1aXJlIGNyZWF0aW5n
IGEgQ29kZU9yaWdpbi1iYXNlZCBkYXRhYmFzZSBpbgorICAgICAgICAvLyBiYXNlbGluZSBDb2Rl
QmxvY2tzLCBidXQgdGhvc2UgQ29kZUJsb2NrcyBkb24ndCByZWFsbHkgaGF2ZSBhIHBsYWNlIHRv
IHB1dCB0aGUKKyAgICAgICAgLy8gSW5saW5lQ2FsbEZyYW1lcy4KKyAgICAgICAgeworICAgICAg
ICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoYmFzZWxpbmVDb2RlQmxvY2stPm1fbG9j
ayk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGN1cnJlbnRCYXNlbGluZSA9CisgICAgICAgICAg
ICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2Rl
T3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7CisgICAgICAgICAgICB0YWtlU2xvd1BhdGggPQor
ICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNlbGluZS0+aGFzRXhpdFNpdGUoREZHOjpGcmVxdWVu
dEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUsIEV4aXRGcm9tRlRM
KSkKKyAgICAgICAgICAgICAgICB8fCBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKERGRzo6
RnJlcXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlV2F0Y2hw
b2ludCwgRXhpdEZyb21GVEwpKQorICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRCYXNlbGluZS0+
aGFzRXhpdFNpdGUoREZHOjpGcmVxdWVudEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCwgQmFkRXhlY3V0YWJsZSwgRXhpdEZyb21GVEwpKTsKKyAgICAgICAgICAgIGJhZEZ1bmN0aW9u
ID0KKyAgICAgICAgICAgICAgICBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKERGRzo6RnJl
cXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZEZ1bmN0aW9uLCBFeGl0
RnJvbUZUTCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICBpZiAodGFrZVNsb3dQYXRoIHx8IGppdENvZGUtPnNsb3dQYXRoQ2FsbHNbaV0gPj0gT3B0
aW9uczo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSkKKyAgICAgICAgICAgICAgICBt
YXAuYWRkKGluZm8uY29kZU9yaWdpbiwgdGFrZXNTbG93UGF0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHN0YXR1cyA9IGNvbXB1dGVGb3Io
bG9ja2VyLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGJhZEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdHVzLm1ha2VDbG9zdXJlQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBtYXAuYWRk
KGluZm8uY29kZU9yaWdpbiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiQ29udGV4dCBtYXA6XG4iKTsKKyAg
ICAgICAgQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOworICAgICAgICBD
b250ZXh0TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgaXRlci0+a2V5
LCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICIsIGl0ZXItPnZhbHVlLCAi
XG4iKTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIGNvbnN0IENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwJiBtYXApCit7Cisg
ICAgQ29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5maW5kKGNvZGVPcmlnaW4p
OworICAgIGlmIChpdGVyICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVl
OworICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4u
Ynl0ZWNvZGVJbmRleCk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5oCShyZXZpc2lvbiAxNjI0MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBDYWxsTGlua1N0YXR1c19oCiAjZGVmaW5lIENhbGxMaW5rU3RhdHVz
X2gKIAorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJJbnRy
aW5zaWMuaCIKQEAgLTM4LDYgKzM5LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBJ
bnRlcm5hbEZ1bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFN0cnVjdHVyZTsKK3N0
cnVjdCBDYWxsTGlua0luZm87CiAKIGNsYXNzIENhbGxMaW5rU3RhdHVzIHsKIHB1YmxpYzoKQEAg
LTc1LDYgKzc3LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMg
Y29tcHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAKKyAg
ICAvLyBDb21wdXRlcyB0aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2ZXIgdG9vayBzbG93
IHBhdGggYW5kIG5ldmVyIHByZXZpb3VzbHkKKyAgICAvLyBleGl0ZWQuCisgICAgc3RhdGljIENh
bGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxM
aW5rSW5mbyYpOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBDYWxsTGlu
a1N0YXR1cywgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gQ29udGV4dE1hcDsKKyAgICAKKyAg
ICAvLyBDb21wdXRlcyBhbGwgb2YgdGhlIHN0YXR1c2VzIG9mIHRoZSBERkcgY29kZSBibG9jay4g
RG9lc24ndCBpbmNsdWRlIHN0YXR1c2VzIHRoYXQgaGFkCisgICAgLy8gbm8gaW5mb3JtYXRpb24u
IEN1cnJlbnRseSB3ZSB1c2UgdGhpcyB3aGVuIGNvbXBpbGluZyBGVEwgY29kZSwgdG8gZW5hYmxl
IHBvbHl2YXJpYW50CisgICAgLy8gaW5saW5pbmcuCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZURG
R1N0YXR1c2VzKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb250ZXh0TWFwJik7CisgICAgCisg
ICAgLy8gSGVscGVyIHRoYXQgZmlyc3QgY29uc3VsdHMgdGhlIENvbnRleHRNYXAgYW5kIHRoZW4g
ZG9lcyBjb21wdXRlRm9yKCkuCisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3Io
Q29kZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ29udGV4dE1hcCYpOworICAgIAogICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQgfHwgbV9leGVjdXRhYmxlIHx8
IG1fY291bGRUYWtlU2xvd1BhdGg7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
IHsgcmV0dXJuICFpc1NldCgpOyB9CkBAIC05NCw2ICsxMTAsMTMgQEAgcHVibGljOgogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIG1h
a2VDbG9zdXJlQ2FsbCgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faXNQcm92ZWQpOworICAg
ICAgICAvLyBUdXJuIHRoaXMgaW50byBhIGNsb3N1cmUgY2FsbC4KKyAgICAgICAgbV9jYWxsVGFy
Z2V0ID0gSlNWYWx1ZSgpOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMg
Y29tcHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwg
dW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgSlNWYWx1ZSBtX2NhbGxUYXJnZXQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxNjI0MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5MCw4ICs0OTAsOCBAQCBwdWJsaWM6CiAgICAgUmFyZUNh
c2VQcm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5
dGVjb2RlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJl
Q2FzZVByb2ZpbGUsIGludD4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RD
YXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcywgbV9zcGVj
aWFsRmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAg
Z2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KIAogICAgIGJvb2wgbGlr
ZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE2
MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNjQgQEAgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5s
aW5lRGVwdGgoKSBjb25zdAogewogICAgIHJldHVybiBpbmxpbmVEZXB0aEZvckNhbGxGcmFtZShp
bmxpbmVDYWxsRnJhbWUpOwogfQorCitib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVx
dWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgQ29kZU9yaWdpbiBh
ID0gKnRoaXM7CisgICAgQ29kZU9yaWdpbiBiID0gb3RoZXI7CisKKyAgICBpZiAoIWEuaXNTZXQo
KSkKKyAgICAgICAgcmV0dXJuICFiLmlzU2V0KCk7CisgICAgaWYgKCFiLmlzU2V0KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoYS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpKQorICAgICAgICByZXR1cm4gYi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIGlm
IChiLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEFTU0VSVChhLmlzU2V0KCkpOworICAgICAgICBB
U1NFUlQoYi5pc1NldCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhLmJ5dGVjb2RlSW5kZXgg
IT0gYi5ieXRlY29kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgaWYgKCghIWEuaW5saW5lQ2FsbEZyYW1lKSAhPSAoISFiLmlubGluZUNhbGxGcmFt
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWEu
aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAg
ICAgICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUgIT0gYi5pbmxpbmVDYWxsRnJh
bWUtPmV4ZWN1dGFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAg
ICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAgICAgYiA9IGIuaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQorfQorCit1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHBy
b3hpbWF0ZUhhc2goKSBjb25zdAoreworICAgIGlmICghaXNTZXQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiAx
OwogICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDI7CisgICAgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luID0gKnRoaXM7CisgICAgZm9yICg7OykgeworICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAg
ICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgIH0KK30KKwogVmVj
dG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46OmlubGluZVN0YWNrKCkgY29uc3QKIHsKICAgICBW
ZWN0b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGluZURlcHRoKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNjI0MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICAKICAgICBDb2Rl
T3JpZ2luKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICAgICAgOiBieXRlY29k
ZUluZGV4KGludmFsaWRCeXRlY29kZUluZGV4KQotICAgICAgICAsIGlubGluZUNhbGxGcmFtZShi
aXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSkp
CisgICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKGRlbGV0ZWRNYXJrZXIoKSkKICAgICB7CiAgICAg
fQogICAgIApAQCAtOTcsMTEgKzk3LDIzIEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7IH0KICAgICAKKyAgICAvLyBUaGlzIGNoZWNrcyBpZiB0aGUgdHdvIGNvZGUgb3Jp
Z2lucyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHN0YWNrIHRyYWNlIHNuaXBwZXRzLAorICAgIC8v
IGJ1dCBpZ25vcmUgd2hldGhlciB0aGUgSW5saW5lQ2FsbEZyYW1lJ3MgYXJlIGlkZW50aWNhbC4K
KyAgICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIp
IGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaCgpIGNvbnN0OworICAg
IAogICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRl
bmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0
YWNrKCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgSW5saW5lQ2FsbEZyYW1lKiBkZWxldGVkTWFya2VyKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3Rh
dGljX2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAgfQogfTsKIAogc3RydWN0IElubGluZUNhbGxG
cmFtZSB7CkBAIC0xODUsNiArMTk3LDEyIEBAIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwog
fTsKIAorc3RydWN0IENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5LmFwcHJveGltYXRl
SGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29u
c3QgQ29kZU9yaWdpbiYgYikgeyByZXR1cm4gYS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKGIpOyB9
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3Bw
CShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZH
RXhpdFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIEV4aXRQcm9m
aWxlOjp+RXhpdFByb2ZpbGUoKSB7IH0KIAogYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQogeworICAg
IEFTU0VSVChzaXRlLmppdFR5cGUoKSAhPSBFeGl0RnJvbUFueXRoaW5nKTsKKyAgICAKICAgICAv
LyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVxdWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUg
bGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQogICAgIC8vIGludG8gaXQuCiAgICAgaWYgKCFtX2ZyZXF1
ZW50RXhpdFNpdGVzKSB7CkBAIC03OCw3ICs4MCw3IEBAIGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4
aXRTaXRlKGNvbnN0IENvbmMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fZnJlcXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgaS0tOykgewotICAgICAg
ICBpZiAobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkgPT0gc2l0ZSkKKyAgICAgICAgaWYgKHNp
dGUuc3Vic3VtZXMobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lvbiAxNjI0MjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5j
bHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJFeGl0S2luZC5oIgorI2luY2x1
ZGUgIkV4aXRpbmdKSVRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksMTggKzQwLDIy
IEBAIHB1YmxpYzoKICAgICBGcmVxdWVudEV4aXRTaXRlKCkKICAgICAgICAgOiBtX2J5dGVjb2Rl
T2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQogICAgICAgICAsIG1fa2luZChFeGl0S2luZFVu
c2V0KQorICAgICAgICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRoaW5nKQogICAgIHsKICAgICB9
CiAgICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAxID0gZGVsZXRlZCB2YWx1ZQog
ICAgICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgICAgICAsIG1faml0VHlwZShFeGl0
RnJvbUFueXRoaW5nKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRnJlcXVlbnRF
eGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCkKKyAgICBleHBs
aWNpdCBGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwg
RXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcp
CiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICAgICAgLCBt
X2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICB7CiAgICAgICAg
IGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewogICAgICAgICAgICAgLy8gQ291bnQg
dGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJs
b2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKQEAgLTYxLDkgKzY2LDEwIEBAIHB1YmxpYzoKICAg
ICAKICAgICAvLyBVc2UgdGhpcyBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCBmb3IgdGhlIGV4aXQg
c2l0ZSB0byBiZSBjb3VudGVkIGdsb2JhbGx5IHdpdGhpbiBpdHMKICAgICAvLyBjb2RlIGJsb2Nr
LgotICAgIGV4cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUoRXhpdEtpbmQga2luZCkKKyAgICBleHBs
aWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGppdFR5
cGUgPSBFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKICAg
ICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICB7
CiAgICAgfQogICAgIApAQCAtNzUsMTYgKzgxLDM2IEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAg
ICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Ci0gICAg
ICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9qaXRUeXBlID09IG90aGVyLm1faml0
VHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBGcmVxdWVudEV4aXRT
aXRlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ICE9
IG90aGVyLm1fYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAobV9qaXRUeXBlID09IEV4aXRGcm9tQW55dGhpbmcpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5
cGU7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZDsKKyAgICAg
ICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZCArIG1faml0
VHlwZSAqIDc7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQogICAgIEV4aXRLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9qaXRUeXBlOyB9CisgICAgCisgICAgRnJlcXVlbnRFeGl0U2l0ZSB3aXRoSklU
VHlwZShFeGl0aW5nSklUVHlwZSBqaXRUeXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgRnJlcXVl
bnRFeGl0U2l0ZSByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1faml0VHlwZSA9IGpp
dFR5cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAgYm9vbCBpc0hhc2hU
YWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewpAQCAtOTQsNiArMTIwLDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIEV4aXRLaW5k
IG1fa2luZDsKKyAgICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiB9OwogCiBzdHJ1Y3QgRnJl
cXVlbnRFeGl0U2l0ZUhhc2ggewpAQCAtMTY2LDYgKzE5MywxMCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGhhc0V4aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiAgICAg
eworICAgICAgICBpZiAoc2l0ZS5qaXRUeXBlKCkgPT0gRXhpdEZyb21Bbnl0aGluZykgeworICAg
ICAgICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKHNpdGUud2l0aEpJVFR5cGUoRXhpdEZyb21ERkcp
KQorICAgICAgICAgICAgICAgIHx8IGhhc0V4aXRTaXRlKHNpdGUud2l0aEpJVFR5cGUoRXhpdEZy
b21GVEwpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9mcmVxdWVudEV4aXRTaXRlcy5m
aW5kKHNpdGUpICE9IG1fZnJlcXVlbnRFeGl0U2l0ZXMuZW5kKCk7CiAgICAgfQogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJldmlzaW9uIDE2
MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci1lbnVtIEV4aXRLaW5kIHsKK2VudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKICAgICBFeGl0S2lu
ZFVuc2V0LAogICAgIEJhZFR5cGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGEgdHlwZSBwcmVkaWN0
aW9uIHdhcyB3cm9uZy4KICAgICBCYWRGdW5jdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2Ug
bWFkZSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB3aGF0IGZ1bmN0aW9uIHdlIHdvdWxk
IHNlZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5n
SklUVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V4aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEV4aXRpbmdK
SVRUeXBlX2gKKyNkZWZpbmUgRXhpdGluZ0pJVFR5cGVfaAorCituYW1lc3BhY2UgSlNDIHsKKwor
ZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgeworICAgIEV4aXRGcm9tQW55dGhpbmcsCisg
ICAgRXhpdEZyb21ERkcsCisgICAgRXhpdEZyb21GVEwKK307CisKK30gLy8gbmFtZXNwYWNlIEpT
QworCisjZW5kaWYgLy8gRXhpdGluZ0pJVFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTYyNDI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMzYsNiArMTEzNiw4IEBAIHByaXZhdGU6CiAgICAgLy8gd29yay1hcm91
bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBoYW5kbGUgImVtcHR5IiB2YWx1
ZXMuCiAgICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsKICAgICAKKyAgICBDYWxsTGlu
a1N0YXR1czo6Q29udGV4dE1hcCBtX2NhbGxDb250ZXh0TWFwOworICAgIAogICAgIEluc3RydWN0
aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CiAKQEAgLTExNTYsMTAgKzExNTgsMTMgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnN0cnVjdAogICAgIAogICAgIENhbGxM
aW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwogCi0gICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChj
YWxsVGFyZ2V0KSkKLSAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxUYXJnZXQpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRleCk7Cisg
ICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkgeworICAgICAgICBjYWxsTGlu
a1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAorICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlND
b25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQodHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmln
aW4oKSwgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgfQogICAgIAogICAgIGlmICghY2FsbExpbmtT
dGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMg
Y2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZp
Y2llbnRseSBwb2x5bW9ycGhpY2FsbHkKQEAgLTM2MzIsNiArMzYzNywxMSBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgLy8gU2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAgICAgCisgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9w
bGFuLm1vZGUpICYmICEhbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2spIHsKKyAg
ICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVERkdTdGF0dXNlcygKKyAgICAgICAgICAgIG1f
Z3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrLmdldCgpLCBtX2NhbGxDb250ZXh0TWFw
KTsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fY29kZUJsb2NrLT5jYXB0dXJlQ291bnQoKSkgewog
ICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX2NvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKTsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1f
bG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuY3BwCShyZXZp
c2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDggKzU1LDggQEAgdW5z
aWduZWQgZ2V0TnVtQ29tcGlsYXRpb25zKCkKIAogI2lmIEVOQUJMRShERkdfSklUKQogc3RhdGlj
IENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsCi0gICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisg
ICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRl
Y29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKICAg
ICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2spCiB7CiAg
ICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBDb21waWxhdGlvbiAoRHJpdmVy
KSIpOwpAQCAtNjYsNiArNjYsNyBAQCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUlt
cGwoCiAgICAgQVNTRVJUKGNvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKSk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgp
ID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoIXByb2ZpbGVkREZHQ29kZUJs
b2NrIHx8IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklU
KTsKICAgICAKICAgICBpZiAoIU9wdGlvbnM6OnVzZURGR0pJVCgpIHx8ICFNYWNyb0Fzc2VtYmxl
cjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkZh
aWxlZDsKQEAgLTk1LDcgKzk2LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogICAgIH0KICAgICAKICAgICBSZWZQdHI8UGxhbj4gcGxhbiA9IGFkb3B0UmVmKAotICAg
ICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVz
dEhhbmRsZVZhbHVlcykpOworICAgICAgICBuZXcgUGxhbihjb2RlQmxvY2ssIHByb2ZpbGVkREZH
Q29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMp
KTsKICAgICAKICAgICBib29sIGVuYWJsZUNvbmN1cnJlbnRKSVQ7CiAjaWYgRU5BQkxFKENPTkNV
UlJFTlRfSklUKQpAQCAtMTE3LDcgKzExOCw3IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBj
b21waWxlSW1wbCgKIH0KICNlbHNlIC8vIEVOQUJMRShERkdfSklUKQogc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAotICAgIFZNJiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25N
b2RlLCB1bnNpZ25lZCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mLAorICAgIFZNJiwgQ29kZUJs
b2NrKiwgQ29kZUJsb2NrKiwgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCwgY29uc3QgT3BlcmFu
ZHM8SlNWYWx1ZT4mLAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PikKIHsKICAgICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC0xMjUsMTMgKzEyNiwxNCBA
QCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiAKIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAgVk0mIHZtLCBDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5
Qnl0ZWNvZGVJbmRleCwKLSAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZh
bHVlcywKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2Zp
bGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKKyAgICB1bnNpZ25lZCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFs
dWVzLAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBwYXNzZWRD
YWxsYmFjaykKIHsKICAgICBSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjYWxs
YmFjayA9IHBhc3NlZENhbGxiYWNrOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IGNv
bXBpbGVJbXBsKAotICAgICAgICB2bSwgY29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMsIGNhbGxiYWNrKTsKKyAgICAgICAgdm0sIGNvZGVCbG9j
aywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVz
dEhhbmRsZVZhbHVlcywKKyAgICAgICAgY2FsbGJhY2spOwogICAgIGlmIChyZXN1bHQgIT0gQ29t
cGlsYXRpb25EZWZlcnJlZCkKICAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ1LDggKzQ1LDkgQEAgSlNfRVhQT1JUX1BSSVZBVEUgdW5zaWduZWQgZ2V0TnVtQ29tcGlsYQog
Ly8gSWYgdGhlIHdvcmtsaXN0IGlzIG5vbi1udWxsLCB3ZSBkbyBhIGNvbmN1cnJlbnQgY29tcGls
ZS4gT3RoZXJ3aXNlIHdlIGRvIGEgc3luY2hyb25vdXMKIC8vIGNvbXBpbGUuIEV2ZW4gaWYgd2Ug
ZG8gYSBzeW5jaHJvbm91cyBjb21waWxlLCB3ZSBjYWxsIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBy
ZXN1bHQuCiBDb21waWxhdGlvblJlc3VsdCBjb21waWxlKAotICAgIFZNJiwgQ29kZUJsb2NrKiwg
Q29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsIFBhc3NSZWZQdHI8RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUsCisgICAgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZh
bHVlcywKKyAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pOwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZS5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTE5LDYgKzExOSw3IEBAIHB1YmxpYzoK
ICAgICBWZWN0b3I8REZHOjpPU1JFbnRyeURhdGE+IG9zckVudHJ5OwogICAgIFNlZ21lbnRlZFZl
Y3RvcjxERkc6Ok9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgVmVjdG9yPERGRzo6U3BlY3VsYXRp
b25SZWNvdmVyeT4gc3BlY3VsYXRpb25SZWNvdmVyeTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IHNs
b3dQYXRoQ2FsbHM7CiAgICAgREZHOjpWYXJpYWJsZUV2ZW50U3RyZWFtIHZhcmlhYmxlRXZlbnRT
dHJlYW07CiAgICAgREZHOjpNaW5pZmllZEdyYXBoIG1pbmlmaWVkREZHOwogI2lmIEVOQUJMRShG
VExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDcgQEAgdm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBpbmZvLnBhdGNoLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNvZGVQdHIoY2FsbFJldHVybkxv
Y2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdlbmVyYXRv
ci0+bGFiZWwoKSkpOwogICAgIH0KICAgICAKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9ncmFwaC5t
X3BsYW4ud2lsbFRyeVRvVGllclVwIHx8IG1faml0Q29kZS0+c2xvd1BhdGhDYWxscy5zaXplKCkg
PT0gbV9qc0NhbGxzLnNpemUoKSk7CiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2FsbExp
bmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw2ICsy
MjEsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgbV9pbnMuYXBwZW5kKHJlY29yZCk7CiAg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGN1cnJlbnRKU0NhbGxJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9qc0NhbGxzLnNpemUoKTsKKyAgICB9CiAKICAgICB2b2lkIGFk
ZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBDYWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0
VG9DaGVjaywgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZSwg
Q29kZU9yaWdpbiBjb2RlT3JpZ2luKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxMSBAQCBz
dHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgdW5zaWduZWQgbV9zdHJl
YW1JbmRleDsKICAgICAKICAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVl
UmVjb3ZlcnlPdmVycmlkZTsKKyAgICAKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICBy
ZXR1cm4gT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKHByb2Zp
bGVkQ29kZUJsb2NrLCBFeGl0RnJvbURGRyk7CisgICAgfQogfTsKIAogc3RydWN0IFNwZWN1bGF0
aW9uRmFpbHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMTYyNDIyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1ib29sIE9TUkV4aXRC
YXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBwcm9m
aWxlZENvZGVCbG9jaykKK2Jvb2wgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlw
ZSBqaXRUeXBlKQogewogICAgIENvZGVCbG9jayogc291cmNlUHJvZmlsZWRDb2RlQmxvY2sgPQog
ICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKApA
QCAtNDMsNyArNDMsNyBAQCBib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVl
CiAgICAgaWYgKCFzb3VyY2VQcm9maWxlZENvZGVCbG9jaykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIHJldHVybiBzb3VyY2VQcm9maWxlZENvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0U2l0
ZSgKLSAgICAgICAgICAgIEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2Zp
bGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7CisgICAgICAgIEZyZXF1ZW50RXhpdFNpdGUobV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kLCBqaXRUeXBlKSk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
MTUgKzU4LDE2IEBAIHN0cnVjdCBPU1JFeGl0QmFzZSB7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVP
cmlnaW47CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKIAotICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxl
ZENvZGVCbG9jaykKK3Byb3RlY3RlZDoKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGpp
dFR5cGUpCiAgICAgewogICAgICAgICBpZiAoIW1fY291bnQpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3cocHJvZmlsZWRDb2RlQmxvY2spOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrLCBqaXRUeXBlKTsKICAgICB9CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3co
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGlu
Z0pJVFR5cGUgaml0VHlwZSk7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExNjcsOCArMTE2Nyw4IEBAIHZvaWQgSklUX09QRVJBVElPTiB0
cmlnZ2VyVGllclVwTm93KEV4ZWMKIAogICAgIC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29k
ZS4KICAgICBjb21waWxlKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KS5nZXQoKSwgRlRMTW9kZSwgVUlOVF9NQVgsIE9wZXJhbmRzPEpTVmFsdWU+KCksCi0gICAgICAg
IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7Cisg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxvY2ss
IEZUTE1vZGUsIFVJTlRfTUFYLAorICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPigpLCBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOwogfQogCiBjaGFy
KiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKQEAgLTEyNTMsNyArMTI1Myw3IEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIGppdENvZGUtPnJl
Y29uc3RydWN0KAogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNvZGVJ
bmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICBDb21waWxhdGlvblJl
c3VsdCBmb3JFbnRyeVJlc3VsdCA9IGNvbXBpbGUoCi0gICAgICAgICp2bSwgY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgs
CisgICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxv
Y2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRs
ZVZhbHVlcywgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3Jl
YXRlKGNvZGVCbG9jaykpOwogICAgIAogICAgIC8vIEJ1dCB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dl
ciBhIHJlcGxhY2VtZW50IGNvbXBpbGUuIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgd2FudCB0bwpAQCAt
MTI3MCw4ICsxMjcwLDggQEAgY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3co
CiAgICAgICAgICYmICghd29ya2xpc3QKICAgICAgICAgICAgIHx8IHdvcmtsaXN0LT5jb21waWxh
dGlvblN0YXRlKGtleUZvclJlcGxhY2VtZW50KSA9PSBXb3JrbGlzdDo6Tm90S25vd24pKSB7CiAg
ICAgICAgIGNvbXBpbGUoCi0gICAgICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKS5nZXQoKSwgRlRMTW9kZSwgVUlOVF9NQVgsIE9wZXJhbmRzPEpTVmFsdWU+KCksCi0gICAg
ICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9j
aykpOworICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCks
IGNvZGVCbG9jaywgRlRMTW9kZSwgVUlOVF9NQVgsCisgICAgICAgICAgICBPcGVyYW5kczxKU1Zh
bHVlPigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9j
aykpOwogICAgIH0KICAgICAKICAgICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25T
dWNjZXNzZnVsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZp
c2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDcsMTAgKzEwNywxMiBAQCBzdGF0aWMgUHJvZmlsZXI6OkNvbXBp
bGF0aW9uS2luZCBwcm9maWxlCiB9CiAKIFBsYW46OlBsYW4oCi0gICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsCi0gICAgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhh
bmRsZVZhbHVlcykKKyAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2NrLCBD
b2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgY29uc3QgT3BlcmFuZHM8SlNW
YWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgp
KQogICAgICwgY29kZUJsb2NrKHBhc3NlZENvZGVCbG9jaykKKyAgICAsIHByb2ZpbGVkREZHQ29k
ZUJsb2NrKHByb2ZpbGVkREZHQ29kZUJsb2NrKQogICAgICwgbW9kZShtb2RlKQogICAgICwgb3Ny
RW50cnlCeXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG11c3RIYW5k
bGVWYWx1ZXMobXVzdEhhbmRsZVZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5oCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsNyArNTUsOCBAQCBjbGFzcyBMb25nTGl2ZWRTdGF0
ZTsKIAogc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewog
ICAgIFBsYW4oCi0gICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiwgQ29tcGlsYXRpb25Nb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCisgICAgICAgIFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2tUb0NvbXBpbGUsIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxv
Y2ssCisgICAgICAgIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUlu
ZGV4LAogICAgICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7
CiAgICAgflBsYW4oKTsKICAgICAKQEAgLTcwLDYgKzcxLDcgQEAgc3RydWN0IFBsYW4gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZQogICAgIAogICAgIFZNJiB2bTsKICAgICBSZWZQdHI8Q29k
ZUJsb2NrPiBjb2RlQmxvY2s7CisgICAgUmVmUHRyPENvZGVCbG9jaz4gcHJvZmlsZWRERkdDb2Rl
QmxvY2s7CiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7CiAgICAgY29uc3QgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4OwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1
ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTY5Niw2ICs2OTYsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKICAgICAKKyAgICBp
ZiAobV9qaXQuZ3JhcGgoKS5tX3BsYW4ud2lsbFRyeVRvVGllclVwKSB7CisgICAgICAgIG1faml0
LmFkZDMyKAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpLAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcygKKyAgICAgICAgICAgICAgICBtX2ppdC5qaXRDb2Rl
KCktPnNsb3dQYXRoQ2FsbHMuYmVnaW4oKSArIG1faml0LmN1cnJlbnRKU0NhbGxJbmRleCgpKSk7
CisgICAgfQorICAgIAogICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpyZWdUMCk7
IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNs
b3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU3OSwxMCArMTU3OSw0MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FyZ3VtZW50VHlwZXMoCiAgICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwog
fQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpwcmVwYXJlSklUQ29kZUZvclRpZXJVcCgpCit7Cisg
ICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxscyA9IDA7CisgICAgCisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBtX2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9qaXQuZ3JhcGgoKS5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAg
ICAgICAgICBjYXNlIENhbGw6CisgICAgICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAg
ICAgICAgICBudW1iZXJPZkNhbGxzKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1faml0LmppdENvZGUo
KS0+c2xvd1BhdGhDYWxscy5maWxsKDAsIG51bWJlck9mQ2FsbHMpOworfQorCiBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKCkKIHsKICAgICBjaGVja0FyZ3VtZW50VHlwZXMoKTsKLQorICAg
IAorICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXApCisgICAgICAg
IHByZXBhcmVKSVRDb2RlRm9yVGllclVwKCk7CisgICAgCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRO
b2RlKTsKICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2ppdC5ncmFwaCgpLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgbV9qaXQu
c2V0Rm9yQmxvY2tJbmRleChibG9ja0luZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTE5LDYgKzExOSw5IEBAIHB1YmxpYzoKICAgICB+U3BlY3VsYXRpdmVKSVQoKTsKIAogICAg
IGJvb2wgY29tcGlsZSgpOworICAgIAorICAgIHZvaWQgcHJlcGFyZUpJVENvZGVGb3JUaWVyVXAo
KTsKKyAgICAKICAgICB2b2lkIGNyZWF0ZU9TUkVudHJpZXMoKTsKICAgICB2b2lkIGxpbmtPU1JF
bnRyaWVzKExpbmtCdWZmZXImKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjYsNiArMTY2LDExIEBAIHN0cnVjdCBP
U1JFeGl0IDogcHVibGljIERGRzo6T1NSRXhpdEJhc2UKICAgICB1aW50MzJfdCBtX3N0YWNrbWFw
SUQ7CiAgICAgCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICBib29sIGNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAg
eworICAgICAgICByZXR1cm4gT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0RnJvbUZUTCk7CisgICAgfQogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2Rl
LmgJKHJldmlzaW9uIDE2MjQyMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1NCwxNCBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgQ29kZVJlZjsKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBDb2RlUHRyOwogCi0gICAgZW51bSBKSVRUeXBlIHsgTm9uZSwgSG9zdENhbGxU
aHVuaywgSW50ZXJwcmV0ZXJUaHVuaywgQmFzZWxpbmVKSVQsIERGR0pJVCwgRlRMSklUIH07Cisg
ICAgZW51bSBKSVRUeXBlIDogdWludDhfdCB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEhvc3RD
YWxsVGh1bmssCisgICAgICAgIEludGVycHJldGVyVGh1bmssCisgICAgICAgIEJhc2VsaW5lSklU
LAorICAgICAgICBERkdKSVQsCisgICAgICAgIEZUTEpJVAorICAgIH07CiAgICAgCiAgICAgc3Rh
dGljIEpJVFR5cGUgYm90dG9tVGllckpJVCgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjI0MjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTg2LDcgKzExODYsNyBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVy
YXRpCiAgICAgICAgIH0KIAogICAgICAgICBDb21waWxhdGlvblJlc3VsdCByZXN1bHQgPSBERkc6
OmNvbXBpbGUoCi0gICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdl
dCgpLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCAwLCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5k
ZXgsCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHJlc3VsdCAh
PSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFudC1jYWxsLWlubGluaW5nLWV4YW1wbGUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW1wbGUtcG9s
eXZhcmlhbnQtY2FsbC1pbmxpbmluZy1leGFtcGxlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW1wbGUtcG9seXZhcmlhbnQtY2FsbC1pbmxp
bmluZy1leGFtcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzIgQEAKK2Z1bmN0aW9u
IGZvbyhiYXopIHsKKyAgICByZXR1cm4gYmFyKGJheik7Cit9CisKK2Z1bmN0aW9uIGZ1enooYmF6
KSB7CisgICAgcmV0dXJuIGJhcihiYXopOworfQorCitmdW5jdGlvbiBiYXIoYmF6KSB7CisgICAg
cmV0dXJuIGJheigpOworfQorCitmdW5jdGlvbiBiYXoxKCkgeworICAgIHJldHVybiA0MjsKK30K
KworZnVuY3Rpb24gYmF6MigpIHsKKyAgICByZXR1cm4gMjQ7Cit9CisKK25vSW5saW5lKGZvbyk7
Citub0lubGluZShmdXp6KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28oYmF6MSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIHZhciByZXN1bHQg
PSBmdXp6KGJhejIpOworICAgIGlmIChyZXN1bHQgIT0gMjQpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221953</attachid>
            <date>2014-01-23 00:01:19 -0800</date>
            <delta_ts>2014-01-24 19:54:17 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51753</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNTk5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAxNC0wMS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seXZhcmlhbnQgQ2FsbC9Db25zdHJ1Y3QgaW5saW5pbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzMzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW1hZ2lu
ZSB0aGF0IHlvdSBoYXZlIGEgY2FsbCBzdGFjayBsaWtlIGZvbyBjYWxscyBiYXIsIHdoaWNoIGNh
bGxzIGJhei4gTGV0cyBzYXkgdGhhdAorICAgICAgICB0aGVyZSdzIGFub3RoZXIgY2FsbCBzdGFj
ayB3aGVyZSBiYXIgY2FsbHMgc29tZXRoaW5nIG90aGVyIHRoYW4gYmF6IGF0IHRoZSBzYW1lCisg
ICAgICAgIGNhbGxzaXRlLCBidXQgd2hlbnZlciBiYXIgaXMgY2FsbGVkIGZyb20gZm9vLCBpdCBh
bHdheXMgY2FsbHMgYmF6LgorICAgICAgICAKKyAgICAgICAgVGhpcyBiYXItPmJheiBjYWxsc2l0
ZSBjYW4gYmUgc2FpZCB0byBiZSBwb2x5bW9ycGhpYywgYmVjYXVzZSBpdCBtYXkgY2FsbCB0aGlu
Z3Mgb3RoZXIKKyAgICAgICAgdGhhbiBiYXogaW4gc29tZSBjYXNlcy4KKyAgICAgICAgCisgICAg
ICAgIEJ1dCBpZiB3ZSBjb25kdWN0IGEgcG9seXZhcmlhbnQgYW5hbHlzaXMgLSB0aGF0IGlzLCBv
bmUgdGhhdCBhY2NvdW50cyBmb3IgdGhlIGNhbGwKKyAgICAgICAgc3RhY2sgd2hlbiByZXBvcnRp
bmcgcmVzdWx0cyAtIHRoZW4gdGhpcyBjYWxsIGFwcGVhcnMgbW9ub21vcnBoaWMgd2hlbmV2ZXIg
YmFyIGdldHMKKyAgICAgICAgY2FsbGVkIGZyb20gZm9vLiBBIHBvbHl2YXJpYW50IGFuYWx5c2lz
IG9mIGNhbGxzaXRlcyB3aWxsIHJlcG9ydCByZXN1bHRzIG9mIHRoZSBmb3JtCisgICAgICAgICJ3
aGVuIHN0YXRlbWVudCBTIHJhbiBvbiBhIGNhbGwgc3RhY2sgdGhhdCBpbmNsdWRlZCBmdW5jdGlv
bnMgZiwgZywgZXRjIHRoZW4gdGhlIHNldAorICAgICAgICBvZiBwb3NzaWJsZSBjYWxsZWVzIGlz
IGJvdW5kZWQgYnkgLi4uIi4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBhIG1vbm92YXJpYW50IGFu
YWx5c2lzCisgICAgICAgIHRoYXQgd2lsbCBhdHRlbXB0IHRvIGNvbnN0cnVjdCBhIGJvdW5kaW5n
IHNldCBvZiBjYWxsZWVzIHdpdGhvdXQgYWRkaW5nIHRoZSBjYWxsIHN0YWNrCisgICAgICAgIGFz
IGEgY29udGluZ2VuY3kuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBh
bGwgaW5saW5pbmcgZGVjaXNpb25zIHdlcmUgbWFkZSBiYXNlZCBvbiBhIG1vbm92YXJpYW50IGR5
bmFtaWMKKyAgICAgICAgYW5hbHlzaXMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFs
bG93cyB0aGUgRlRMIHRvIG1ha2UgaXRzIENhbGwvQ29uc3RydWN0IGlubGluaW5nIGRlY2lzaW9u
cyBiYXNlZCBvbiBhCisgICAgICAgIHBvbHl2YXJpYW50IGFuYWx5c2lzLiBUaGF0IGFuYWx5c2lz
IGlzIGNsZXZlcmx5IHNpbXBsZTogd2UganVzdCBhc2sgdGhlIERGRyB0byBkbyB0aGUKKyAgICAg
ICAgc2FtZSAiYW5hbHlzaXMiIHRoYXQgdGhlIExMSW50IGFuZCBCYXNlbGluZSBKSVQgcGVyZm9y
bS4gVGhhdCAiYW5hbHlzaXMiIGlzIGp1c3QgYW4KKyAgICAgICAgaW5saW5lIGNhY2hlIHBsdXMg
YSBzbG93LXBhdGggY291bnQuIEJ1dCB0aGUgREZHIGhhcyBwZXJmb3JtZWQgaW5saW5pbmcuIEhl
bmNlIGVhY2gKKyAgICAgICAgY2FsbHNpdGUgdGhhdCB0aGUgREZHIHJlcG9ydHMgaW5mb3JtYXRp
b24gZm9yIGlzIGFjdHVhbGx5IHNpdHRpbmcgb24gYSBzdGF0aWMgY2FsbAorICAgICAgICBzdGFj
ay4gV2hlbiB0aGUgREZHIHJlcG9ydHMgdGhlIHN0YXR1cyBvZiBpdHMgY2FsbCBpbmxpbmUgY2Fj
aGVzLCBpdCBjYW4gcmVwb3J0IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIGEgKHNob3J0
KSBzbmlwcGV0IG9mIGNhbGwgc3RhY2sgYXMgYSBraW5kIG9mIGNvbnRpbmdlbmN5LCBtdWNoIGxp
a2UgYQorICAgICAgICBwb2x5dmFyaWFudCBhbmFseXNpcyB3b3VsZC4KKyAgICAgICAgCisgICAg
ICAgIENvbnNpZGVyIHRoZSBmb28tPmJhci0+YmF6IGV4YW1wbGUuIExldHMgc2F5IHRoYXQgZm9v
J3MgY2FsbCB0byBiYXIgaXMgdHJpdmlhbGx5CisgICAgICAgIG1vbm9tb3JwaGljLCBhbmQgdGhl
IERGRyBpbmxpbmVzIGl0LiBUaGUgREZHIHdvbid0IGJlIGFibGUgdG8gdGhlbiBpbmxpbmUgdGhl
IGNhbGwKKyAgICAgICAgZnJvbSBmb28tPmJhciB0byBiYXogYmVjYXVzZSB3aGVuIHdlIGFzayB0
aGUgQmFzZWxpbmUgSklUIHByb2ZpbGluZyB3aGF0IHRoZSBzdGF0dXMgb2YKKyAgICAgICAgdGhl
IGJhci0+YmF6IGNhbGwgaXMsIHRoZSBwcm9maWxpbmcgd2lsbCBzYXkgInBvbHltb3JwaGljIi4g
VGhhdCdzIGJlY2F1c2UgdGhhdAorICAgICAgICBwcm9maWxpbmcgZG9lc24ndCBoYXZlIGFueSBj
b250ZXh0IHNlbnNpdGl2aXR5LCBhbmQgc28gaXQgZG9lc24ndCBrbm93IHRoYXQgdGhlIGNhbGwK
KyAgICAgICAgd291bGQgYmUgbW9ub21vcnBoaWMgaWYgZm9vIHdhcyBiYXIncyBjYWxsZXIuCisg
ICAgICAgIAorICAgICAgICBCdXQsIHdpdGggdGhpcyBwYXRjaCwgb25jZSB3ZSB0aWVyLXVwIGZy
b20gdGhlIERGRyB0byB0aGUgRlRMLCB0aGUgRlRMIHdpbGwgYmUgYWJsZSB0bworICAgICAgICBh
c2sgdGhlIERGRzogImhleSwgd2hhdCBkbyB5b3Uga25vdyBhYm91dCB0aGUgY2FsbHNpdGUgdG8g
YmF6IGluIGZvby0+YmFyPyIgVGhlIERGRworICAgICAgICBoYWQsIGFzIHdlIHNhaWQgYWJvdmUs
IGlubGluZWQgYmFyIGludG8gZm9vIGFuZCBzbyBpdCBzZWVzIHRoYXQgY2FsbHNpdGUgaW4gaXRz
CisgICAgICAgIHByb3BlciBjb250ZXh0LiBUaGF0IGNhbGwgaW5saW5lIGNhY2hlIHdvdWxkIGJl
IG1vbm9tb3JwaGljLiBUaGUgRlRMIHdvdWxkIHRoZW4gYmUKKyAgICAgICAgYWJsZSB0byBpbmxp
bmUgYmF6IGludG8gZm9vLT5iYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHdpbGwgZXZlbnR1
YWxseSBiZW5lZml0IFY4djcvcmF5dHJhY2UsIGJ1dCB3ZSBzdGlsbCBoYXZlIHNvbWUgbW9yZSB0
aGluZ3MgdG8gZG8KKyAgICAgICAgYmVmb3JlIHdlIGNhbiBjbG9zZSB0aGUgbG9vcCBvbiB0aGlz
LiBSaWdodCBub3csIHRoZSBjYWxsc2l0ZSBpbiBxdWVzdGlvbiBpcyBub3QgYW4KKyAgICAgICAg
aW5saW5pbmcgY2FuZGlkYXRlIGJlY2F1c2UgaXQncyBvcF9jYWxsX3ZhcmFyZ3MuIFdlJ2xsIGZp
eCB0aGF0IGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoK
KyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlND
OjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKToKKyAgICAgICAgKiBieXRlY29k
ZS9DYWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNs
b3N1cmVDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6
YXBwcm94aW1hdGVIYXNoKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OkNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDb2RlT3Jp
Z2luOjpkZWxldGVkTWFya2VyKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkFwcHJveGltYXRl
SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g6OmVx
dWFsKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6RXhpdFByb2ZpbGU6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2Zp
bGU6Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oOgor
ICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OnN1YnN1bWVzKToKKyAgICAgICAgKEpTQzo6
REZHOjpGcmVxdWVudEV4aXRTaXRlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVu
dEV4aXRTaXRlOjpqaXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRl
Ojp3aXRoSklUVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6
Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAq
IGJ5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpleGl0aW5n
SklUVHlwZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNv
bmluZ1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlZENvZGVCbG9ja0pldHRp
c29uaW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAg
ICAqIGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToK
KyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6
CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGls
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6
Y3VycmVudEpTQ2FsbEluZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAg
ICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToK
KyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNl
Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR09w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpQbGFuOjpQbGFuKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OnByZXBhcmVKSVRDb2RlRm9yVGllclVwKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoK
KyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZSk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0
aW9ucy5jcHA6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFudC1jYWxs
LWlubGluaW5nLWV4YW1wbGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGZ1
enopOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJhejEpOgorICAgICAgICAoYmF6Mik6CisK
IDIwMTQtMDEtMjIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBV
bnJldmlld2VkLCBmaXggc3R5bGUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw2ICsyMTAs
NyBAQAogCQkwRjM4QjAxOTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE1
MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovOyB9OwogCQkwRjM4
QjAxQTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0
RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQUM3NTIxODNFQTEwNDAwMzIwMjlGIC8qIFN0YWNrQWxp
Z25tZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjNBQzc1MTE4M0VBMTA0MDAzMjAyOUYgLyogU3RhY2tBbGlnbm1lbnQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjNBQzc1NDE4OEU1RUM4MDAz
MjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0FDNzUzMTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlw
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
M0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0ExNzE1M0U2
OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovOyB9OwogCQkwRjNC
M0ExQjE1M0U2OEY0MDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE4MTUzRTY4RUYw
MDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAv
KiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcCAqLzsgfTsKQEAgLTE1NDcsNiArMTU0OCw3IEBACiAJCTBG
MzhCMDE1MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgcGF0
aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjM4QjAxNjE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRpb25Nb2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbXBpbGF0aW9uTW9kZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjNBQzc1MTE4M0VBMTA0MDAzMjAyOUYgLyogU3RhY2tBbGlnbm1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RhY2tBbGlnbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYzQUM3NTMxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4aXRpbmdKSVRUeXBlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0IzQTE3MTUzRTY4RUYwMDNFRDBGRiAvKiBE
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCM0Ex
ODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsgcGF0aCA9
IGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjNCM0EyNDE1NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDRkdTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQyMDcsNiArNDIwOSw3IEBACiAJCQkJ
OTY5QTA3OTIwRUQxRDNBRTAwRjFGNjgxIC8qIEV2YWxDb2RlQ2FjaGUuaCAqLywKIAkJCQkwRjU2
QTFENDE1MDAxQ0YyMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5jcHAgKi8sCiAJCQkJMEY1
NkExRDExNTAwMEYzMTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCAqLywKKwkJCQkwRjNB
Qzc1MzE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCAqLywKIAkJCQkwRkIxMDU4
MjE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwICovLAogCQkJCTBGQjEwNTgzMTY3NTQ4
MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5oICovLAogCQkJCTBGMEI4M0FBMTRCQ0Y1QjkwMDg4NUI0
RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggKi8sCkBAIC00NzQ0LDYgKzQ3NDcsNyBAQAogCQkJ
CUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNkIxQ0M0MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExSZWdpc3RlckF0
T2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDg3NEFFNDE1RUJERTRBMDAyRTM1ODcgLyog
SlNOYW1lU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI0MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU09iamVjdC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE2MjU5NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAKKyNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
TExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworCiBDYWxsTGlua1N0YXR1czo6Q2FsbExpbmtTdGF0dXMoSlNW
YWx1ZSB2YWx1ZSkKICAgICA6IG1fY2FsbFRhcmdldCh2YWx1ZSkKICAgICAsIG1fZXhlY3V0YWJs
ZSgwKQpAQCAtMTIwLDIxICsxMjQsMTA1IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm8KICAgICAgICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKICAgICBD
YWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbyA9IHByb2ZpbGVkQmxvY2stPmdldENhbGxMaW5rSW5m
byhieXRlY29kZUluZGV4KTsKKyAgICAKKyAgICBDYWxsTGlua1N0YXR1cyByZXN1bHQgPSBjb21w
dXRlRm9yKGxvY2tlciwgY2FsbExpbmtJbmZvKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2VyLCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUlu
ZGV4KTsKKyAgICAKKyAgICBpZiAocHJvZmlsZWRCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRnVuY3Rpb24pKSkKKyAgICAg
ICAgcmVzdWx0Lm1ha2VDbG9zdXJlQ2FsbCgpOworICAgIAorICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygpOworI2VuZGlmCit9CisKK0NhbGxMaW5r
U3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKGNvbnN0IENvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbykKK3sKICAgICBpZiAoY2FsbExpbmtJbmZv
LnN0dWIpCiAgICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyhjYWxsTGlua0luZm8uc3R1Yi0+
ZXhlY3V0YWJsZSgpLCBjYWxsTGlua0luZm8uc3R1Yi0+c3RydWN0dXJlKCkpOwogICAgIAogICAg
IEpTRnVuY3Rpb24qIHRhcmdldCA9IGNhbGxMaW5rSW5mby5sYXN0U2VlbkNhbGxlZS5nZXQoKTsK
ICAgICBpZiAoIXRhcmdldCkKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVGcm9tTExJbnQobG9ja2Vy
LCBwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgcmV0dXJuIENhbGxMaW5r
U3RhdHVzKCk7CiAgICAgCi0gICAgaWYgKGNhbGxMaW5rSW5mby5oYXNTZWVuQ2xvc3VyZQotICAg
ICAgICB8fCBwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRF
eGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbikpKQorICAgIGlmIChjYWxsTGlua0lu
Zm8uaGFzU2VlbkNsb3N1cmUpCiAgICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1cyh0YXJnZXQt
PmV4ZWN1dGFibGUoKSwgdGFyZ2V0LT5zdHJ1Y3R1cmUoKSk7CiAKICAgICByZXR1cm4gQ2FsbExp
bmtTdGF0dXModGFyZ2V0KTsKLSNlbHNlCi0gICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7Ci0j
ZW5kaWYKK30KKwordm9pZCBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKAorICAg
IENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCYgbWFw
KQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvZGVCbG9j
ay0+aml0VHlwZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CisgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9jayA9IGRmZ0NvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKTsKKyAgICBERkc6OkpJVENv
ZGUqIGppdENvZGUgPSBkZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgUkVMRUFT
RV9BU1NFUlQoZGZnQ29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKSA8PSBqaXRDb2Rl
LT5zbG93UGF0aENhbGxzLnNpemUoKSk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IGRmZ0Nv
ZGVCbG9jay0+bnVtYmVyT2ZDYWxsTGlua0luZm9zKCk7IGktLTspIHsKKyAgICAgICAgQ2FsbExp
bmtJbmZvJiBpbmZvID0gZGZnQ29kZUJsb2NrLT5jYWxsTGlua0luZm8oaSk7CisgICAgICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiA9IGluZm8uY29kZU9yaWdpbjsKKyAgICAgICAgCisgICAgICAg
IGJvb2wgdGFrZVNsb3dQYXRoOworICAgICAgICBib29sIGJhZEZ1bmN0aW9uOworICAgICAgICAK
KyAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGFkIGFscmVhZHkgcHJldmlvdXNseSBtYWRlIGEgdGVy
cmlibGUgbWlzdGFrZSBpbiB0aGUgRlRMIGZvciB0aGlzCisgICAgICAgIC8vIGNvZGUgb3JpZ2lu
LiBOb3RlIHRoYXQgdGhpcyBpcyBhcHByb3hpbWF0ZSBiZWNhdXNlIHdlIGNvdWxkIGhhdmUgYSBt
b25vdmFyaWFudAorICAgICAgICAvLyBpbmxpbmUgaW4gdGhlIEZUTCB0aGF0IGVuZGVkIHVwIGZh
aWxpbmcuIFdlIHNob3VsZCBmaXggdGhhdCBhdCBzb21lIHBvaW50IGJ5CisgICAgICAgIC8vIGhh
dmluZyBkYXRhIHN0cnVjdHVyZXMgdG8gdHJhY2sgdGhlIGNvbnRleHQgb2YgZnJlcXVlbnQgZXhp
dHMuIFRoaXMgaXMgY3VycmVudGx5CisgICAgICAgIC8vIGNoYWxsZW5naW5nIGJlY2F1c2UgaXQg
d291bGQgcmVxdWlyZSBjcmVhdGluZyBhIENvZGVPcmlnaW4tYmFzZWQgZGF0YWJhc2UgaW4KKyAg
ICAgICAgLy8gYmFzZWxpbmUgQ29kZUJsb2NrcywgYnV0IHRob3NlIENvZGVCbG9ja3MgZG9uJ3Qg
cmVhbGx5IGhhdmUgYSBwbGFjZSB0byBwdXQgdGhlCisgICAgICAgIC8vIElubGluZUNhbGxGcmFt
ZXMuCisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGJh
c2VsaW5lQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgQ29kZUJsb2NrKiBjdXJyZW50
QmFzZWxpbmUgPQorICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2spOworICAgICAg
ICAgICAgdGFrZVNsb3dQYXRoID0KKyAgICAgICAgICAgICAgICBjdXJyZW50QmFzZWxpbmUtPmhh
c0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNv
ZGVJbmRleCwgQmFkQ2FjaGUsIEV4aXRGcm9tRlRMKSkKKyAgICAgICAgICAgICAgICB8fCBjdXJy
ZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGVXYXRjaHBvaW50LCBFeGl0RnJvbUZUTCkp
CisgICAgICAgICAgICAgICAgfHwgY3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShsb2NrZXIs
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZEV4ZWN1
dGFibGUsIEV4aXRGcm9tRlRMKSk7CisgICAgICAgICAgICBiYWRGdW5jdGlvbiA9CisgICAgICAg
ICAgICAgICAgY3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVl
bnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZEZ1bmN0aW9uLCBFeGl0RnJv
bUZUTCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB7CisgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihkZmdDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAg
ICBpZiAodGFrZVNsb3dQYXRoIHx8IGppdENvZGUtPnNsb3dQYXRoQ2FsbHNbaV0gPj0gT3B0aW9u
czo6Y291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQoKSkKKyAgICAgICAgICAgICAgICBtYXAu
YWRkKGluZm8uY29kZU9yaWdpbiwgdGFrZXNTbG93UGF0aCgpKTsKKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIENhbGxMaW5rU3RhdHVzIHN0YXR1cyA9IGNvbXB1dGVGb3IobG9j
a2VyLCBpbmZvKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2V0KCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGJhZEZ1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzLm1ha2VDbG9zdXJlQ2FsbCgpOworICAgICAgICAgICAgICAgICAgICBtYXAuYWRkKGlu
Zm8uY29kZU9yaWdpbiwgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisgICAgCisgICAg
aWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZGF0YUxvZygiQ29udGV4dCBtYXA6XG4iKTsKKyAgICAg
ICAgQ29udGV4dE1hcDo6aXRlcmF0b3IgaXRlciA9IG1hcC5iZWdpbigpOworICAgICAgICBDb250
ZXh0TWFwOjppdGVyYXRvciBlbmQgPSBtYXAuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgaXRlci0+a2V5LCAi
OlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgICIsIGl0ZXItPnZhbHVlLCAiXG4i
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sIGNvbnN0IENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFwJiBtYXApCit7CisgICAg
Q29udGV4dE1hcDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1hcC5maW5kKGNvZGVPcmlnaW4pOwor
ICAgIGlmIChpdGVyICE9IG1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnZhbHVlOwor
ICAgIAorICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCk7CiB9CiAKIHZvaWQgQ2FsbExpbmtTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oCShyZXZpc2lvbiAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
NyBAQAogI2lmbmRlZiBDYWxsTGlua1N0YXR1c19oCiAjZGVmaW5lIENhbGxMaW5rU3RhdHVzX2gK
IAorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLmgiCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJJbnRyaW5z
aWMuaCIKQEAgLTM4LDYgKzM5LDcgQEAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiBjbGFzcyBJbnRl
cm5hbEZ1bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsKIGNsYXNzIFN0cnVjdHVyZTsKK3N0cnVj
dCBDYWxsTGlua0luZm87CiAKIGNsYXNzIENhbGxMaW5rU3RhdHVzIHsKIHB1YmxpYzoKQEAgLTc1
LDYgKzc3LDIwIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZvcihDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAKKyAgICAv
LyBDb21wdXRlcyB0aGUgc3RhdHVzIGFzc3VtaW5nIHRoYXQgd2UgbmV2ZXIgdG9vayBzbG93IHBh
dGggYW5kIG5ldmVyIHByZXZpb3VzbHkKKyAgICAvLyBleGl0ZWQuCisgICAgc3RhdGljIENhbGxM
aW5rU3RhdHVzIGNvbXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYsIENhbGxMaW5r
SW5mbyYpOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBDYWxsTGlua1N0
YXR1cywgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gQ29udGV4dE1hcDsKKyAgICAKKyAgICAv
LyBDb21wdXRlcyBhbGwgb2YgdGhlIHN0YXR1c2VzIG9mIHRoZSBERkcgY29kZSBibG9jay4gRG9l
c24ndCBpbmNsdWRlIHN0YXR1c2VzIHRoYXQgaGFkCisgICAgLy8gbm8gaW5mb3JtYXRpb24uIEN1
cnJlbnRseSB3ZSB1c2UgdGhpcyB3aGVuIGNvbXBpbGluZyBGVEwgY29kZSwgdG8gZW5hYmxlIHBv
bHl2YXJpYW50CisgICAgLy8gaW5saW5pbmcuCisgICAgc3RhdGljIHZvaWQgY29tcHV0ZURGR1N0
YXR1c2VzKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb250ZXh0TWFwJik7CisgICAgCisgICAg
Ly8gSGVscGVyIHRoYXQgZmlyc3QgY29uc3VsdHMgdGhlIENvbnRleHRNYXAgYW5kIHRoZW4gZG9l
cyBjb21wdXRlRm9yKCkuCisgICAgc3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29k
ZUJsb2NrKiwgQ29kZU9yaWdpbiwgY29uc3QgQ29udGV4dE1hcCYpOworICAgIAogICAgIGJvb2wg
aXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2NhbGxUYXJnZXQgfHwgbV9leGVjdXRhYmxlIHx8IG1f
Y291bGRUYWtlU2xvd1BhdGg7IH0KICAgICAKICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFpc1NldCgpOyB9CkBAIC05NCw2ICsxMTAsMTMgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKKyAgICB2b2lkIG1ha2VD
bG9zdXJlQ2FsbCgpCisgICAgeworICAgICAgICBBU1NFUlQoIW1faXNQcm92ZWQpOworICAgICAg
ICAvLyBUdXJuIHRoaXMgaW50byBhIGNsb3N1cmUgY2FsbC4KKyAgICAgICAgbV9jYWxsVGFyZ2V0
ID0gSlNWYWx1ZSgpOworICAgIH0KKyAgICAKICAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29t
cHV0ZUZyb21MTEludChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgSlNWYWx1ZSBtX2NhbGxUYXJnZXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5MCw4ICs0OTAsOCBAQCBwdWJsaWM6CiAgICAgUmFyZUNhc2VQ
cm9maWxlKiBzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVj
b2RlT2Zmc2V0KQogICAgIHsKICAgICAgICAgcmV0dXJuIHRyeUJpbmFyeVNlYXJjaDxSYXJlQ2Fz
ZVByb2ZpbGUsIGludD4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNl
UHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVP
ZmZzZXQpOworICAgICAgICAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcywgbV9zcGVjaWFs
RmFzdENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAgZ2V0
UmFyZUNhc2VQcm9maWxlQnl0ZWNvZGVPZmZzZXQpOwogICAgIH0KIAogICAgIGJvb2wgbGlrZWx5
VG9UYWtlU3BlY2lhbEZhc3RDYXNlKGludCBieXRlY29kZU9mZnNldCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE2MjU5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNjQgQEAgdW5zaWduZWQgQ29kZU9yaWdpbjo6aW5saW5l
RGVwdGgoKSBjb25zdAogewogICAgIHJldHVybiBpbmxpbmVEZXB0aEZvckNhbGxGcmFtZShpbmxp
bmVDYWxsRnJhbWUpOwogfQorCitib29sIENvZGVPcmlnaW46OmlzQXBwcm94aW1hdGVseUVxdWFs
VG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0Cit7CisgICAgQ29kZU9yaWdpbiBhID0g
KnRoaXM7CisgICAgQ29kZU9yaWdpbiBiID0gb3RoZXI7CisKKyAgICBpZiAoIWEuaXNTZXQoKSkK
KyAgICAgICAgcmV0dXJuICFiLmlzU2V0KCk7CisgICAgaWYgKCFiLmlzU2V0KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoYS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
KQorICAgICAgICByZXR1cm4gYi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOworICAgIGlmIChi
LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIEFTU0VSVChhLmlzU2V0KCkpOworICAgICAgICBBU1NF
UlQoYi5pc1NldCgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChhLmJ5dGVjb2RlSW5kZXggIT0g
Yi5ieXRlY29kZUluZGV4KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgaWYgKCghIWEuaW5saW5lQ2FsbEZyYW1lKSAhPSAoISFiLmlubGluZUNhbGxGcmFtZSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIWEuaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAg
ICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUgIT0gYi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAgICAgYiA9IGIuaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXI7CisgICAgfQorfQorCit1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hp
bWF0ZUhhc2goKSBjb25zdAoreworICAgIGlmICghaXNTZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgaWYgKGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkpCisgICAgICAgIHJldHVybiAxOwog
ICAgIAorICAgIHVuc2lnbmVkIHJlc3VsdCA9IDI7CisgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
ID0gKnRoaXM7CisgICAgZm9yICg7OykgeworICAgICAgICByZXN1bHQgKz0gY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4OworICAgICAgICAKKyAgICAgICAgaWYgKCFjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBy
ZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgIH0KK30KKwogVmVjdG9y
PENvZGVPcmlnaW4+IENvZGVPcmlnaW46OmlubGluZVN0YWNrKCkgY29uc3QKIHsKICAgICBWZWN0
b3I8Q29kZU9yaWdpbj4gcmVzdWx0KGlubGluZURlcHRoKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxNjI1OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2Myw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICAKICAgICBDb2RlT3Jp
Z2luKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKICAgICAgICAgOiBieXRlY29kZUlu
ZGV4KGludmFsaWRCeXRlY29kZUluZGV4KQotICAgICAgICAsIGlubGluZUNhbGxGcmFtZShiaXR3
aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSkpCisg
ICAgICAgICwgaW5saW5lQ2FsbEZyYW1lKGRlbGV0ZWRNYXJrZXIoKSkKICAgICB7CiAgICAgfQog
ICAgIApAQCAtOTcsMTEgKzk3LDIzIEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNvbnN0OwogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7IH0KICAgICAKKyAgICAvLyBUaGlzIGNoZWNrcyBpZiB0aGUgdHdvIGNvZGUgb3JpZ2lu
cyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHN0YWNrIHRyYWNlIHNuaXBwZXRzLAorICAgIC8vIGJ1
dCBpZ25vcmUgd2hldGhlciB0aGUgSW5saW5lQ2FsbEZyYW1lJ3MgYXJlIGlkZW50aWNhbC4KKyAg
ICBib29sIGlzQXBwcm94aW1hdGVseUVxdWFsVG8oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNv
bnN0OworICAgIAorICAgIHVuc2lnbmVkIGFwcHJveGltYXRlSGFzaCgpIGNvbnN0OworICAgIAog
ICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3csIGFuZCBpcyBpbnRlbmRl
ZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IGlubGluZVN0YWNr
KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAg
dm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgSW5saW5lQ2FsbEZyYW1lKiBkZWxldGVkTWFya2VyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SW5saW5lQ2FsbEZyYW1lKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigxKSk7CisgICAgfQogfTsKIAogc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CkBAIC0xODUsNiArMTk3LDEyIEBAIHN0cnVjdCBDb2RlT3JpZ2luSGFzaCB7CiAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsK
IAorc3RydWN0IENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoKGNvbnN0IENvZGVPcmlnaW4mIGtleSkgeyByZXR1cm4ga2V5LmFwcHJveGltYXRlSGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ29kZU9yaWdpbiYgYSwgY29uc3Qg
Q29kZU9yaWdpbiYgYikgeyByZXR1cm4gYS5pc0FwcHJveGltYXRlbHlFcXVhbFRvKGIpOyB9Cisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OworfTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCShy
ZXZpc2lvbiAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhp
dFByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBAIEV4aXRQcm9maWxl
Ojp+RXhpdFByb2ZpbGUoKSB7IH0KIAogYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQogeworICAgIEFT
U0VSVChzaXRlLmppdFR5cGUoKSAhPSBFeGl0RnJvbUFueXRoaW5nKTsKKyAgICAKICAgICAvLyBJ
ZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVxdWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlz
dCBhbmQgcHV0IHRoaXMgc2l0ZQogICAgIC8vIGludG8gaXQuCiAgICAgaWYgKCFtX2ZyZXF1ZW50
RXhpdFNpdGVzKSB7CkBAIC03OCw3ICs4MCw3IEBAIGJvb2wgRXhpdFByb2ZpbGU6Omhhc0V4aXRT
aXRlKGNvbnN0IENvbmMKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIGZvciAodW5z
aWduZWQgaSA9IG1fZnJlcXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgaS0tOykgewotICAgICAgICBp
ZiAobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkgPT0gc2l0ZSkKKyAgICAgICAgaWYgKHNpdGUu
c3Vic3VtZXMobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lvbiAxNjI1OTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIs
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVk
ZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJFeGl0S2luZC5oIgorI2luY2x1ZGUg
IkV4aXRpbmdKSVRUeXBlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtMzksMTggKzQwLDIyIEBA
IHB1YmxpYzoKICAgICBGcmVxdWVudEV4aXRTaXRlKCkKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zm
c2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQogICAgICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0
KQorICAgICAgICAsIG1faml0VHlwZShFeGl0RnJvbUFueXRoaW5nKQogICAgIHsKICAgICB9CiAg
ICAgCiAgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgxKSAvLyAxID0gZGVsZXRlZCB2YWx1ZQogICAg
ICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgICAgICAsIG1faml0VHlwZShFeGl0RnJv
bUFueXRoaW5nKQogICAgIHsKICAgICB9CiAgICAgCi0gICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0
U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhpdEtpbmQga2luZCkKKyAgICBleHBsaWNp
dCBGcmVxdWVudEV4aXRTaXRlKAorICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRXhp
dEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpCiAg
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKICAgICAgICAgLCBtX2tp
bmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICB7CiAgICAgICAgIGlm
IChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewogICAgICAgICAgICAgLy8gQ291bnQgdGhp
cyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJsb2Nr
IHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKQEAgLTYxLDkgKzY2LDEwIEBAIHB1YmxpYzoKICAgICAK
ICAgICAvLyBVc2UgdGhpcyBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCBmb3IgdGhlIGV4aXQgc2l0
ZSB0byBiZSBjb3VudGVkIGdsb2JhbGx5IHdpdGhpbiBpdHMKICAgICAvLyBjb2RlIGJsb2NrLgot
ICAgIGV4cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUoRXhpdEtpbmQga2luZCkKKyAgICBleHBsaWNp
dCBGcmVxdWVudEV4aXRTaXRlKEV4aXRLaW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUg
PSBFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkKICAgICAg
ICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICB7CiAg
ICAgfQogICAgIApAQCAtNzUsMTYgKzgxLDM2IEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Ci0gICAgICAg
ICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgICAgICAgICAgJiYgbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9qaXRUeXBlID09IG90aGVyLm1faml0VHlw
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzdWJzdW1lcyhjb25zdCBGcmVxdWVudEV4aXRTaXRl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2J5dGVjb2RlT2Zmc2V0ICE9IG90
aGVyLm1fYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChtX2tpbmQgIT0gb3RoZXIubV9raW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAobV9qaXRUeXBlID09IEV4aXRGcm9tQW55dGhpbmcpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1faml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGU7
CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAg
cmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZDsKKyAgICAgICAg
cmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZCArIG1faml0VHlw
ZSAqIDc7CiAgICAgfQogICAgIAogICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQogICAgIEV4aXRLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KKyAgICBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9qaXRUeXBlOyB9CisgICAgCisgICAgRnJlcXVlbnRFeGl0U2l0ZSB3aXRoSklUVHlw
ZShFeGl0aW5nSklUVHlwZSBqaXRUeXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgRnJlcXVlbnRF
eGl0U2l0ZSByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0Lm1faml0VHlwZSA9IGppdFR5
cGU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CiAgICAgewpAQCAtOTQsNiArMTIwLDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zmc2V0OwogICAgIEV4aXRLaW5kIG1f
a2luZDsKKyAgICBFeGl0aW5nSklUVHlwZSBtX2ppdFR5cGU7CiB9OwogCiBzdHJ1Y3QgRnJlcXVl
bnRFeGl0U2l0ZUhhc2ggewpAQCAtMTY2LDYgKzE5MywxMCBAQCBwdWJsaWM6CiAKICAgICBib29s
IGhhc0V4aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CiAgICAgewor
ICAgICAgICBpZiAoc2l0ZS5qaXRUeXBlKCkgPT0gRXhpdEZyb21Bbnl0aGluZykgeworICAgICAg
ICAgICAgcmV0dXJuIGhhc0V4aXRTaXRlKHNpdGUud2l0aEpJVFR5cGUoRXhpdEZyb21ERkcpKQor
ICAgICAgICAgICAgICAgIHx8IGhhc0V4aXRTaXRlKHNpdGUud2l0aEpJVFR5cGUoRXhpdEZyb21G
VEwpKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9mcmVxdWVudEV4aXRTaXRlcy5maW5k
KHNpdGUpICE9IG1fZnJlcXVlbnRFeGl0U2l0ZXMuZW5kKCk7CiAgICAgfQogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHJldmlzaW9uIDE2MjU5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0S2luZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw3ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1l
bnVtIEV4aXRLaW5kIHsKK2VudW0gRXhpdEtpbmQgOiB1aW50OF90IHsKICAgICBFeGl0S2luZFVu
c2V0LAogICAgIEJhZFR5cGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGEgdHlwZSBwcmVkaWN0aW9u
IHdhcyB3cm9uZy4KICAgICBCYWRGdW5jdGlvbiwgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgbWFk
ZSBhbiBpbmNvcnJlY3QgYXNzdW1wdGlvbiBhYm91dCB3aGF0IGZ1bmN0aW9uIHdlIHdvdWxkIHNl
ZS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FeGl0aW5nSklU
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4
aXRpbmdKSVRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEV4aXRpbmdKSVRU
eXBlX2gKKyNkZWZpbmUgRXhpdGluZ0pJVFR5cGVfaAorCisjaW5jbHVkZSAiSklUQ29kZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworZW51bSBFeGl0aW5nSklUVHlwZSA6IHVpbnQ4X3QgeworICAg
IEV4aXRGcm9tQW55dGhpbmcsCisgICAgRXhpdEZyb21ERkcsCisgICAgRXhpdEZyb21GVEwKK307
CisKK2lubGluZSBFeGl0aW5nSklUVHlwZSBleGl0aW5nSklUVHlwZUZvcihKSVRDb2RlOjpKSVRU
eXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpERkdK
SVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbURGRzsKKyAgICBjYXNlIEpJVENvZGU6OkZUTEpJ
VDoKKyAgICAgICAgcmV0dXJuIEV4aXRGcm9tRlRMOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBFeGl0RnJvbUFueXRo
aW5nOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFeGl0aW5n
SklUVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxl
ZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1Byb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtNDksNyArNDksOSBAQCB2b2lkIFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdX
YXRjaHBvCiAgICAgCiAgICAgaWYgKHNvdXJjZUJhc2VsaW5lQ29kZUJsb2NrKSB7CiAgICAgICAg
IHNvdXJjZUJhc2VsaW5lQ29kZUJsb2NrLT5hZGRGcmVxdWVudEV4aXRTaXRlKAotICAgICAgICAg
ICAgREZHOjpGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2V4
aXRLaW5kKSk7CisgICAgICAgICAgICBERkc6OkZyZXF1ZW50RXhpdFNpdGUoCisgICAgICAgICAg
ICAgICAgbV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1fZXhpdEtpbmQsCisgICAgICAgICAg
ICAgICAgZXhpdGluZ0pJVFR5cGVGb3IobV9jb2RlQmxvY2stPmppdFR5cGUoKSkpKTsKICAgICB9
CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPmpldHRpc29uKENvdW50UmVvcHRpbWl6YXRpb24pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDE2MjU5NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTM2LDYgKzExMzYsOCBAQCBwcml2
YXRlOgogICAgIC8vIHdvcmstYXJvdW5kIGZvciB0aGUgZmFjdCB0aGF0IEpTVmFsdWVNYXAgY2Fu
J3QgaGFuZGxlICJlbXB0eSIgdmFsdWVzLgogICAgIHVuc2lnbmVkIG1fZW1wdHlKU1ZhbHVlSW5k
ZXg7CiAgICAgCisgICAgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRNYXAgbV9jYWxsQ29udGV4dE1h
cDsKKyAgICAKICAgICBJbnN0cnVjdGlvbiogbV9jdXJyZW50SW5zdHJ1Y3Rpb247CiB9OwogCkBA
IC0xMTU2LDEwICsxMTU4LDEzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5z
dHJ1Y3QKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKIAotICAgIGlm
IChtX2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdldCkpCi0gICAgICAgIGNhbGxMaW5rU3RhdHVz
ID0gQ2FsbExpbmtTdGF0dXMobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSku
c2V0SXNQcm92ZWQodHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENh
bGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
aywgbV9jdXJyZW50SW5kZXgpOworICAgIGlmIChtX2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdl
dCkpIHsKKyAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cygKKyAgICAgICAg
ICAgIG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRy
dWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVGb3IoCisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCksIG1fY2FsbENvbnRleHRNYXApOworICAgIH0KICAg
ICAKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAgICAgICAgLy8g
T2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRlZCB3aXRoIGNh
bGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CkBAIC0zNjMyLDYg
KzM2MzcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIC8vIFNldCBkdXJp
bmcgY29uc3RydWN0aW9uLgogICAgIEFTU0VSVCghbV9jdXJyZW50SW5kZXgpOwogICAgIAorICAg
IGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSAmJiAhIW1fZ3JhcGgubV9wbGFuLnByb2Zp
bGVkREZHQ29kZUJsb2NrKSB7CisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3Rh
dHVzZXMoCisgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jay5n
ZXQoKSwgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgfQorICAgIAogICAgIGlmIChtX2NvZGVCbG9j
ay0+Y2FwdHVyZUNvdW50KCkpIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkocmV2aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01NSw4ICs1NSw4IEBAIHVuc2lnbmVkIGdldE51bUNvbXBpbGF0aW9ucygpCiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAg
ICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5z
aWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAotICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+
JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAorICAg
IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4m
IG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrKQogewogICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJE
RkcgQ29tcGlsYXRpb24gKERyaXZlcikiKTsKQEAgLTY2LDYgKzY2LDcgQEAgc3RhdGljIENvbXBp
bGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogICAgIEFTU0VSVChjb2RlQmxvY2spOwogICAgIEFT
U0VSVChjb2RlQmxvY2stPmFsdGVybmF0aXZlKCkpOwogICAgIEFTU0VSVChjb2RlQmxvY2stPmFs
dGVybmF0aXZlKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgQVNT
RVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayB8fCBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkRGR0pJVCk7CiAgICAgCiAgICAgaWYgKCFPcHRpb25zOjp1c2VERkdK
SVQoKSB8fCAhTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQogICAgICAg
ICByZXR1cm4gQ29tcGlsYXRpb25GYWlsZWQ7CkBAIC05NSw3ICs5Niw3IEBAIHN0YXRpYyBDb21w
aWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICB9CiAgICAgCiAgICAgUmVmUHRyPFBsYW4+
IHBsYW4gPSBhZG9wdFJlZigKLSAgICAgICAgbmV3IFBsYW4oY29kZUJsb2NrLCBtb2RlLCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpKTsKKyAgICAgICAgbmV3IFBsYW4o
Y29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUlu
ZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CiAgICAgCiAgICAgYm9vbCBlbmFibGVDb25jdXJyZW50
SklUOwogI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKQEAgLTExNyw3ICsxMTgsNyBAQCBzdGF0
aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiB9CiAjZWxzZSAvLyBFTkFCTEUoREZH
X0pJVCkKIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKLSAgICBWTSYsIENv
ZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFs
dWU+JiwKKyAgICBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwg
dW5zaWduZWQsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiwKICAgICBQYXNzUmVmUHRyPERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pCiB7CiAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVk
OwpAQCAtMTI1LDEzICsxMjYsMTQgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJ
bXBsKAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiBDb21waWxhdGlvblJlc3VsdCBjb21w
aWxlKAotICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBt
b2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCi0gICAgY29uc3QgT3BlcmFuZHM8
SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1v
ZGUsCisgICAgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LCBjb25zdCBPcGVyYW5kczxK
U1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKICAgICBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz4gcGFzc2VkQ2FsbGJhY2spCiB7CiAgICAgUmVmUHRyPERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBwYXNzZWRDYWxsYmFjazsKICAgICBDb21waWxh
dGlvblJlc3VsdCByZXN1bHQgPSBjb21waWxlSW1wbCgKLSAgICAgICAgdm0sIGNvZGVCbG9jaywg
bW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzLCBjYWxsYmFjayk7
CisgICAgICAgIHZtLCBjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBtb2RlLCBvc3JF
bnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgICAgIGNhbGxiYWNrKTsK
ICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uRGVmZXJyZWQpCiAgICAgICAgIGNhbGxiYWNr
LT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCShyZXZpc2lv
biAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC00NSw4ICs0NSw5IEBAIEpTX0VYUE9SVF9QUklWQVRFIHVu
c2lnbmVkIGdldE51bUNvbXBpbGEKIC8vIElmIHRoZSB3b3JrbGlzdCBpcyBub24tbnVsbCwgd2Ug
ZG8gYSBjb25jdXJyZW50IGNvbXBpbGUuIE90aGVyd2lzZSB3ZSBkbyBhIHN5bmNocm9ub3VzCiAv
LyBjb21waWxlLiBFdmVuIGlmIHdlIGRvIGEgc3luY2hyb25vdXMgY29tcGlsZSwgd2UgY2FsbCB0
aGUgY2FsbGJhY2sgd2l0aCB0aGUgcmVzdWx0LgogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgK
LSAgICBWTSYsIENvZGVCbG9jayosIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgb3NyRW50cnlC
eXRlY29kZUluZGV4LAotICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFs
dWVzLCBQYXNzUmVmUHRyPERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4pOworICAgIFZNJiwg
Q29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlLAorICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8
SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCisgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s+KTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTYyNTk3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEx
OSw2ICsxMTksNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBvc3JF
bnRyeTsKICAgICBTZWdtZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAg
IFZlY3RvcjxERkc6OlNwZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7Cisg
ICAgVmVjdG9yPHVuc2lnbmVkPiBzbG93UGF0aENhbGxzOwogICAgIERGRzo6VmFyaWFibGVFdmVu
dFN0cmVhbSB2YXJpYWJsZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5p
ZmllZERGRzsKICNpZiBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjI1OTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMyLDYgKzIzMiw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IK
ICAgICAgICAgaW5mby5wYXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJldHdl
ZW5Db2RlUHRyKGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5z
W2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCisgICAgUkVM
RUFTRV9BU1NFUlQoIW1fZ3JhcGgubV9wbGFuLndpbGxUcnlUb1RpZXJVcCB8fCBtX2ppdENvZGUt
PnNsb3dQYXRoQ2FsbHMuc2l6ZSgpID49IG1fanNDYWxscy5zaXplKCkpOwogICAgIG1fY29kZUJs
b2NrLT5zZXROdW1iZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTYy
NTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMjEsNiArMjIxLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1f
aW5zLmFwcGVuZChyZWNvcmQpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjdXJyZW50SlND
YWxsSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fanNDYWxscy5zaXplKCk7
CisgICAgfQogCiAgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2Fs
bCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2Fs
bFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTYyNTk3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsMTEgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2Ug
ewogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVj
b3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7CisgICAgCisgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21ERkcpOworICAgIH0K
IH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8gewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJldmlzaW9uIDE2MjU5
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCitib29sIE9TUkV4aXRCYXNlOjpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKIHsKICAgICBDb2RlQmxvY2sqIHNvdXJj
ZVByb2ZpbGVkQ29kZUJsb2NrID0KICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5B
bmRCYXNlbGluZUNvZGVCbG9jaygKQEAgLTQzLDcgKzQzLDcgQEAgYm9vbCBPU1JFeGl0QmFzZTo6
Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogICAgIGlmICghc291cmNlUHJvZmlsZWRDb2RlQmxvY2sp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gc291cmNlUHJvZmlsZWRDb2RlQmxv
Y2stPmFkZEZyZXF1ZW50RXhpdFNpdGUoCi0gICAgICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkpOworICAgICAg
ICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5k
ZXgsIG1fa2luZCwgaml0VHlwZSkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lv
biAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU4LDE1ICs1OCwxNiBAQCBzdHJ1Y3QgT1NSRXhpdEJhc2Ugewog
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGU7CiAKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvdW50
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICAgICAgcmV0
dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhwcm9maWxlZENvZGVCbG9j
aywgaml0VHlwZSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIGJvb2wgY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpOwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTY3LDggKzExNjcsOCBA
QCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5vdyhFeGVjCiAKICAgICAvLyBXZSBu
ZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGlsZSgKLSAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5k
czxKU1ZhbHVlPigpLAotICAgICAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y3JlYXRlKGNvZGVCbG9jaykpOworICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1l
bnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01BWCwKKyAgICAgICAgT3BlcmFu
ZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShj
b2RlQmxvY2spKTsKIH0KIAogY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NSRW50cnlOb3co
CkBAIC0xMjUzLDcgKzEyNTMsNyBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRy
eU5vdygKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKICAgICAgICAgZXhlYywgY29kZUJsb2Nr
LCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZhbHVl
cyk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlSZXN1bHQgPSBjb21waWxlKAotICAg
ICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgRlRMRm9yT1NSRW50
cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFj
ZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5k
ZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKICAgICAKICAgICAvLyBCdXQg
d2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgYSByZXBsYWNlbWVudCBjb21waWxlLiBPZiBjb3Vyc2Us
IHdlIGRvbid0IHdhbnQgdG8KQEAgLTEyNzAsOCArMTI3MCw4IEBAIGNoYXIqIEpJVF9PUEVSQVRJ
T04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgICAgICAmJiAoIXdvcmtsaXN0CiAgICAgICAgICAg
ICB8fCB3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShrZXlGb3JSZXBsYWNlbWVudCkgPT0gV29y
a2xpc3Q6Ok5vdEtub3duKSkgewogICAgICAgICBjb21waWxlKAotICAgICAgICAgICAgKnZtLCBj
b2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1vZGUsIFVJTlRfTUFYLCBPcGVy
YW5kczxKU1ZhbHVlPigpLAotICAgICAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAgICAgICAgICp2bSwgY29kZUJsb2NrLT5u
ZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFYLAorICAg
ICAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGZvckVudHJ5
UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDEwICsxMDcsMTIgQEAg
c3RhdGljIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJvZmlsZQogfQogCiBQbGFuOjpQbGFu
KAotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENvbXBpbGF0aW9u
TW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3Bl
cmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCisgICAgUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKKyAg
ICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAor
ICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDogdm0o
KnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVCbG9jayhwYXNzZWRDb2RlQmxvY2sp
CisgICAgLCBwcm9maWxlZERGR0NvZGVCbG9jayhwcm9maWxlZERGR0NvZGVCbG9jaykKICAgICAs
IG1vZGUobW9kZSkKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2Rl
SW5kZXgpCiAgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkocmV2aXNpb24gMTYyNTk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU1LDcgKzU1LDgg
QEAgY2xhc3MgTG9uZ0xpdmVkU3RhdGU7CiAKIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFBsYW4+IHsKICAgICBQbGFuKAotICAgICAgICBQYXNzUmVmUHRyPENvZGVC
bG9jaz4sIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAor
ICAgICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrVG9Db21waWxlLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAorICAgICAgICBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7CiAgICAgCkBAIC03MCw2ICs3MSw3
IEBAIHN0cnVjdCBQbGFuIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGUKICAgICAKICAgICBW
TSYgdm07CiAgICAgUmVmUHRyPENvZGVCbG9jaz4gY29kZUJsb2NrOworICAgIFJlZlB0cjxDb2Rl
QmxvY2s+IHByb2ZpbGVkREZHQ29kZUJsb2NrOwogICAgIENvbXBpbGF0aW9uTW9kZSBtb2RlOwog
ICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKICAgICBPcGVyYW5kczxK
U1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjI1OTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02OTYsNiArNjk2LDEzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAKICAgICBzbG93UGF0aC5saW5r
KCZtX2ppdCk7CiAgICAgCisgICAgaWYgKG1faml0LmdyYXBoKCkubV9wbGFuLndpbGxUcnlUb1Rp
ZXJVcCkgeworICAgICAgICBtX2ppdC5hZGQzMigKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMigx
KSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoCisgICAgICAg
ICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5zbG93UGF0aENhbGxzLmJlZ2luKCkgKyBtX2ppdC5j
dXJyZW50SlNDYWxsSW5kZXgoKSkpOworICAgIH0KKyAgICAKICAgICBtX2ppdC5tb3ZlKGNhbGxl
ZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NzksMTAgKzE1NzksNDAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgIG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgPSBmYWxzZTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6cHJlcGFyZUpJ
VENvZGVGb3JUaWVyVXAoKQoreworICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbHMgPSAwOworICAg
IAorICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9qaXQuZ3JhcGgoKS5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1faml0
LmdyYXBoKCkuYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRj
aCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3Q6CisgICAgICAgICAgICAgICAgbnVtYmVyT2ZDYWxscysrOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBtX2ppdC5qaXRDb2RlKCktPnNsb3dQYXRoQ2FsbHMuZmlsbCgwLCBudW1iZXJPZkNh
bGxzKTsKK30KKwogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCiB7CiAgICAgY2hlY2tB
cmd1bWVudFR5cGVzKCk7Ci0KKyAgICAKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5tX3BsYW4ud2ls
bFRyeVRvVGllclVwKQorICAgICAgICBwcmVwYXJlSklUQ29kZUZvclRpZXJVcCgpOworICAgIAog
ICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7CiAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSAwOyBibG9ja0luZGV4IDwgbV9qaXQuZ3JhcGgoKS5udW1CbG9ja3MoKTsgKytibG9ja0lu
ZGV4KSB7CiAgICAgICAgIG1faml0LnNldEZvckJsb2NrSW5kZXgoYmxvY2tJbmRleCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAxNjI1OTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksOSBAQCBwdWJsaWM6CiAgICAgflNw
ZWN1bGF0aXZlSklUKCk7CiAKICAgICBib29sIGNvbXBpbGUoKTsKKyAgICAKKyAgICB2b2lkIHBy
ZXBhcmVKSVRDb2RlRm9yVGllclVwKCk7CisgICAgCiAgICAgdm9pZCBjcmVhdGVPU1JFbnRyaWVz
KCk7CiAgICAgdm9pZCBsaW5rT1NSRW50cmllcyhMaW5rQnVmZmVyJik7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNjI1OTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2
LDYgKzE2NiwxMSBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAg
ICAgdWludDMyX3QgbV9zdGFja21hcElEOwogICAgIAogICAgIENvZGVMb2NhdGlvbkp1bXAgY29k
ZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAg
CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9TUkV4aXRCYXNlOjpjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21G
VEwpOworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNjI1OTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsMTQg
QEAgcHVibGljOgogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAg
ICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKIAotICAgIGVudW0gSklU
VHlwZSB7IE5vbmUsIEhvc3RDYWxsVGh1bmssIEludGVycHJldGVyVGh1bmssIEJhc2VsaW5lSklU
LCBERkdKSVQsIEZUTEpJVCB9OworICAgIGVudW0gSklUVHlwZSA6IHVpbnQ4X3QgeworICAgICAg
ICBOb25lLAorICAgICAgICBIb3N0Q2FsbFRodW5rLAorICAgICAgICBJbnRlcnByZXRlclRodW5r
LAorICAgICAgICBCYXNlbGluZUpJVCwKKyAgICAgICAgREZHSklULAorICAgICAgICBGVExKSVQK
KyAgICB9OwogICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQoKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTYyNTk3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgU2xvd1BhdGhSZXR1cm5U
eXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICB9CiAKICAgICAgICAgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAotICAgICAgICAgICAgdm0sIGNvZGVCbG9j
ay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAor
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgMCwgREZH
OjpERkdNb2RlLCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywg
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW1wbGUtcG9seXZhcmlhbnQtY2FsbC1p
bmxpbmluZy1leGFtcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50LWNhbGwtaW5saW5pbmctZXhhbXBsZS5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxl
LXBvbHl2YXJpYW50LWNhbGwtaW5saW5pbmctZXhhbXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMyIEBACitmdW5jdGlvbiBmb28oYmF6KSB7CisgICAgcmV0dXJuIGJhcihiYXopOwor
fQorCitmdW5jdGlvbiBmdXp6KGJheikgeworICAgIHJldHVybiBiYXIoYmF6KTsKK30KKworZnVu
Y3Rpb24gYmFyKGJheikgeworICAgIHJldHVybiBiYXooKTsKK30KKworZnVuY3Rpb24gYmF6MSgp
IHsKKyAgICByZXR1cm4gNDI7Cit9CisKK2Z1bmN0aW9uIGJhejIoKSB7CisgICAgcmV0dXJuIDI0
OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoZnV6eik7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKGJhejEpOworICAgIGlm
IChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJl
c3VsdDsKKyAgICB2YXIgcmVzdWx0ID0gZnV6eihiYXoyKTsKKyAgICBpZiAocmVzdWx0ICE9IDI0
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>
<flag name="review"
          id="245933"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222187</attachid>
            <date>2014-01-24 19:54:17 -0800</date>
            <delta_ts>2014-01-25 13:02:39 -0800</delta_ts>
            <desc>rebased patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51837</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNSBA
QAorMjAxNC0wMS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seXZhcmlhbnQgQ2FsbC9Db25zdHJ1Y3QgaW5saW5pbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzMzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgSW1hZ2luZSB0
aGF0IHlvdSBoYXZlIGEgY2FsbCBzdGFjayBsaWtlIGZvbyBjYWxscyBiYXIsIHdoaWNoIGNhbGxz
IGJhei4gTGV0cyBzYXkgdGhhdAorICAgICAgICB0aGVyZSdzIGFub3RoZXIgY2FsbCBzdGFjayB3
aGVyZSBiYXIgY2FsbHMgc29tZXRoaW5nIG90aGVyIHRoYW4gYmF6IGF0IHRoZSBzYW1lCisgICAg
ICAgIGNhbGxzaXRlLCBidXQgd2hlbnZlciBiYXIgaXMgY2FsbGVkIGZyb20gZm9vLCBpdCBhbHdh
eXMgY2FsbHMgYmF6LgorICAgICAgICAKKyAgICAgICAgVGhpcyBiYXItPmJheiBjYWxsc2l0ZSBj
YW4gYmUgc2FpZCB0byBiZSBwb2x5bW9ycGhpYywgYmVjYXVzZSBpdCBtYXkgY2FsbCB0aGluZ3Mg
b3RoZXIKKyAgICAgICAgdGhhbiBiYXogaW4gc29tZSBjYXNlcy4KKyAgICAgICAgCisgICAgICAg
IEJ1dCBpZiB3ZSBjb25kdWN0IGEgcG9seXZhcmlhbnQgYW5hbHlzaXMgLSB0aGF0IGlzLCBvbmUg
dGhhdCBhY2NvdW50cyBmb3IgdGhlIGNhbGwKKyAgICAgICAgc3RhY2sgd2hlbiByZXBvcnRpbmcg
cmVzdWx0cyAtIHRoZW4gdGhpcyBjYWxsIGFwcGVhcnMgbW9ub21vcnBoaWMgd2hlbmV2ZXIgYmFy
IGdldHMKKyAgICAgICAgY2FsbGVkIGZyb20gZm9vLiBBIHBvbHl2YXJpYW50IGFuYWx5c2lzIG9m
IGNhbGxzaXRlcyB3aWxsIHJlcG9ydCByZXN1bHRzIG9mIHRoZSBmb3JtCisgICAgICAgICJ3aGVu
IHN0YXRlbWVudCBTIHJhbiBvbiBhIGNhbGwgc3RhY2sgdGhhdCBpbmNsdWRlZCBmdW5jdGlvbnMg
ZiwgZywgZXRjIHRoZW4gdGhlIHNldAorICAgICAgICBvZiBwb3NzaWJsZSBjYWxsZWVzIGlzIGJv
dW5kZWQgYnkgLi4uIi4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBhIG1vbm92YXJpYW50IGFuYWx5
c2lzCisgICAgICAgIHRoYXQgd2lsbCBhdHRlbXB0IHRvIGNvbnN0cnVjdCBhIGJvdW5kaW5nIHNl
dCBvZiBjYWxsZWVzIHdpdGhvdXQgYWRkaW5nIHRoZSBjYWxsIHN0YWNrCisgICAgICAgIGFzIGEg
Y29udGluZ2VuY3kuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBhbGwg
aW5saW5pbmcgZGVjaXNpb25zIHdlcmUgbWFkZSBiYXNlZCBvbiBhIG1vbm92YXJpYW50IGR5bmFt
aWMKKyAgICAgICAgYW5hbHlzaXMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsbG93
cyB0aGUgRlRMIHRvIG1ha2UgaXRzIENhbGwvQ29uc3RydWN0IGlubGluaW5nIGRlY2lzaW9ucyBi
YXNlZCBvbiBhCisgICAgICAgIHBvbHl2YXJpYW50IGFuYWx5c2lzLiBUaGF0IGFuYWx5c2lzIGlz
IGNsZXZlcmx5IHNpbXBsZTogd2UganVzdCBhc2sgdGhlIERGRyB0byBkbyB0aGUKKyAgICAgICAg
c2FtZSAiYW5hbHlzaXMiIHRoYXQgdGhlIExMSW50IGFuZCBCYXNlbGluZSBKSVQgcGVyZm9ybS4g
VGhhdCAiYW5hbHlzaXMiIGlzIGp1c3QgYW4KKyAgICAgICAgaW5saW5lIGNhY2hlIHBsdXMgYSBz
bG93LXBhdGggY291bnQuIEJ1dCB0aGUgREZHIGhhcyBwZXJmb3JtZWQgaW5saW5pbmcuIEhlbmNl
IGVhY2gKKyAgICAgICAgY2FsbHNpdGUgdGhhdCB0aGUgREZHIHJlcG9ydHMgaW5mb3JtYXRpb24g
Zm9yIGlzIGFjdHVhbGx5IHNpdHRpbmcgb24gYSBzdGF0aWMgY2FsbAorICAgICAgICBzdGFjay4g
V2hlbiB0aGUgREZHIHJlcG9ydHMgdGhlIHN0YXR1cyBvZiBpdHMgY2FsbCBpbmxpbmUgY2FjaGVz
LCBpdCBjYW4gcmVwb3J0IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIGEgKHNob3J0KSBz
bmlwcGV0IG9mIGNhbGwgc3RhY2sgYXMgYSBraW5kIG9mIGNvbnRpbmdlbmN5LCBtdWNoIGxpa2Ug
YQorICAgICAgICBwb2x5dmFyaWFudCBhbmFseXNpcyB3b3VsZC4KKyAgICAgICAgCisgICAgICAg
IENvbnNpZGVyIHRoZSBmb28tPmJhci0+YmF6IGV4YW1wbGUuIExldHMgc2F5IHRoYXQgZm9vJ3Mg
Y2FsbCB0byBiYXIgaXMgdHJpdmlhbGx5CisgICAgICAgIG1vbm9tb3JwaGljLCBhbmQgdGhlIERG
RyBpbmxpbmVzIGl0LiBUaGUgREZHIHdvbid0IGJlIGFibGUgdG8gdGhlbiBpbmxpbmUgdGhlIGNh
bGwKKyAgICAgICAgZnJvbSBmb28tPmJhciB0byBiYXogYmVjYXVzZSB3aGVuIHdlIGFzayB0aGUg
QmFzZWxpbmUgSklUIHByb2ZpbGluZyB3aGF0IHRoZSBzdGF0dXMgb2YKKyAgICAgICAgdGhlIGJh
ci0+YmF6IGNhbGwgaXMsIHRoZSBwcm9maWxpbmcgd2lsbCBzYXkgInBvbHltb3JwaGljIi4gVGhh
dCdzIGJlY2F1c2UgdGhhdAorICAgICAgICBwcm9maWxpbmcgZG9lc24ndCBoYXZlIGFueSBjb250
ZXh0IHNlbnNpdGl2aXR5LCBhbmQgc28gaXQgZG9lc24ndCBrbm93IHRoYXQgdGhlIGNhbGwKKyAg
ICAgICAgd291bGQgYmUgbW9ub21vcnBoaWMgaWYgZm9vIHdhcyBiYXIncyBjYWxsZXIuCisgICAg
ICAgIAorICAgICAgICBCdXQsIHdpdGggdGhpcyBwYXRjaCwgb25jZSB3ZSB0aWVyLXVwIGZyb20g
dGhlIERGRyB0byB0aGUgRlRMLCB0aGUgRlRMIHdpbGwgYmUgYWJsZSB0bworICAgICAgICBhc2sg
dGhlIERGRzogImhleSwgd2hhdCBkbyB5b3Uga25vdyBhYm91dCB0aGUgY2FsbHNpdGUgdG8gYmF6
IGluIGZvby0+YmFyPyIgVGhlIERGRworICAgICAgICBoYWQsIGFzIHdlIHNhaWQgYWJvdmUsIGlu
bGluZWQgYmFyIGludG8gZm9vIGFuZCBzbyBpdCBzZWVzIHRoYXQgY2FsbHNpdGUgaW4gaXRzCisg
ICAgICAgIHByb3BlciBjb250ZXh0LiBUaGF0IGNhbGwgaW5saW5lIGNhY2hlIHdvdWxkIGJlIG1v
bm9tb3JwaGljLiBUaGUgRlRMIHdvdWxkIHRoZW4gYmUKKyAgICAgICAgYWJsZSB0byBpbmxpbmUg
YmF6IGludG8gZm9vLT5iYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxs
eSBiZW5lZml0IFY4djcvcmF5dHJhY2UsIGJ1dCB3ZSBzdGlsbCBoYXZlIHNvbWUgbW9yZSB0aGlu
Z3MgdG8gZG8KKyAgICAgICAgYmVmb3JlIHdlIGNhbiBjbG9zZSB0aGUgbG9vcCBvbiB0aGlzLiBS
aWdodCBub3csIHRoZSBjYWxsc2l0ZSBpbiBxdWVzdGlvbiBpcyBub3QgYW4KKyAgICAgICAgaW5s
aW5pbmcgY2FuZGlkYXRlIGJlY2F1c2UgaXQncyBvcF9jYWxsX3ZhcmFyZ3MuIFdlJ2xsIGZpeCB0
aGF0IGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1
cmVDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojppc0FwcHJveGltYXRlbHlFcXVhbFRvKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6YXBw
cm94aW1hdGVIYXNoKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAg
IChKU0M6OkNvZGVPcmlnaW46OkNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
OjpkZWxldGVkTWFya2VyKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aDo6aGFzaCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g6OmVxdWFs
KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6RXhpdFByb2ZpbGU6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6
Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OnN1YnN1bWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpGcmVxdWVudEV4aXRTaXRlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlOjpqaXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjp3
aXRoSklUVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6Omhh
c0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpleGl0aW5nSklU
VHlwZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlZENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGVJbXBsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6Y3Vy
cmVudEpTQ2FsbEluZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAo
SlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAg
ICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0QmFzZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR09wZXJh
dGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQbGFuOjpQbGFuKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OnByZXBhcmVKSVRDb2RlRm9yVGllclVwKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZSk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9u
cy5jcHA6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFudC1jYWxsLWlu
bGluaW5nLWV4YW1wbGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGZ1enop
OgorICAgICAgICAoYmFyKToKKyAgICAgICAgKGJhejEpOgorICAgICAgICAoYmF6Mik6CisKIDIw
MTQtMDEtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcg
c2hvdWxkIGFsbG93IGlubGluaW5nIG9mIG9wX2NhbGxfdmFyYXJncyBjYWxscwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTAsNiArMjEwLDcgQEAKIAkJMEYzOEIwMTkxN0NGRTc1NTAwQjE0NEQz
IC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGlsYXRp
b25Nb2RlLmNwcCAqLzsgfTsKIAkJMEYzOEIwMUExN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBp
bGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0FDNzUyMTgz
RUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQUM3NTExODNFQTEwNDAwMzIwMjlGIC8qIFN0YWNr
QWxpZ25tZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNBQzc1MzE4OEU1RUM4
MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcCAqLzsgfTsKIAkJMEYzQjNBMUIxNTNFNjhGNDAwM0VEMEZGIC8qIERGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjNCM0ExODE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCM0EyNDE1
NDRDOTkxMDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgKi87IH07CkBA
IC0xNjA0LDYgKzE2MDUsNyBAQAogCQkwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29t
cGlsYXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERG
R0NvbXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8q
IERGR0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdDb21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQUM3NTExODNFQTEwNDAwMzIwMjlGIC8qIFN0
YWNrQWxpZ25tZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0YWNrQWxp
Z25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0FDNzUzMTg4RTVFQzgw
MDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBFeGl0aW5nSklUVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNC
M0ExNzE1M0U2OEVGMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTgxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8q
IERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZH
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC00MzQxLDYgKzQzNDMsNyBAQAogCQkJCTk2OUEwNzkyMEVEMUQzQUUwMEYxRjY4MSAvKiBFdmFs
Q29kZUNhY2hlLmggKi8sCiAJCQkJMEY1NkExRDQxNTAwMUNGMjAwMjk5MkIxIC8qIEV4ZWN1dGlv
bkNvdW50ZXIuY3BwICovLAogCQkJCTBGNTZBMUQxMTUwMDBGMzEwMDI5OTJCMSAvKiBFeGVjdXRp
b25Db3VudGVyLmggKi8sCisJCQkJMEYzQUM3NTMxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdK
SVRUeXBlLmggKi8sCiAJCQkJMEZCMTA1ODIxNjc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmNw
cCAqLywKIAkJCQkwRkIxMDU4MzE2NzU0ODBDMDBGOEFCNkUgLyogRXhpdEtpbmQuaCAqLywKIAkJ
CQkwRjBCODNBQTE0QkNGNUI5MDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5oICovLApA
QCAtNDk2Nyw2ICs0OTcwLDcgQEAKIAkJCQlCQzE4QzQyMzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNM
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjVENzA5QzE2REU5OUY0MDBGQ0E2QkMgLyogSlNN
YW5hZ2VkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0
MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlG
IC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNDE4NjJDNDc4
MDA4NDVEOTcgLyogRlRMUmVnaXN0ZXJBdE9mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ4
NzRBRTQxNUVCREU0QTAwMkUzNTg3IC8qIEpTTmFtZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQyNDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNPYmplY3QuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwCShyZXZpc2lvbiAxNjI3NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMyArMjYsMTcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5oIgogCisjaW5j
bHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAi
REZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKK3N0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwogQ2FsbExpbmtT
dGF0dXM6OkNhbGxMaW5rU3RhdHVzKEpTVmFsdWUgdmFsdWUpCiAgICAgOiBtX2NhbGxUYXJnZXQo
dmFsdWUpCiAgICAgLCBtX2V4ZWN1dGFibGUoMCkKQEAgLTEyNiwyMSArMTMwLDEwNSBAQCBDYWxs
TGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvCiAgICAgICAgIHJldHVybiB0YWtl
c1Nsb3dQYXRoKCk7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8gPSBwcm9m
aWxlZEJsb2NrLT5nZXRDYWxsTGlua0luZm8oYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgQ2Fs
bExpbmtTdGF0dXMgcmVzdWx0ID0gY29tcHV0ZUZvcihsb2NrZXIsIGNhbGxMaW5rSW5mbyk7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwg
cHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7CisgICAgCisgICAgaWYgKHByb2ZpbGVkQmxv
Y2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5k
ZXgsIEJhZEZ1bmN0aW9uKSkpCisgICAgICAgIHJlc3VsdC5tYWtlQ2xvc3VyZUNhbGwoKTsKKyAg
ICAKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
KTsKKyNlbmRpZgorfQorCitDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZv
cihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2FsbExpbmtJbmZvJiBjYWxsTGlua0luZm8p
Cit7CiAgICAgaWYgKGNhbGxMaW5rSW5mby5zdHViKQogICAgICAgICByZXR1cm4gQ2FsbExpbmtT
dGF0dXMoY2FsbExpbmtJbmZvLnN0dWItPmV4ZWN1dGFibGUoKSwgY2FsbExpbmtJbmZvLnN0dWIt
PnN0cnVjdHVyZSgpKTsKICAgICAKICAgICBKU0Z1bmN0aW9uKiB0YXJnZXQgPSBjYWxsTGlua0lu
Zm8ubGFzdFNlZW5DYWxsZWUuZ2V0KCk7CiAgICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVy
biBjb21wdXRlRnJvbUxMSW50KGxvY2tlciwgcHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIHJldHVybiBDYWxsTGlua1N0YXR1cygpOwogICAgIAotICAgIGlmIChjYWxsTGlu
a0luZm8uaGFzU2VlbkNsb3N1cmUKLSAgICAgICAgfHwgcHJvZmlsZWRCbG9jay0+aGFzRXhpdFNp
dGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkRnVuY3Rp
b24pKSkKKyAgICBpZiAoY2FsbExpbmtJbmZvLmhhc1NlZW5DbG9zdXJlKQogICAgICAgICByZXR1
cm4gQ2FsbExpbmtTdGF0dXModGFyZ2V0LT5leGVjdXRhYmxlKCksIHRhcmdldC0+c3RydWN0dXJl
KCkpOwogCiAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKHRhcmdldCk7Ci0jZWxzZQotICAgIHJl
dHVybiBDYWxsTGlua1N0YXR1cygpOwotI2VuZGlmCit9CisKK3ZvaWQgQ2FsbExpbmtTdGF0dXM6
OmNvbXB1dGVERkdTdGF0dXNlcygKKyAgICBDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ2FsbExp
bmtTdGF0dXM6OkNvbnRleHRNYXAmIG1hcCkKK3sKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBS
RUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQp
OworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBkZmdDb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCk7CisgICAgREZHOjpKSVRDb2RlKiBqaXRDb2RlID0gZGZnQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpOworICAgIFJFTEVBU0VfQVNTRVJUKGRmZ0NvZGVCbG9jay0+bnVtYmVyT2ZD
YWxsTGlua0luZm9zKCkgPD0gaml0Q29kZS0+c2xvd1BhdGhDYWxscy5zaXplKCkpOworICAgIAor
ICAgIGZvciAoc2l6ZV90IGkgPSBkZmdDb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygp
OyBpLS07KSB7CisgICAgICAgIENhbGxMaW5rSW5mbyYgaW5mbyA9IGRmZ0NvZGVCbG9jay0+Y2Fs
bExpbmtJbmZvKGkpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBpbmZvLmNvZGVP
cmlnaW47CisgICAgICAgIAorICAgICAgICBib29sIHRha2VTbG93UGF0aDsKKyAgICAgICAgYm9v
bCBiYWRGdW5jdGlvbjsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhZCBhbHJl
YWR5IHByZXZpb3VzbHkgbWFkZSBhIHRlcnJpYmxlIG1pc3Rha2UgaW4gdGhlIEZUTCBmb3IgdGhp
cworICAgICAgICAvLyBjb2RlIG9yaWdpbi4gTm90ZSB0aGF0IHRoaXMgaXMgYXBwcm94aW1hdGUg
YmVjYXVzZSB3ZSBjb3VsZCBoYXZlIGEgbW9ub3ZhcmlhbnQKKyAgICAgICAgLy8gaW5saW5lIGlu
IHRoZSBGVEwgdGhhdCBlbmRlZCB1cCBmYWlsaW5nLiBXZSBzaG91bGQgZml4IHRoYXQgYXQgc29t
ZSBwb2ludCBieQorICAgICAgICAvLyBoYXZpbmcgZGF0YSBzdHJ1Y3R1cmVzIHRvIHRyYWNrIHRo
ZSBjb250ZXh0IG9mIGZyZXF1ZW50IGV4aXRzLiBUaGlzIGlzIGN1cnJlbnRseQorICAgICAgICAv
LyBjaGFsbGVuZ2luZyBiZWNhdXNlIGl0IHdvdWxkIHJlcXVpcmUgY3JlYXRpbmcgYSBDb2RlT3Jp
Z2luLWJhc2VkIGRhdGFiYXNlIGluCisgICAgICAgIC8vIGJhc2VsaW5lIENvZGVCbG9ja3MsIGJ1
dCB0aG9zZSBDb2RlQmxvY2tzIGRvbid0IHJlYWxseSBoYXZlIGEgcGxhY2UgdG8gcHV0IHRoZQor
ICAgICAgICAvLyBJbmxpbmVDYWxsRnJhbWVzLgorICAgICAgICB7CisgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihiYXNlbGluZUNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgICAgIENvZGVCbG9jayogY3VycmVudEJhc2VsaW5lID0KKyAgICAgICAgICAgICAgICBiYXNl
bGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJh
c2VsaW5lQ29kZUJsb2NrKTsKKyAgICAgICAgICAgIHRha2VTbG93UGF0aCA9CisgICAgICAgICAg
ICAgICAgY3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRF
eGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlLCBFeGl0RnJvbUZUTCkp
CisgICAgICAgICAgICAgICAgfHwgY3VycmVudEJhc2VsaW5lLT5oYXNFeGl0U2l0ZShsb2NrZXIs
IERGRzo6RnJlcXVlbnRFeGl0U2l0ZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJhZENhY2hl
V2F0Y2hwb2ludCwgRXhpdEZyb21GVEwpKQorICAgICAgICAgICAgICAgIHx8IGN1cnJlbnRCYXNl
bGluZS0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4LCBCYWRFeGVjdXRhYmxlLCBFeGl0RnJvbUZUTCkpOworICAgICAgICAg
ICAgYmFkRnVuY3Rpb24gPQorICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNlbGluZS0+aGFzRXhp
dFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4LCBCYWRGdW5jdGlvbiwgRXhpdEZyb21GVEwpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZGZnQ29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgaWYgKHRha2VTbG93UGF0aCB8fCBqaXRDb2RlLT5z
bG93UGF0aENhbGxzW2ldID49IE9wdGlvbnM6OmNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
KCkpCisgICAgICAgICAgICAgICAgbWFwLmFkZChpbmZvLmNvZGVPcmlnaW4sIHRha2VzU2xvd1Bh
dGgoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBDYWxsTGlua1N0YXR1
cyBzdGF0dXMgPSBjb21wdXRlRm9yKGxvY2tlciwgaW5mbyk7CisgICAgICAgICAgICAgICAgaWYg
KHN0YXR1cy5pc1NldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiYWRGdW5jdGlvbikK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5tYWtlQ2xvc3VyZUNhbGwoKTsKKyAgICAg
ICAgICAgICAgICAgICAgbWFwLmFkZChpbmZvLmNvZGVPcmlnaW4sIHN0YXR1cyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorICAgIAorICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGRhdGFMb2co
IkNvbnRleHQgbWFwOlxuIik7CisgICAgICAgIENvbnRleHRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBt
YXAuYmVnaW4oKTsKKyAgICAgICAgQ29udGV4dE1hcDo6aXRlcmF0b3IgZW5kID0gbWFwLmVuZCgp
OworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgZGF0
YUxvZygiICAgICIsIGl0ZXItPmtleSwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZygiICAg
ICAgICAiLCBpdGVyLT52YWx1ZSwgIlxuIik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0NhbGxM
aW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJv
ZmlsZWRCbG9jaywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBjb25zdCBDYWxsTGlua1N0YXR1czo6
Q29udGV4dE1hcCYgbWFwKQoreworICAgIENvbnRleHRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBtYXAuZmluZChjb2RlT3JpZ2luKTsKKyAgICBpZiAoaXRlciAhPSBtYXAuZW5kKCkpCisgICAg
ICAgIHJldHVybiBpdGVyLT52YWx1ZTsKKyAgICAKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9m
aWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogfQogCiB2b2lkIENhbGxMaW5r
U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuaAkocmV2aXNpb24gMTYyNzQ4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ2FsbExpbmtTdGF0dXNfaAog
I2RlZmluZSBDYWxsTGlua1N0YXR1c19oCiAKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5j
bHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRM
b2NrLmgiCiAjaW5jbHVkZSAiSW50cmluc2ljLmgiCkBAIC0zOCw2ICszOSw3IEBAIGNsYXNzIEV4
ZWN1dGFibGVCYXNlOwogY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNzIEpTRnVuY3Rpb247
CiBjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1Y3QgQ2FsbExpbmtJbmZvOwogCiBjbGFzcyBDYWxsTGlu
a1N0YXR1cyB7CiBwdWJsaWM6CkBAIC03NSw2ICs3NywyMCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0
ZWNvZGVJbmRleCk7CiAgICAgCisgICAgLy8gQ29tcHV0ZXMgdGhlIHN0YXR1cyBhc3N1bWluZyB0
aGF0IHdlIG5ldmVyIHRvb2sgc2xvdyBwYXRoIGFuZCBuZXZlciBwcmV2aW91c2x5CisgICAgLy8g
ZXhpdGVkLgorICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1cyBjb21wdXRlRm9yKGNvbnN0IENvbmN1
cnJlbnRKSVRMb2NrZXImLCBDYWxsTGlua0luZm8mKTsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q29kZU9yaWdpbiwgQ2FsbExpbmtTdGF0dXMsIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+
IENvbnRleHRNYXA7CisgICAgCisgICAgLy8gQ29tcHV0ZXMgYWxsIG9mIHRoZSBzdGF0dXNlcyBv
ZiB0aGUgREZHIGNvZGUgYmxvY2suIERvZXNuJ3QgaW5jbHVkZSBzdGF0dXNlcyB0aGF0IGhhZAor
ICAgIC8vIG5vIGluZm9ybWF0aW9uLiBDdXJyZW50bHkgd2UgdXNlIHRoaXMgd2hlbiBjb21waWxp
bmcgRlRMIGNvZGUsIHRvIGVuYWJsZSBwb2x5dmFyaWFudAorICAgIC8vIGlubGluaW5nLgorICAg
IHN0YXRpYyB2b2lkIGNvbXB1dGVERkdTdGF0dXNlcyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywg
Q29udGV4dE1hcCYpOworICAgIAorICAgIC8vIEhlbHBlciB0aGF0IGZpcnN0IGNvbnN1bHRzIHRo
ZSBDb250ZXh0TWFwIGFuZCB0aGVuIGRvZXMgY29tcHV0ZUZvcigpLgorICAgIHN0YXRpYyBDYWxs
TGlua1N0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIENvZGVPcmlnaW4sIGNvbnN0IENvbnRl
eHRNYXAmKTsKKyAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsVGFy
Z2V0IHx8IG1fZXhlY3V0YWJsZSB8fCBtX2NvdWxkVGFrZVNsb3dQYXRoOyB9CiAgICAgCiAgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQpAQCAtOTQsNiArMTEw
LDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAK
IHByaXZhdGU6CisgICAgdm9pZCBtYWtlQ2xvc3VyZUNhbGwoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2lzUHJvdmVkKTsKKyAgICAgICAgLy8gVHVybiB0aGlzIGludG8gYSBjbG9zdXJlIGNh
bGwuCisgICAgICAgIG1fY2FsbFRhcmdldCA9IEpTVmFsdWUoKTsKKyAgICB9CisgICAgCiAgICAg
c3RhdGljIENhbGxMaW5rU3RhdHVzIGNvbXB1dGVGcm9tTExJbnQoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAogICAg
IEpTVmFsdWUgbV9jYWxsVGFyZ2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksOCArNDg5LDgg
QEAgcHVibGljOgogICAgIFJhcmVDYXNlUHJvZmlsZSogc3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZv
ckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVy
biB0cnlCaW5hcnlTZWFyY2g8UmFyZUNhc2VQcm9maWxlLCBpbnQ+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2FzZVBy
b2ZpbGVzLCBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdl
dFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsKKyAgICAgICAgICAgIG1fc3BlY2lhbEZh
c3RDYXNlUHJvZmlsZXMsIG1fc3BlY2lhbEZhc3RDYXNlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29k
ZU9mZnNldCwKKyAgICAgICAgICAgIGdldFJhcmVDYXNlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0KTsK
ICAgICB9CiAKICAgICBib29sIGxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShpbnQgYnl0ZWNv
ZGVPZmZzZXQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVP
cmlnaW4uY3BwCShyZXZpc2lvbiAxNjI3NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDY0IEBAIHVu
c2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gaW5s
aW5lRGVwdGhGb3JDYWxsRnJhbWUoaW5saW5lQ2FsbEZyYW1lKTsKIH0KKworYm9vbCBDb2RlT3Jp
Z2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25z
dAoreworICAgIENvZGVPcmlnaW4gYSA9ICp0aGlzOworICAgIENvZGVPcmlnaW4gYiA9IG90aGVy
OworCisgICAgaWYgKCFhLmlzU2V0KCkpCisgICAgICAgIHJldHVybiAhYi5pc1NldCgpOworICAg
IGlmICghYi5pc1NldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGEu
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGIuaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKTsKKyAgICBpZiAoYi5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgZm9yICg7OykgeworICAgICAgICBBU1NFUlQo
YS5pc1NldCgpKTsKKyAgICAgICAgQVNTRVJUKGIuaXNTZXQoKSk7CisgICAgICAgIAorICAgICAg
ICBpZiAoYS5ieXRlY29kZUluZGV4ICE9IGIuYnl0ZWNvZGVJbmRleCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgoISFhLmlubGluZUNhbGxGcmFtZSkg
IT0gKCEhYi5pbmxpbmVDYWxsRnJhbWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFhLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKGEuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlICE9IGIuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYSA9IGEuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7
CisgICAgICAgIGIgPSBiLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgIH0KK30KKwordW5z
aWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKCkgY29uc3QKK3sKKyAgICBpZiAoIWlz
U2V0KCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpKQorICAgICAgICByZXR1cm4gMTsKICAgICAKKyAgICB1bnNpZ25lZCByZXN1bHQgPSAyOwor
ICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9ICp0aGlzOworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgcmVzdWx0ICs9IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgCisgICAgICAg
IGlmICghY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAKKyAgICAgICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6
aGFzaChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAg
ICAgIAorICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcjsKKyAgICB9Cit9CisKIFZlY3RvcjxDb2RlT3JpZ2luPiBDb2RlT3JpZ2luOjppbmxpbmVT
dGFjaygpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0
aCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
aAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdHJ1Y3QgQ29kZU9y
aWdpbiB7CiAgICAgCiAgICAgQ29kZU9yaWdpbihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCiAgICAgICAgIDogYnl0ZWNvZGVJbmRleChpbnZhbGlkQnl0ZWNvZGVJbmRleCkKLSAgICAg
ICAgLCBpbmxpbmVDYWxsRnJhbWUoYml0d2lzZV9jYXN0PElubGluZUNhbGxGcmFtZSo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSkpKQorICAgICAgICAsIGlubGluZUNhbGxGcmFtZShkZWxldGVk
TWFya2VyKCkpCiAgICAgewogICAgIH0KICAgICAKQEAgLTk3LDExICs5NywyMyBAQCBzdHJ1Y3Qg
Q29kZU9yaWdpbiB7CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvZGVPcmlnaW4mIG90aGVy
KSBjb25zdDsKICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29kZU9yaWdpbiYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9CiAgICAgCisgICAgLy8gVGhpcyBjaGVj
a3MgaWYgdGhlIHR3byBjb2RlIG9yaWdpbnMgY29ycmVzcG9uZCB0byB0aGUgc2FtZSBzdGFjayB0
cmFjZSBzbmlwcGV0cywKKyAgICAvLyBidXQgaWdub3JlIHdoZXRoZXIgdGhlIElubGluZUNhbGxG
cmFtZSdzIGFyZSBpZGVudGljYWwuCisgICAgYm9vbCBpc0FwcHJveGltYXRlbHlFcXVhbFRvKGNv
bnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBhcHByb3hp
bWF0ZUhhc2goKSBjb25zdDsKKyAgICAKICAgICAvLyBHZXQgdGhlIGlubGluZSBzdGFjay4gVGhp
cyBpcyBzbG93LCBhbmQgaXMgaW50ZW5kZWQgZm9yIGRlYnVnZ2luZyBvbmx5LgogICAgIFZlY3Rv
cjxDb2RlT3JpZ2luPiBpbmxpbmVTdGFjaygpIGNvbnN0OwogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYs
IER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIElubGluZUNhbGxG
cmFtZSogZGVsZXRlZE1hcmtlcigpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PElubGluZUNhbGxGcmFtZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgIH0KIH07
CiAKIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewpAQCAtMTg1LDYgKzE5NywxMiBAQCBzdHJ1Y3Qg
Q29kZU9yaWdpbkhhc2ggewogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CiAKK3N0cnVjdCBDb2RlT3JpZ2luQXBwcm94aW1hdGVI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDb2RlT3JpZ2luJiBrZXkpIHsg
cmV0dXJuIGtleS5hcHByb3hpbWF0ZUhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IENvZGVPcmlnaW4mIGEsIGNvbnN0IENvZGVPcmlnaW4mIGIpIHsgcmV0dXJuIGEuaXNBcHBy
b3hpbWF0ZWx5RXF1YWxUbyhiKTsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBu
YW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdF
eGl0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RGR0V4aXRQcm9maWxlLmNwcAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsOCBAQCBFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKCkgeyB9CiAKIGJvb2wgRXhp
dFByb2ZpbGU6OmFkZChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgY29uc3QgRnJlcXVlbnRF
eGl0U2l0ZSYgc2l0ZSkKIHsKKyAgICBBU1NFUlQoc2l0ZS5qaXRUeXBlKCkgIT0gRXhpdEZyb21B
bnl0aGluZyk7CisgICAgCiAgICAgLy8gSWYgd2UndmUgbmV2ZXIgc2VlbiBhbnkgZnJlcXVlbnQg
ZXhpdHMgdGhlbiBjcmVhdGUgdGhlIGxpc3QgYW5kIHB1dCB0aGlzIHNpdGUKICAgICAvLyBpbnRv
IGl0LgogICAgIGlmICghbV9mcmVxdWVudEV4aXRTaXRlcykgewpAQCAtNzgsNyArODAsNyBAQCBi
b29sIEV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZShjb25zdCBDb25jCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5z
aXplKCk7IGktLTspIHsKLSAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09
IHNpdGUpCisgICAgICAgIGlmIChzaXRlLnN1YnN1bWVzKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0
KGkpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2Zp
bGUuaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0RGR0V4aXRQcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVk
ZSAiRXhpdEtpbmQuaCIKKyNpbmNsdWRlICJFeGl0aW5nSklUVHlwZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KQEAgLTM5LDE4ICs0MCwyMiBAQCBwdWJsaWM6CiAgICAgRnJlcXVlbnRFeGl0U2l0ZSgp
CiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKICAgICAg
ICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21B
bnl0aGluZykKICAgICB7CiAgICAgfQogICAgIAogICAgIEZyZXF1ZW50RXhpdFNpdGUoV1RGOjpI
YXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkg
Ly8gMSA9IGRlbGV0ZWQgdmFsdWUKICAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAg
ICAgICAgLCBtX2ppdFR5cGUoRXhpdEZyb21Bbnl0aGluZykKICAgICB7CiAgICAgfQogICAgIAot
ICAgIGV4cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4
aXRLaW5kIGtpbmQpCisgICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSgKKyAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4aXRLaW5kIGtpbmQsIEV4aXRpbmdKSVRUeXBlIGppdFR5
cGUgPSBFeGl0RnJvbUFueXRoaW5nKQogICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9qaXRUeXBlKGpp
dFR5cGUpCiAgICAgewogICAgICAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsK
ICAgICAgICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRl
ciB3aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CkBAIC02MSw5
ICs2NiwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8gVXNlIHRoaXMgY29uc3RydWN0b3IgaWYg
eW91IHdpc2ggZm9yIHRoZSBleGl0IHNpdGUgdG8gYmUgY291bnRlZCBnbG9iYWxseSB3aXRoaW4g
aXRzCiAgICAgLy8gY29kZSBibG9jay4KLSAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKEV4
aXRLaW5kIGtpbmQpCisgICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZShFeGl0S2luZCBraW5k
LCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlID0gRXhpdEZyb21Bbnl0aGluZykKICAgICAgICAgOiBt
X2J5dGVjb2RlT2Zmc2V0KDApCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9q
aXRUeXBlKGppdFR5cGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTc1LDE2ICs4MSwzNiBAQCBw
dWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIG90aGVy
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIu
bV9ieXRlY29kZU9mZnNldAotICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZDsK
KyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1f
aml0VHlwZSA9PSBvdGhlci5tX2ppdFR5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgc3Vic3Vt
ZXMoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9ieXRlY29kZU9mZnNldCAhPSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0KQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9raW5kICE9IG90aGVyLm1fa2luZCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1faml0VHlwZSA9PSBFeGl0RnJv
bUFueXRoaW5nKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBtX2pp
dFR5cGUgPT0gb3RoZXIubV9qaXRUeXBlOwogICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9m
ZnNldCkgKyBtX2tpbmQ7CisgICAgICAgIHJldHVybiBXVEY6OmludEhhc2gobV9ieXRlY29kZU9m
ZnNldCkgKyBtX2tpbmQgKyBtX2ppdFR5cGUgKiA3OwogICAgIH0KICAgICAKICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KICAg
ICBFeGl0S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgRXhpdGluZ0pJ
VFR5cGUgaml0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faml0VHlwZTsgfQorICAgIAorICAgIEZy
ZXF1ZW50RXhpdFNpdGUgd2l0aEpJVFR5cGUoRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkgY29uc3QK
KyAgICB7CisgICAgICAgIEZyZXF1ZW50RXhpdFNpdGUgcmVzdWx0ID0gKnRoaXM7CisgICAgICAg
IHJlc3VsdC5tX2ppdFR5cGUgPSBqaXRUeXBlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKQEAg
LTk0LDYgKzEyMCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9ieXRlY29k
ZU9mZnNldDsKICAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgRXhpdGluZ0pJVFR5cGUgbV9qaXRU
eXBlOwogfTsKIAogc3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKQEAgLTE2Niw2ICsxOTMs
MTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4aXRT
aXRlJiBzaXRlKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKHNpdGUuaml0VHlwZSgpID09IEV4
aXRGcm9tQW55dGhpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShzaXRlLndp
dGhKSVRUeXBlKEV4aXRGcm9tREZHKSkKKyAgICAgICAgICAgICAgICB8fCBoYXNFeGl0U2l0ZShz
aXRlLndpdGhKSVRUeXBlKEV4aXRGcm9tRlRMKSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IG1fZnJlcXVlbnRFeGl0U2l0ZXMuZmluZChzaXRlKSAhPSBtX2ZyZXF1ZW50RXhpdFNpdGVzLmVu
ZCgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
eGl0S2luZC5oCShyZXZpc2lvbiAxNjI3NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1l
c3BhY2UgSlNDIHsKIAotZW51bSBFeGl0S2luZCB7CitlbnVtIEV4aXRLaW5kIDogdWludDhfdCB7
CiAgICAgRXhpdEtpbmRVbnNldCwKICAgICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBh
IHR5cGUgcHJlZGljdGlvbiB3YXMgd3JvbmcuCiAgICAgQmFkRnVuY3Rpb24sIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIHdlIG1hZGUgYW4gaW5jb3JyZWN0IGFzc3VtcHRpb24gYWJvdXQgd2hhdCBmdW5j
dGlvbiB3ZSB3b3VsZCBzZWUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
RXhpdGluZ0pJVFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXhpdGluZ0pJVFR5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9FeGl0aW5nSklUVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBFeGl0aW5nSklUVHlwZV9oCisjZGVmaW5lIEV4aXRpbmdKSVRUeXBlX2gKKworI2luY2x1
ZGUgIkpJVENvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2VudW0gRXhpdGluZ0pJVFR5cGUg
OiB1aW50OF90IHsKKyAgICBFeGl0RnJvbUFueXRoaW5nLAorICAgIEV4aXRGcm9tREZHLAorICAg
IEV4aXRGcm9tRlRMCit9OworCitpbmxpbmUgRXhpdGluZ0pJVFR5cGUgZXhpdGluZ0pJVFR5cGVG
b3IoSklUQ29kZTo6SklUVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgSklUQ29kZTo6REZHSklUOgorICAgICAgICByZXR1cm4gRXhpdEZyb21ERkc7CisgICAgY2Fz
ZSBKSVRDb2RlOjpGVExKSVQ6CisgICAgICAgIHJldHVybiBFeGl0RnJvbUZUTDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gRXhpdEZyb21Bbnl0aGluZzsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisj
ZW5kaWYgLy8gRXhpdGluZ0pJVFR5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9j
a0pldHRpc29uaW5nV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qcm9maWxlZENvZGVCbG9ja0pldHRpc29uaW5nV2F0Y2hw
b2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ5LDcgKzQ5LDkgQEAgdm9pZCBQcm9maWxlZENvZGVC
bG9ja0pldHRpc29uaW5nV2F0Y2hwbwogICAgIAogICAgIGlmIChzb3VyY2VCYXNlbGluZUNvZGVC
bG9jaykgewogICAgICAgICBzb3VyY2VCYXNlbGluZUNvZGVCbG9jay0+YWRkRnJlcXVlbnRFeGl0
U2l0ZSgKLSAgICAgICAgICAgIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCwgbV9leGl0S2luZCkpOworICAgICAgICAgICAgREZHOjpGcmVxdWVudEV4aXRT
aXRlKAorICAgICAgICAgICAgICAgIG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2V4aXRL
aW5kLAorICAgICAgICAgICAgICAgIGV4aXRpbmdKSVRUeXBlRm9yKG1fY29kZUJsb2NrLT5qaXRU
eXBlKCkpKSk7CiAgICAgfQogICAgIAogICAgIG1fY29kZUJsb2NrLT5qZXR0aXNvbihDb3VudFJl
b3B0aW1pemF0aW9uKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjI3NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNiw2
ICsxMTM2LDggQEAgcHJpdmF0ZToKICAgICAvLyB3b3JrLWFyb3VuZCBmb3IgdGhlIGZhY3QgdGhh
dCBKU1ZhbHVlTWFwIGNhbid0IGhhbmRsZSAiZW1wdHkiIHZhbHVlcy4KICAgICB1bnNpZ25lZCBt
X2VtcHR5SlNWYWx1ZUluZGV4OwogICAgIAorICAgIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFw
IG1fY2FsbENvbnRleHRNYXA7CisgICAgCiAgICAgSW5zdHJ1Y3Rpb24qIG1fY3VycmVudEluc3Ry
dWN0aW9uOwogfTsKIApAQCAtMTE2NSwxMCArMTE2NywxMyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVDYWxsKAogICAgIAogICAgIENhbGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwog
Ci0gICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChjYWxsVGFyZ2V0KSkKLSAgICAgICAgY2FsbExp
bmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cyhtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGNhbGxU
YXJnZXQpKS5zZXRJc1Byb3ZlZCh0cnVlKTsKLSAgICBlbHNlCi0gICAgICAgIGNhbGxMaW5rU3Rh
dHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLCBtX2N1cnJlbnRJbmRleCk7CisgICAgaWYgKG1fZ3JhcGguaXNDb25zdGFudChj
YWxsVGFyZ2V0KSkgeworICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVzKAor
ICAgICAgICAgICAgbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQ
cm92ZWQodHJ1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbExpbmtTdGF0dXMgPSBDYWxs
TGlua1N0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSwgbV9jYWxsQ29udGV4dE1hcCk7Cisg
ICAgfQogICAgIAogICAgIGlmICghY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAg
ICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVk
IHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKQEAg
LTM2NjAsNiArMzY2NSwxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAgLy8g
U2V0IGR1cmluZyBjb25zdHJ1Y3Rpb24uCiAgICAgQVNTRVJUKCFtX2N1cnJlbnRJbmRleCk7CiAg
ICAgCisgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpCisgICAgICAgICYmICEhbV9n
cmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2sKKyAgICAgICAgJiYgT3B0aW9uczo6ZW5h
YmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcoKSkgeworICAgICAgICBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZURGR1N0YXR1c2VzKAorICAgICAgICAgICAgbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRE
RkdDb2RlQmxvY2suZ2V0KCksIG1fY2FsbENvbnRleHRNYXApOworICAgIH0KKyAgICAKICAgICBp
ZiAobV9jb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpKSB7CiAgICAgICAgIFN5bWJvbFRhYmxlKiBz
eW1ib2xUYWJsZSA9IG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpOwogICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTUsOCArNTUsOCBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlv
bnMoKQogCiAjaWYgRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29t
cGlsZUltcGwoCi0gICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25N
b2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywKKyAgICBWTSYgdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1v
ZGUgbW9kZSwKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJh
bmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrPiBjYWxsYmFjaykKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1w
bGluZ1JlZ2lvbigiREZHIENvbXBpbGF0aW9uIChEcml2ZXIpIik7CkBAIC02Niw2ICs2Niw3IEBA
IHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJs
b2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVK
SVQpOworICAgIEFTU0VSVCghcHJvZmlsZWRERkdDb2RlQmxvY2sgfHwgcHJvZmlsZWRERkdDb2Rl
QmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIAogICAgIGlmICghT3B0
aW9uczo6dXNlREZHSklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQoKSkKICAgICAgICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtOTUsNyArOTYsNyBA
QCBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgfQogICAgIAogICAg
IFJlZlB0cjxQbGFuPiBwbGFuID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBQbGFuKGNvZGVCbG9j
aywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CisgICAg
ICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9zckVu
dHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcykpOwogICAgIAogICAgIGJvb2wgZW5h
YmxlQ29uY3VycmVudEpJVDsKICNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCkBAIC0xMTcsNyAr
MTE4LDcgQEAgc3RhdGljIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2Ug
Ly8gRU5BQkxFKERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwo
Ci0gICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBP
cGVyYW5kczxKU1ZhbHVlPiYsCisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBDb21w
aWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYsCiAgICAgUGFz
c1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+KQogewogICAgIHJldHVybiBDb21w
aWxhdGlvbkZhaWxlZDsKQEAgLTEyNSwxMyArMTI2LDE0IEBAIHN0YXRpYyBDb21waWxhdGlvblJl
c3VsdCBjb21waWxlSW1wbCgKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZSgKLSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21w
aWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAotICAgIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFZNJiB2bSwgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBp
bGF0aW9uTW9kZSBtb2RlLAorICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUGFzc1JlZlB0cjxE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IHBhc3NlZENhbGxiYWNrKQogewogICAgIFJlZlB0
cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gcGFzc2VkQ2FsbGJhY2s7
CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCi0gICAgICAgIHZt
LCBjb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVl
cywgY2FsbGJhY2spOworICAgICAgICB2bSwgY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9j
aywgbW9kZSwgb3NyRW50cnlCeXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzLAorICAgICAg
ICBjYWxsYmFjayk7CiAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKQogICAg
ICAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2
ZXIuaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
cml2ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsOCArNDUsOSBAQCBKU19FWFBP
UlRfUFJJVkFURSB1bnNpZ25lZCBnZXROdW1Db21waWxhCiAvLyBJZiB0aGUgd29ya2xpc3QgaXMg
bm9uLW51bGwsIHdlIGRvIGEgY29uY3VycmVudCBjb21waWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBz
eW5jaHJvbm91cwogLy8gY29tcGlsZS4gRXZlbiBpZiB3ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBp
bGUsIHdlIGNhbGwgdGhlIGNhbGxiYWNrIHdpdGggdGhlIHJlc3VsdC4KIENvbXBpbGF0aW9uUmVz
dWx0IGNvbXBpbGUoCi0gICAgVk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYg
bXVzdEhhbmRsZVZhbHVlcywgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+
KTsKKyAgICBWTSYsIENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ss
IENvbXBpbGF0aW9uTW9kZSwKKyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNv
bnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHJldmlzaW9u
IDE2Mjc0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxERkc6Ok9TUkVu
dHJ5RGF0YT4gb3NyRW50cnk7CiAgICAgU2VnbWVudGVkVmVjdG9yPERGRzo6T1NSRXhpdCwgOD4g
b3NyRXhpdDsKICAgICBWZWN0b3I8REZHOjpTcGVjdWxhdGlvblJlY292ZXJ5PiBzcGVjdWxhdGlv
blJlY292ZXJ5OworICAgIFZlY3Rvcjx1bnNpZ25lZD4gc2xvd1BhdGhDYWxsczsKICAgICBERkc6
OlZhcmlhYmxlRXZlbnRTdHJlYW0gdmFyaWFibGVFdmVudFN0cmVhbTsKICAgICBERkc6Ok1pbmlm
aWVkR3JhcGggbWluaWZpZWRERkc7CiAjaWYgRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTYyNzQ4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMiw2ICsyMzIsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtC
dWZmZXImIGxpbmtCCiAgICAgICAgIGluZm8ucGF0Y2guZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRp
ZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihjYWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9j
YXRpb25PZihtX2luc1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CiAgICAgfQog
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKCFtX2dyYXBoLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXAg
fHwgbV9qaXRDb2RlLT5zbG93UGF0aENhbGxzLnNpemUoKSA+PSBtX2pzQ2FsbHMuc2l6ZSgpKTsK
ICAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXpl
KCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgQ2FsbExpbmtJbmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPmNhbGxMaW5rSW5m
byhpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJ
KHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDYgKzIyMSwxMSBAQCBwdWJsaWM6CiAgICAg
ewogICAgICAgICBtX2lucy5hcHBlbmQocmVjb3JkKTsKICAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgY3VycmVudEpTQ2FsbEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2pz
Q2FsbHMuc2l6ZSgpOworICAgIH0KIAogICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGws
IENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm86
OkNhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlz
aW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDExIEBAIHN0cnVjdCBPU1JFeGl0IDogcHVibGlj
IE9TUkV4aXRCYXNlIHsKICAgICB1bnNpZ25lZCBtX3N0cmVhbUluZGV4OwogICAgIAogICAgIFJl
ZlB0cjxWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRlOworICAg
IAorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBPU1JFeGl0QmFzZTo6Y29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9t
REZHKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShy
ZXZpc2lvbiAxNjI3NDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRC
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKLWJvb2wgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNG
cmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorYm9vbCBP
U1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9j
ayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpCiB7CiAgICAgQ29k
ZUJsb2NrKiBzb3VyY2VQcm9maWxlZENvZGVCbG9jayA9CiAgICAgICAgIGJhc2VsaW5lQ29kZUJs
b2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soCkBAIC00Myw3ICs0Myw3IEBAIGJvb2wg
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWUKICAgICBpZiAoIXNvdXJjZVByb2Zp
bGVkQ29kZUJsb2NrKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHNvdXJjZVBy
b2ZpbGVkQ29kZUJsb2NrLT5hZGRGcmVxdWVudEV4aXRTaXRlKAotICAgICAgICAgICAgRnJlcXVl
bnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tp
bmQpKTsKKyAgICAgICAgRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZS5ieXRlY29kZUluZGV4LCBtX2tpbmQsIGppdFR5cGUpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJh
c2UuaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxNSArNTgsMTYgQEAgc3RydWN0IE9T
UkV4aXRCYXNlIHsKICAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKICAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwogCi0gICAgYm9vbCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorcHJvdGVjdGVk
OgorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKICAgICB7CiAgICAgICAg
IGlmICghbV9jb3VudCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhwcm9maWxlZENvZGVCbG9jayk7
CisgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cocHJv
ZmlsZWRDb2RlQmxvY2ssIGppdFR5cGUpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBib29sIGNv
bnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKTsKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhD
b2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKTsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2
OSw4ICsxMTY5LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJUaWVyVXBOb3coRXhlYwog
CiAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRoZSBjb2RlLgogICAgIGNvbXBpbGUoCi0gICAg
ICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBVSU5U
X01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4oKSwKLSAgICAgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAgICAgKnZtLCBjb2RlQmxvY2st
Pm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIGNvZGVCbG9jaywgRlRMTW9kZSwgVUlOVF9NQVgsCisg
ICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CiB9CiAKIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dl
ck9TUkVudHJ5Tm93KApAQCAtMTI1NSw3ICsxMjU1LDcgQEAgY2hhciogSklUX09QRVJBVElPTiB0
cmlnZ2VyT1NSRW50cnlOb3coCiAgICAgaml0Q29kZS0+cmVjb25zdHJ1Y3QoCiAgICAgICAgIGV4
ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11
c3RIYW5kbGVWYWx1ZXMpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0g
Y29tcGlsZSgKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCks
IEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgKnZtLCBjb2RlQmxv
Y2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlNb2Rl
LCBieXRlY29kZUluZGV4LAogICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVu
dHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CiAgICAg
CiAgICAgLy8gQnV0IHdlIGFsc28gd2FudCB0byB0cmlnZ2VyIGEgcmVwbGFjZW1lbnQgY29tcGls
ZS4gT2YgY291cnNlLCB3ZSBkb24ndCB3YW50IHRvCkBAIC0xMjcyLDggKzEyNzIsOCBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICAgICAgJiYgKCF3b3JrbGlz
dAogICAgICAgICAgICAgfHwgd29ya2xpc3QtPmNvbXBpbGF0aW9uU3RhdGUoa2V5Rm9yUmVwbGFj
ZW1lbnQpID09IFdvcmtsaXN0OjpOb3RLbm93bikpIHsKICAgICAgICAgY29tcGlsZSgKLSAgICAg
ICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBGVExNb2RlLCBV
SU5UX01BWCwgT3BlcmFuZHM8SlNWYWx1ZT4oKSwKLSAgICAgICAgICAgIFRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CisgICAgICAgICAgICAqdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBV
SU5UX01BWCwKKyAgICAgICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+KCksIFRvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CiAgICAgfQogICAgIAogICAg
IGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCwx
MCArMTA4LDEyIEBAIHN0YXRpYyBQcm9maWxlcjo6Q29tcGlsYXRpb25LaW5kIHByb2ZpbGUKIH0K
IAogUGxhbjo6UGxhbigKLSAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29kZUJsb2Nr
LCBDb21waWxhdGlvbk1vZGUgbW9kZSwKLSAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5k
ZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQorICAgIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2ssCisgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwKKyAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVl
cykKICAgICA6IHZtKCpwYXNzZWRDb2RlQmxvY2stPnZtKCkpCiAgICAgLCBjb2RlQmxvY2socGFz
c2VkQ29kZUJsb2NrKQorICAgICwgcHJvZmlsZWRERkdDb2RlQmxvY2socHJvZmlsZWRERkdDb2Rl
QmxvY2spCiAgICAgLCBtb2RlKG1vZGUpCiAgICAgLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgob3Ny
RW50cnlCeXRlY29kZUluZGV4KQogICAgICwgbXVzdEhhbmRsZVZhbHVlcyhtdXN0SGFuZGxlVmFs
dWVzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmgJKHJldmlzaW9uIDE2Mjc0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NSw3ICs1NSw4IEBAIGNsYXNzIExvbmdMaXZlZFN0YXRlOwogCiBzdHJ1Y3QgUGxhbiA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKLSAgICAgICAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwKKyAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1RvQ29t
cGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywKKyAgICAgICAgQ29tcGlsYXRp
b25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9w
ZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKTsKICAgICB+UGxhbigpOwogICAgIApA
QCAtNzAsNiArNzEsNyBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
CiAgICAgCiAgICAgVk0mIHZtOwogICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKKyAg
ICBSZWZQdHI8Q29kZUJsb2NrPiBwcm9maWxlZERGR0NvZGVCbG9jazsKICAgICBDb21waWxhdGlv
bk1vZGUgbW9kZTsKICAgICBjb25zdCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAg
ICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRsZVZhbHVlczsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk1LDYgKzY5NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQp
OwogICAgIAorICAgIGlmIChtX2ppdC5ncmFwaCgpLm1fcGxhbi53aWxsVHJ5VG9UaWVyVXApIHsK
KyAgICAgICAgbV9qaXQuYWRkMzIoCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKAorICAgICAgICAgICAgICAg
IG1faml0LmppdENvZGUoKS0+c2xvd1BhdGhDYWxscy5iZWdpbigpICsgbV9qaXQuY3VycmVudEpT
Q2FsbEluZGV4KCkpKTsKKyAgICB9CisgICAgCiAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQ
UkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlz
aW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM0LDEwICsxNTM0LDQwIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnByZXBhcmVKSVRDb2RlRm9y
VGllclVwKCkKK3sKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxzID0gMDsKKyAgICAKKyAgICBm
b3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgp
LmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgICAgICAgICAgICAgIG51bWJlck9mQ2FsbHMrKzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
bV9qaXQuaml0Q29kZSgpLT5zbG93UGF0aENhbGxzLmZpbGwoMCwgbnVtYmVyT2ZDYWxscyk7Cit9
CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQogewogICAgIGNoZWNrQXJndW1lbnRU
eXBlcygpOwotCisgICAgCisgICAgaWYgKG1faml0LmdyYXBoKCkubV9wbGFuLndpbGxUcnlUb1Rp
ZXJVcCkKKyAgICAgICAgcHJlcGFyZUpJVENvZGVGb3JUaWVyVXAoKTsKKyAgICAKICAgICBBU1NF
UlQoIW1fY3VycmVudE5vZGUpOwogICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVtQmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewog
ICAgICAgICBtX2ppdC5zZXRGb3JCbG9ja0luZGV4KGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYy
NzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkgQEAgcHVibGljOgogICAgIH5TcGVjdWxhdGl2
ZUpJVCgpOwogCiAgICAgYm9vbCBjb21waWxlKCk7CisgICAgCisgICAgdm9pZCBwcmVwYXJlSklU
Q29kZUZvclRpZXJVcCgpOworICAgIAogICAgIHZvaWQgY3JlYXRlT1NSRW50cmllcygpOwogICAg
IHZvaWQgbGlua09TUkVudHJpZXMoTGlua0J1ZmZlciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2Niw2ICsxNjYs
MTEgQEAgc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFzZQogICAgIHVpbnQz
Ml90IG1fc3RhY2ttYXBJRDsKICAgICAKICAgICBDb2RlTG9jYXRpb25KdW1wIGNvZGVMb2NhdGlv
bkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0OworICAgIAorICAgIGJv
b2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUocHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRGcm9tRlRMKTsKKyAg
ICB9CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gMTYyNzQ4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDE0IEBAIHB1Ymxp
YzoKICAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBDb2RlUmVmOwogICAgIHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIENvZGVQdHI7CiAKLSAgICBlbnVtIEpJVFR5cGUgeyBO
b25lLCBIb3N0Q2FsbFRodW5rLCBJbnRlcnByZXRlclRodW5rLCBCYXNlbGluZUpJVCwgREZHSklU
LCBGVExKSVQgfTsKKyAgICBlbnVtIEpJVFR5cGUgOiB1aW50OF90IHsKKyAgICAgICAgTm9uZSwK
KyAgICAgICAgSG9zdENhbGxUaHVuaywKKyAgICAgICAgSW50ZXJwcmV0ZXJUaHVuaywKKyAgICAg
ICAgQmFzZWxpbmVKSVQsCisgICAgICAgIERGR0pJVCwKKyAgICAgICAgRlRMSklUCisgICAgfTsK
ICAgICAKICAgICBzdGF0aWMgSklUVHlwZSBib3R0b21UaWVySklUKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE2
Mjc0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExODYsNyArMTE4Niw3IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGkKICAgICAgICAgfQogCiAgICAgICAgIENvbXBpbGF0aW9uUmVzdWx0
IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm5ld1Jl
cGxhY2VtZW50KCkuZ2V0KCksIERGRzo6REZHTW9kZSwgYnl0ZWNvZGVJbmRleCwKKyAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIDAsIERGRzo6REZHTW9k
ZSwgYnl0ZWNvZGVJbmRleCwKICAgICAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDE2Mjc0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDYg
KzE3Miw4IEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgLyogRGVwdGgg
b2YgaW5saW5lIHN0YWNrLCBzbyAxID0gbm8gaW5saW5pbmcsIDIgPSBvbmUgbGV2ZWwsIGV0Yy4g
Ki8gXAogICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0RlcHRoLCA1KSBcCiAgICAgXAor
ICAgIHYoYm9vbCwgZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcsIHRydWUpIFwKKyAgICBc
CiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaENhc2VMZW5ndGgsIDUw
KSBcCiAgICAgdih1bnNpZ25lZCwgbWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3Ro
LCAyMDAwKSBcCiAgICAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9zaW1wbGUtcG9seXZhcmlhbnQtY2FsbC1pbmxpbmluZy1leGFtcGxlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50
LWNhbGwtaW5saW5pbmctZXhhbXBsZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2ltcGxlLXBvbHl2YXJpYW50LWNhbGwtaW5saW5pbmctZXhh
bXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBmb28oYmF6
KSB7CisgICAgcmV0dXJuIGJhcihiYXopOworfQorCitmdW5jdGlvbiBmdXp6KGJheikgeworICAg
IHJldHVybiBiYXIoYmF6KTsKK30KKworZnVuY3Rpb24gYmFyKGJheikgeworICAgIHJldHVybiBi
YXooKTsKK30KKworZnVuY3Rpb24gYmF6MSgpIHsKKyAgICByZXR1cm4gNDI7Cit9CisKK2Z1bmN0
aW9uIGJhejIoKSB7CisgICAgcmV0dXJuIDI0OworfQorCitub0lubGluZShmb28pOworbm9Jbmxp
bmUoZnV6eik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIg
cmVzdWx0ID0gZm9vKGJhejEpOworICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB2YXIgcmVzdWx0ID0gZnV6eihi
YXoyKTsKKyAgICBpZiAocmVzdWx0ICE9IDI0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222228</attachid>
            <date>2014-01-25 13:02:39 -0800</date>
            <delta_ts>2014-02-13 03:51:44 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>65917</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyNzc2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBA
QAorMjAxNC0wMS0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZG8gcG9seXZhcmlhbnQgQ2FsbC9Db25zdHJ1Y3QgaW5saW5pbmcKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzMzNQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgorICAgICAgICAKKyAgICAgICAgSW1hZ2luZSB0
aGF0IHlvdSBoYXZlIGEgY2FsbCBzdGFjayBsaWtlIGZvbyBjYWxscyBiYXIsIHdoaWNoIGNhbGxz
IGJhei4gTGV0cyBzYXkgdGhhdAorICAgICAgICB0aGVyZSdzIGFub3RoZXIgY2FsbCBzdGFjayB3
aGVyZSBiYXIgY2FsbHMgc29tZXRoaW5nIG90aGVyIHRoYW4gYmF6IGF0IHRoZSBzYW1lCisgICAg
ICAgIGNhbGxzaXRlLCBidXQgd2hlbnZlciBiYXIgaXMgY2FsbGVkIGZyb20gZm9vLCBpdCBhbHdh
eXMgY2FsbHMgYmF6LgorICAgICAgICAKKyAgICAgICAgVGhpcyBiYXItPmJheiBjYWxsc2l0ZSBj
YW4gYmUgc2FpZCB0byBiZSBwb2x5bW9ycGhpYywgYmVjYXVzZSBpdCBtYXkgY2FsbCB0aGluZ3Mg
b3RoZXIKKyAgICAgICAgdGhhbiBiYXogaW4gc29tZSBjYXNlcy4KKyAgICAgICAgCisgICAgICAg
IEJ1dCBpZiB3ZSBjb25kdWN0IGEgcG9seXZhcmlhbnQgYW5hbHlzaXMgLSB0aGF0IGlzLCBvbmUg
dGhhdCBhY2NvdW50cyBmb3IgdGhlIGNhbGwKKyAgICAgICAgc3RhY2sgd2hlbiByZXBvcnRpbmcg
cmVzdWx0cyAtIHRoZW4gdGhpcyBjYWxsIGFwcGVhcnMgbW9ub21vcnBoaWMgd2hlbmV2ZXIgYmFy
IGdldHMKKyAgICAgICAgY2FsbGVkIGZyb20gZm9vLiBBIHBvbHl2YXJpYW50IGFuYWx5c2lzIG9m
IGNhbGxzaXRlcyB3aWxsIHJlcG9ydCByZXN1bHRzIG9mIHRoZSBmb3JtCisgICAgICAgICJ3aGVu
IHN0YXRlbWVudCBTIHJhbiBvbiBhIGNhbGwgc3RhY2sgdGhhdCBpbmNsdWRlZCBmdW5jdGlvbnMg
ZiwgZywgZXRjIHRoZW4gdGhlIHNldAorICAgICAgICBvZiBwb3NzaWJsZSBjYWxsZWVzIGlzIGJv
dW5kZWQgYnkgLi4uIi4gVGhpcyBpcyBpbiBjb250cmFzdCB0byBhIG1vbm92YXJpYW50IGFuYWx5
c2lzCisgICAgICAgIHRoYXQgd2lsbCBhdHRlbXB0IHRvIGNvbnN0cnVjdCBhIGJvdW5kaW5nIHNl
dCBvZiBjYWxsZWVzIHdpdGhvdXQgYWRkaW5nIHRoZSBjYWxsIHN0YWNrCisgICAgICAgIGFzIGEg
Y29udGluZ2VuY3kuCisgICAgICAgIAorICAgICAgICBQcmlvciB0byB0aGlzIHBhdGNoLCBhbGwg
aW5saW5pbmcgZGVjaXNpb25zIHdlcmUgbWFkZSBiYXNlZCBvbiBhIG1vbm92YXJpYW50IGR5bmFt
aWMKKyAgICAgICAgYW5hbHlzaXMuCisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGFsbG93
cyB0aGUgRlRMIHRvIG1ha2UgaXRzIENhbGwvQ29uc3RydWN0IGlubGluaW5nIGRlY2lzaW9ucyBi
YXNlZCBvbiBhCisgICAgICAgIHBvbHl2YXJpYW50IGFuYWx5c2lzLiBUaGF0IGFuYWx5c2lzIGlz
IGNsZXZlcmx5IHNpbXBsZTogd2UganVzdCBhc2sgdGhlIERGRyB0byBkbyB0aGUKKyAgICAgICAg
c2FtZSAiYW5hbHlzaXMiIHRoYXQgdGhlIExMSW50IGFuZCBCYXNlbGluZSBKSVQgcGVyZm9ybS4g
VGhhdCAiYW5hbHlzaXMiIGlzIGp1c3QgYW4KKyAgICAgICAgaW5saW5lIGNhY2hlIHBsdXMgYSBz
bG93LXBhdGggY291bnQuIEJ1dCB0aGUgREZHIGhhcyBwZXJmb3JtZWQgaW5saW5pbmcuIEhlbmNl
IGVhY2gKKyAgICAgICAgY2FsbHNpdGUgdGhhdCB0aGUgREZHIHJlcG9ydHMgaW5mb3JtYXRpb24g
Zm9yIGlzIGFjdHVhbGx5IHNpdHRpbmcgb24gYSBzdGF0aWMgY2FsbAorICAgICAgICBzdGFjay4g
V2hlbiB0aGUgREZHIHJlcG9ydHMgdGhlIHN0YXR1cyBvZiBpdHMgY2FsbCBpbmxpbmUgY2FjaGVz
LCBpdCBjYW4gcmVwb3J0IHRoZQorICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIGEgKHNob3J0KSBz
bmlwcGV0IG9mIGNhbGwgc3RhY2sgYXMgYSBraW5kIG9mIGNvbnRpbmdlbmN5LCBtdWNoIGxpa2Ug
YQorICAgICAgICBwb2x5dmFyaWFudCBhbmFseXNpcyB3b3VsZC4KKyAgICAgICAgCisgICAgICAg
IENvbnNpZGVyIHRoZSBmb28tPmJhci0+YmF6IGV4YW1wbGUuIExldHMgc2F5IHRoYXQgZm9vJ3Mg
Y2FsbCB0byBiYXIgaXMgdHJpdmlhbGx5CisgICAgICAgIG1vbm9tb3JwaGljLCBhbmQgdGhlIERG
RyBpbmxpbmVzIGl0LiBUaGUgREZHIHdvbid0IGJlIGFibGUgdG8gdGhlbiBpbmxpbmUgdGhlIGNh
bGwKKyAgICAgICAgZnJvbSBmb28tPmJhciB0byBiYXogYmVjYXVzZSB3aGVuIHdlIGFzayB0aGUg
QmFzZWxpbmUgSklUIHByb2ZpbGluZyB3aGF0IHRoZSBzdGF0dXMgb2YKKyAgICAgICAgdGhlIGJh
ci0+YmF6IGNhbGwgaXMsIHRoZSBwcm9maWxpbmcgd2lsbCBzYXkgInBvbHltb3JwaGljIi4gVGhh
dCdzIGJlY2F1c2UgdGhhdAorICAgICAgICBwcm9maWxpbmcgZG9lc24ndCBoYXZlIGFueSBjb250
ZXh0IHNlbnNpdGl2aXR5LCBhbmQgc28gaXQgZG9lc24ndCBrbm93IHRoYXQgdGhlIGNhbGwKKyAg
ICAgICAgd291bGQgYmUgbW9ub21vcnBoaWMgaWYgZm9vIHdhcyBiYXIncyBjYWxsZXIuCisgICAg
ICAgIAorICAgICAgICBCdXQsIHdpdGggdGhpcyBwYXRjaCwgb25jZSB3ZSB0aWVyLXVwIGZyb20g
dGhlIERGRyB0byB0aGUgRlRMLCB0aGUgRlRMIHdpbGwgYmUgYWJsZSB0bworICAgICAgICBhc2sg
dGhlIERGRzogImhleSwgd2hhdCBkbyB5b3Uga25vdyBhYm91dCB0aGUgY2FsbHNpdGUgdG8gYmF6
IGluIGZvby0+YmFyPyIgVGhlIERGRworICAgICAgICBoYWQsIGFzIHdlIHNhaWQgYWJvdmUsIGlu
bGluZWQgYmFyIGludG8gZm9vIGFuZCBzbyBpdCBzZWVzIHRoYXQgY2FsbHNpdGUgaW4gaXRzCisg
ICAgICAgIHByb3BlciBjb250ZXh0LiBUaGF0IGNhbGwgaW5saW5lIGNhY2hlIHdvdWxkIGJlIG1v
bm9tb3JwaGljLiBUaGUgRlRMIHdvdWxkIHRoZW4gYmUKKyAgICAgICAgYWJsZSB0byBpbmxpbmUg
YmF6IGludG8gZm9vLT5iYXIuCisgICAgICAgIAorICAgICAgICBUaGlzIHdpbGwgZXZlbnR1YWxs
eSBiZW5lZml0IFY4djcvcmF5dHJhY2UsIGJ1dCB3ZSBzdGlsbCBoYXZlIHNvbWUgbW9yZSB0aGlu
Z3MgdG8gZG8KKyAgICAgICAgYmVmb3JlIHdlIGNhbiBjbG9zZSB0aGUgbG9vcCBvbiB0aGlzLiBS
aWdodCBub3csIHRoZSBjYWxsc2l0ZSBpbiBxdWVzdGlvbiBpcyBub3QgYW4KKyAgICAgICAgaW5s
aW5pbmcgY2FuZGlkYXRlIGJlY2F1c2UgaXQncyBvcF9jYWxsX3ZhcmFyZ3MuIFdlJ2xsIGZpeCB0
aGF0IGV2ZW50dWFsbHkuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZURGR1N0YXR1c2VzKToKKyAgICAgICAgKiBieXRlY29kZS9D
YWxsTGlua1N0YXR1cy5oOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6bWFrZUNsb3N1
cmVDYWxsKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uY3BwOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
Ojppc0FwcHJveGltYXRlbHlFcXVhbFRvKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6YXBw
cm94aW1hdGVIYXNoKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAg
IChKU0M6OkNvZGVPcmlnaW46OkNvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2lu
OjpkZWxldGVkTWFya2VyKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbkFwcHJveGltYXRlSGFz
aDo6aGFzaCk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g6OmVxdWFs
KToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6RXhpdFByb2ZpbGU6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6
Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OnN1YnN1bWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpGcmVxdWVudEV4aXRTaXRlOjpoYXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlOjpqaXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjp3
aXRoSklUVHlwZSk6CisgICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6Omhh
c0V4aXRTaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9FeGl0S2luZC5oOgorICAgICAgICAqIGJ5
dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpleGl0aW5nSklU
VHlwZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmlu
Z1dhdGNocG9pbnQuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlZENvZGVCbG9ja0pldHRpc29u
aW5nV2F0Y2hwb2ludDo6ZmlyZUludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVs
KToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6
aW5saW5lRnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKEpTQzo6REZH
OjppbmxpbmVGdW5jdGlvbkZvckNsb3N1cmVDYWxsQ2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAg
KEpTQzo6REZHOjppbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6aW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwpOgorICAg
ICAgICAqIGRmZy9ERkdDb21tb24uaDoKKyAgICAgICAgKiBkZmcvREZHRHJpdmVyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlSW1wbCk6CisgICAgICAgIChKU0M6OkRGRzo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR0RyaXZlci5oOgorICAgICAgICAqIGRmZy9ERkdGYWlsZWRG
aW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZhaWxlZEZpbmFsaXplcjo6Y29kZVNp
emUpOgorICAgICAgICAqIGRmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaDoKKyAgICAgICAgKiBkZmcv
REZHRmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKiBk
ZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjps
aW5rKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpKSVRDb21waWxlcjo6Y3VycmVudEpTQ2FsbEluZGV4KToKKyAgICAgICAgKiBkZmcvREZHSklU
RmluYWxpemVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmNvZGVTaXpl
KToKKyAgICAgICAgKiBkZmcvREZHSklURmluYWxpemVyLmg6CisgICAgICAgICogZGZnL0RGR09T
UkV4aXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGVTbG93KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAg
ICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxh
bjo6Y29tcGlsZUluVGhyZWFkKToKKyAgICAgICAgKiBkZmcvREZHUGxhbi5oOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnByZXBhcmVKSVRDb2RlRm9yVGllclVwKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFs
aXplci5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpjb2RlU2l6ZSk6Cisg
ICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5oOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0
Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUpOgorICAgICAgICAqIGppdC9KSVRDb2RlLmg6CisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zaW1wbGUtcG9seXZhcmlhbnQtY2FsbC1pbmxpbmluZy1leGFtcGxlLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChmdXp6KToKKyAgICAgICAgKGJhcik6Cisg
ICAgICAgIChiYXoxKToKKyAgICAgICAgKGJhejIpOgorCiAyMDE0LTAxLTI0ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBhbGxvdyBpbmxpbmlu
ZyBvZiBvcF9jYWxsX3ZhcmFyZ3MgY2FsbHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEwLDYg
KzIxMCw3IEBACiAJCTBGMzhCMDE5MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1v
ZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYz
OEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi87IH07CiAJ
CTBGMzhCMDFBMTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMzhCMDE2MTdDRkU3NTUw
MEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjNBQzc1MjE4M0VBMTA0MDAzMjAyOUYgLyogU3Rh
Y2tBbGlnbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0FDNzUxMTgzRUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGM0FDNzU0MTg4RTVF
QzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQUM3NTMxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdK
SVRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzQjNBMUExNTNFNjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0IzQTE3
MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAgKi87IH07CiAJ
CTBGM0IzQTFCMTUzRTY4RjQwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMTgxNTNF
NjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VE
MEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMjQxNTQ0Qzk5MTAwM0VEMEZGIC8qIERG
R0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTYwNCw2ICsxNjA1LDcgQEAK
IAkJMEYzOEIwMTUxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb21waWxhdGlvbk1vZGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0NvbXBpbGF0aW9uTW9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMzhCMDE2MTdDRkU3NTUwMEIxNDREMyAvKiBERkdDb21waWxhdGlvbk1vZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29tcGlsYXRpb25Nb2RlLmg7
IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGM0FDNzUxMTgzRUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja0FsaWdubWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjNBQzc1MzE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJ
VFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZG
IC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
M0IzQTE4MTUzRTY4RUYwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGM0IzQTI0MTU0NEM5OTEwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NGR1Np
bXBsaWZpY2F0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDM0MSw2ICs0MzQzLDcgQEAK
IAkJCQk5NjlBMDc5MjBFRDFEM0FFMDBGMUY2ODEgLyogRXZhbENvZGVDYWNoZS5oICovLAogCQkJ
CTBGNTZBMUQ0MTUwMDFDRjIwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmNwcCAqLywKIAkJ
CQkwRjU2QTFEMTE1MDAwRjMxMDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oICovLAorCQkJ
CTBGM0FDNzUzMTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oICovLAogCQkJCTBG
QjEwNTgyMTY3NTQ4MEMwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgKi8sCiAJCQkJMEZCMTA1ODMx
Njc1NDgwQzAwRjhBQjZFIC8qIEV4aXRLaW5kLmggKi8sCiAJCQkJMEYwQjgzQUExNEJDRjVCOTAw
ODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCAqLywKQEAgLTQ5NjcsNiArNDk3MCw3IEBA
CiAJCQkJQkMxOEM0MjMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzI1RDcwOUMxNkRFOTlGNDAwRkNBNkJDIC8qIEpTTWFuYWdlZFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzAwODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QjFDQzQxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFJlZ2lz
dGVyQXRPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0ODc0QUU0MTVFQkRFNEEwMDJFMzU4
NyAvKiBKU05hbWVTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTT2JqZWN0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTYy
Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKIAorI2luY2x1ZGUgIkNhbGxMaW5rSW5mby5o
IgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNs
dWRlICJMTEludENhbGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNs
dWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKIENhbGxMaW5rU3RhdHVzOjpDYWxsTGlua1N0YXR1
cyhKU1ZhbHVlIHZhbHVlKQogICAgIDogbV9jYWxsVGFyZ2V0KHZhbHVlKQogICAgICwgbV9leGVj
dXRhYmxlKDApCkBAIC0xMjYsMjEgKzEzMCwxMDUgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtT
dGF0dXM6OmNvbXB1dGVGbwogICAgICAgICByZXR1cm4gdGFrZXNTbG93UGF0aCgpOwogICAgIAog
ICAgIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gcHJvZmlsZWRCbG9jay0+Z2V0Q2FsbExp
bmtJbmZvKGJ5dGVjb2RlSW5kZXgpOworICAgIAorICAgIENhbGxMaW5rU3RhdHVzIHJlc3VsdCA9
IGNvbXB1dGVGb3IobG9ja2VyLCBjYWxsTGlua0luZm8pOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChsb2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpOworICAgIAorICAgIGlmIChwcm9maWxlZEJsb2NrLT5oYXNFeGl0U2l0ZShsb2Nr
ZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRGdW5jdGlvbikpKQor
ICAgICAgICByZXN1bHQubWFrZUNsb3N1cmVDYWxsKCk7CisgICAgCisgICAgcmV0dXJuIHJlc3Vs
dDsKKyNlbHNlCisgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKCk7CisjZW5kaWYKK30KKworQ2Fs
bExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IoY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvKQorewogICAgIGlmIChjYWxsTGlu
a0luZm8uc3R1YikKICAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby5z
dHViLT5leGVjdXRhYmxlKCksIGNhbGxMaW5rSW5mby5zdHViLT5zdHJ1Y3R1cmUoKSk7CiAgICAg
CiAgICAgSlNGdW5jdGlvbiogdGFyZ2V0ID0gY2FsbExpbmtJbmZvLmxhc3RTZWVuQ2FsbGVlLmdl
dCgpOwogICAgIGlmICghdGFyZ2V0KQotICAgICAgICByZXR1cm4gY29tcHV0ZUZyb21MTEludChs
b2NrZXIsIHByb2ZpbGVkQmxvY2ssIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICByZXR1cm4gQ2Fs
bExpbmtTdGF0dXMoKTsKICAgICAKLSAgICBpZiAoY2FsbExpbmtJbmZvLmhhc1NlZW5DbG9zdXJl
Ci0gICAgICAgIHx8IHByb2ZpbGVkQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZEZ1bmN0aW9uKSkpCisgICAgaWYgKGNhbGxM
aW5rSW5mby5oYXNTZWVuQ2xvc3VyZSkKICAgICAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKHRh
cmdldC0+ZXhlY3V0YWJsZSgpLCB0YXJnZXQtPnN0cnVjdHVyZSgpKTsKIAogICAgIHJldHVybiBD
YWxsTGlua1N0YXR1cyh0YXJnZXQpOwotI2Vsc2UKLSAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
KTsKLSNlbmRpZgorfQorCit2b2lkIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3RhdHVzZXMo
CisgICAgQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENhbGxMaW5rU3RhdHVzOjpDb250ZXh0TWFw
JiBtYXApCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgUkVMRUFTRV9BU1NFUlQoZGZnQ29k
ZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrID0gZGZnQ29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIERGRzo6
SklUQ29kZSogaml0Q29kZSA9IGRmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKKyAgICBS
RUxFQVNFX0FTU0VSVChkZmdDb2RlQmxvY2stPm51bWJlck9mQ2FsbExpbmtJbmZvcygpIDw9IGpp
dENvZGUtPnNsb3dQYXRoQ2FsbHMuc2l6ZSgpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0g
ZGZnQ29kZUJsb2NrLT5udW1iZXJPZkNhbGxMaW5rSW5mb3MoKTsgaS0tOykgeworICAgICAgICBD
YWxsTGlua0luZm8mIGluZm8gPSBkZmdDb2RlQmxvY2stPmNhbGxMaW5rSW5mbyhpKTsKKyAgICAg
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gaW5mby5jb2RlT3JpZ2luOworICAgICAgICAKKyAg
ICAgICAgYm9vbCB0YWtlU2xvd1BhdGg7CisgICAgICAgIGJvb2wgYmFkRnVuY3Rpb247CisgICAg
ICAgIAorICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYWQgYWxyZWFkeSBwcmV2aW91c2x5IG1hZGUg
YSB0ZXJyaWJsZSBtaXN0YWtlIGluIHRoZSBGVEwgZm9yIHRoaXMKKyAgICAgICAgLy8gY29kZSBv
cmlnaW4uIE5vdGUgdGhhdCB0aGlzIGlzIGFwcHJveGltYXRlIGJlY2F1c2Ugd2UgY291bGQgaGF2
ZSBhIG1vbm92YXJpYW50CisgICAgICAgIC8vIGlubGluZSBpbiB0aGUgRlRMIHRoYXQgZW5kZWQg
dXAgZmFpbGluZy4gV2Ugc2hvdWxkIGZpeCB0aGF0IGF0IHNvbWUgcG9pbnQgYnkKKyAgICAgICAg
Ly8gaGF2aW5nIGRhdGEgc3RydWN0dXJlcyB0byB0cmFjayB0aGUgY29udGV4dCBvZiBmcmVxdWVu
dCBleGl0cy4gVGhpcyBpcyBjdXJyZW50bHkKKyAgICAgICAgLy8gY2hhbGxlbmdpbmcgYmVjYXVz
ZSBpdCB3b3VsZCByZXF1aXJlIGNyZWF0aW5nIGEgQ29kZU9yaWdpbi1iYXNlZCBkYXRhYmFzZSBp
bgorICAgICAgICAvLyBiYXNlbGluZSBDb2RlQmxvY2tzLCBidXQgdGhvc2UgQ29kZUJsb2NrcyBk
b24ndCByZWFsbHkgaGF2ZSBhIHBsYWNlIHRvIHB1dCB0aGUKKyAgICAgICAgLy8gSW5saW5lQ2Fs
bEZyYW1lcy4KKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoYmFzZWxpbmVDb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGN1
cnJlbnRCYXNlbGluZSA9CisgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jayk7Cisg
ICAgICAgICAgICB0YWtlU2xvd1BhdGggPQorICAgICAgICAgICAgICAgIGN1cnJlbnRCYXNlbGlu
ZS0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4LCBCYWRDYWNoZSwgRXhpdEZyb21GVEwpKQorICAgICAgICAgICAgICAgIHx8
IGN1cnJlbnRCYXNlbGluZS0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhpdFNp
dGUoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBCYWRDYWNoZVdhdGNocG9pbnQsIEV4aXRGcm9t
RlRMKSkKKyAgICAgICAgICAgICAgICB8fCBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKGxv
Y2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFk
RXhlY3V0YWJsZSwgRXhpdEZyb21GVEwpKTsKKyAgICAgICAgICAgIGJhZEZ1bmN0aW9uID0KKyAg
ICAgICAgICAgICAgICBjdXJyZW50QmFzZWxpbmUtPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpG
cmVxdWVudEV4aXRTaXRlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQmFkRnVuY3Rpb24sIEV4
aXRGcm9tRlRMKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGRmZ0NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgICAgIGlmICh0YWtlU2xvd1BhdGggfHwgaml0Q29kZS0+c2xvd1BhdGhDYWxsc1tpXSA+PSBP
cHRpb25zOjpjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCgpKQorICAgICAgICAgICAgICAg
IG1hcC5hZGQoaW5mby5jb2RlT3JpZ2luLCB0YWtlc1Nsb3dQYXRoKCkpOworICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgQ2FsbExpbmtTdGF0dXMgc3RhdHVzID0gY29tcHV0ZUZv
cihsb2NrZXIsIGluZm8pOworICAgICAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmFkRnVuY3Rpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXMubWFrZUNsb3N1cmVDYWxsKCk7CisgICAgICAgICAgICAgICAgICAgIG1hcC5h
ZGQoaW5mby5jb2RlT3JpZ2luLCBzdGF0dXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKyAgICAK
KyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkYXRhTG9nKCJDb250ZXh0IG1hcDpcbiIpOwor
ICAgICAgICBDb250ZXh0TWFwOjppdGVyYXRvciBpdGVyID0gbWFwLmJlZ2luKCk7CisgICAgICAg
IENvbnRleHRNYXA6Oml0ZXJhdG9yIGVuZCA9IG1hcC5lbmQoKTsKKyAgICAgICAgZm9yICg7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBpdGVyLT5r
ZXksICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgIiwgaXRlci0+dmFsdWUs
ICJcbiIpOworICAgICAgICB9CisgICAgfQorfQorCitDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZvcigKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIENvZGVPcmln
aW4gY29kZU9yaWdpbiwgY29uc3QgQ2FsbExpbmtTdGF0dXM6OkNvbnRleHRNYXAmIG1hcCkKK3sK
KyAgICBDb250ZXh0TWFwOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbWFwLmZpbmQoY29kZU9yaWdp
bik7CisgICAgaWYgKGl0ZXIgIT0gbWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+dmFs
dWU7CisgICAgCisgICAgcmV0dXJuIGNvbXB1dGVGb3IocHJvZmlsZWRCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KTsKIH0KIAogdm9pZCBDYWxsTGlua1N0YXR1czo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NhbGxMaW5rU3RhdHVzLmgJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2
ICsyNiw3IEBACiAjaWZuZGVmIENhbGxMaW5rU3RhdHVzX2gKICNkZWZpbmUgQ2FsbExpbmtTdGF0
dXNfaAogCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCIKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIklu
dHJpbnNpYy5oIgpAQCAtMzgsNiArMzksNyBAQCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKIGNsYXNz
IEludGVybmFsRnVuY3Rpb247CiBjbGFzcyBKU0Z1bmN0aW9uOwogY2xhc3MgU3RydWN0dXJlOwor
c3RydWN0IENhbGxMaW5rSW5mbzsKIAogY2xhc3MgQ2FsbExpbmtTdGF0dXMgewogcHVibGljOgpA
QCAtNzUsNiArNzcsMjAgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRm9yKENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOwogICAgIAor
ICAgIC8vIENvbXB1dGVzIHRoZSBzdGF0dXMgYXNzdW1pbmcgdGhhdCB3ZSBuZXZlciB0b29rIHNs
b3cgcGF0aCBhbmQgbmV2ZXIgcHJldmlvdXNseQorICAgIC8vIGV4aXRlZC4KKyAgICBzdGF0aWMg
Q2FsbExpbmtTdGF0dXMgY29tcHV0ZUZvcihjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ2Fs
bExpbmtJbmZvJik7CisgICAgCisgICAgdHlwZWRlZiBIYXNoTWFwPENvZGVPcmlnaW4sIENhbGxM
aW5rU3RhdHVzLCBDb2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBDb250ZXh0TWFwOworICAgIAor
ICAgIC8vIENvbXB1dGVzIGFsbCBvZiB0aGUgc3RhdHVzZXMgb2YgdGhlIERGRyBjb2RlIGJsb2Nr
LiBEb2Vzbid0IGluY2x1ZGUgc3RhdHVzZXMgdGhhdCBoYWQKKyAgICAvLyBubyBpbmZvcm1hdGlv
bi4gQ3VycmVudGx5IHdlIHVzZSB0aGlzIHdoZW4gY29tcGlsaW5nIEZUTCBjb2RlLCB0byBlbmFi
bGUgcG9seXZhcmlhbnQKKyAgICAvLyBpbmxpbmluZy4KKyAgICBzdGF0aWMgdm9pZCBjb21wdXRl
REZHU3RhdHVzZXMoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvbnRleHRNYXAmKTsKKyAgICAK
KyAgICAvLyBIZWxwZXIgdGhhdCBmaXJzdCBjb25zdWx0cyB0aGUgQ29udGV4dE1hcCBhbmQgdGhl
biBkb2VzIGNvbXB1dGVGb3IoKS4KKyAgICBzdGF0aWMgQ2FsbExpbmtTdGF0dXMgY29tcHV0ZUZv
cihDb2RlQmxvY2sqLCBDb2RlT3JpZ2luLCBjb25zdCBDb250ZXh0TWFwJik7CisgICAgCiAgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldCB8fCBtX2V4ZWN1dGFibGUg
fHwgbV9jb3VsZFRha2VTbG93UGF0aDsgfQogICAgIAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29u
c3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KQEAgLTk0LDYgKzExMCwxMyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQg
bWFrZUNsb3N1cmVDYWxsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9pc1Byb3ZlZCk7Cisg
ICAgICAgIC8vIFR1cm4gdGhpcyBpbnRvIGEgY2xvc3VyZSBjYWxsLgorICAgICAgICBtX2NhbGxU
YXJnZXQgPSBKU1ZhbHVlKCk7CisgICAgfQorICAgIAogICAgIHN0YXRpYyBDYWxsTGlua1N0YXR1
cyBjb21wdXRlRnJvbUxMSW50KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KTsKICAgICAKICAgICBKU1ZhbHVlIG1fY2FsbFRhcmdl
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDggKzQ4OSw4IEBAIHB1YmxpYzoKICAgICBSYXJl
Q2FzZVByb2ZpbGUqIHNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQg
Ynl0ZWNvZGVPZmZzZXQpCiAgICAgewogICAgICAgICByZXR1cm4gdHJ5QmluYXJ5U2VhcmNoPFJh
cmVDYXNlUHJvZmlsZSwgaW50PigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zcGVjaWFsRmFzdENhc2VQcm9maWxlcywgbV9zcGVjaWFsRmFz
dENhc2VQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRl
Y29kZU9mZnNldCk7CisgICAgICAgICAgICBtX3NwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLCBtX3Nw
ZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgICAg
ICBnZXRSYXJlQ2FzZVByb2ZpbGVCeXRlY29kZU9mZnNldCk7CiAgICAgfQogCiAgICAgYm9vbCBs
aWtlbHlUb1Rha2VTcGVjaWFsRmFzdENhc2UoaW50IGJ5dGVjb2RlT2Zmc2V0KQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24g
MTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2NCBAQCB1bnNpZ25lZCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGlubGluZURlcHRoRm9yQ2FsbEZyYW1l
KGlubGluZUNhbGxGcmFtZSk7CiB9CisKK2Jvb2wgQ29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5
RXF1YWxUbyhjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKK3sKKyAgICBDb2RlT3JpZ2lu
IGEgPSAqdGhpczsKKyAgICBDb2RlT3JpZ2luIGIgPSBvdGhlcjsKKworICAgIGlmICghYS5pc1Nl
dCgpKQorICAgICAgICByZXR1cm4gIWIuaXNTZXQoKTsKKyAgICBpZiAoIWIuaXNTZXQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChhLmlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkpCisgICAgICAgIHJldHVybiBiLmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7CisgICAg
aWYgKGIuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgQVNTRVJUKGEuaXNTZXQoKSk7CisgICAgICAg
IEFTU0VSVChiLmlzU2V0KCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGEuYnl0ZWNvZGVJbmRl
eCAhPSBiLmJ5dGVjb2RlSW5kZXgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBpZiAoKCEhYS5pbmxpbmVDYWxsRnJhbWUpICE9ICghIWIuaW5saW5lQ2FsbEZy
YW1lKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
YS5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChhLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZSAhPSBiLmlubGluZUNhbGxG
cmFtZS0+ZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGEgPSBhLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBiID0gYi5pbmxp
bmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIENvZGVPcmlnaW46OmFw
cHJveGltYXRlSGFzaCgpIGNvbnN0Cit7CisgICAgaWYgKCFpc1NldCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAoaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
IDE7CiAgICAgCisgICAgdW5zaWduZWQgcmVzdWx0ID0gMjsKKyAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4gPSAqdGhpczsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJlc3VsdCArPSBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXg7CisgICAgICAgIAorICAgICAgICBpZiAoIWNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlNDZWxsKj46Omhhc2goY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgY29kZU9y
aWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgfQorfQorCiBW
ZWN0b3I8Q29kZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhY2soKSBjb25zdAogewogICAg
IFZlY3RvcjxDb2RlT3JpZ2luPiByZXN1bHQoaW5saW5lRGVwdGgoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE2Mjc3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgIAogICAgIENv
ZGVPcmlnaW4oV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQogICAgICAgICA6IGJ5dGVj
b2RlSW5kZXgoaW52YWxpZEJ5dGVjb2RlSW5kZXgpCi0gICAgICAgICwgaW5saW5lQ2FsbEZyYW1l
KGJpdHdpc2VfY2FzdDxJbmxpbmVDYWxsRnJhbWUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
KSkKKyAgICAgICAgLCBpbmxpbmVDYWxsRnJhbWUoZGVsZXRlZE1hcmtlcigpKQogICAgIHsKICAg
ICB9CiAgICAgCkBAIC05NywxMSArOTcsMjMgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IENvZGVPcmlnaW4mIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQogICAgIAorICAgIC8vIFRoaXMgY2hlY2tzIGlmIHRoZSB0d28gY29kZSBv
cmlnaW5zIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgc3RhY2sgdHJhY2Ugc25pcHBldHMsCisgICAg
Ly8gYnV0IGlnbm9yZSB3aGV0aGVyIHRoZSBJbmxpbmVDYWxsRnJhbWUncyBhcmUgaWRlbnRpY2Fs
LgorICAgIGJvb2wgaXNBcHByb3hpbWF0ZWx5RXF1YWxUbyhjb25zdCBDb2RlT3JpZ2luJiBvdGhl
cikgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgYXBwcm94aW1hdGVIYXNoKCkgY29uc3Q7Cisg
ICAgCiAgICAgLy8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGlu
dGVuZGVkIGZvciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5l
U3RhY2soKSBjb25zdDsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
ICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworCitwcml2YXRlOgorICAgIHN0YXRpYyBJbmxpbmVDYWxsRnJhbWUqIGRlbGV0ZWRNYXJrZXIo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxJbmxpbmVDYWxsRnJhbWUqPihz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpKTsKKyAgICB9CiB9OwogCiBzdHJ1Y3QgSW5saW5lQ2Fs
bEZyYW1lIHsKQEAgLTE4NSw2ICsxOTcsMTIgQEAgc3RydWN0IENvZGVPcmlnaW5IYXNoIHsKICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiB9OwogCitzdHJ1Y3QgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQ29kZU9yaWdpbiYga2V5KSB7IHJldHVybiBrZXkuYXBwcm94aW1h
dGVIYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBDb2RlT3JpZ2luJiBhLCBj
b25zdCBDb2RlT3JpZ2luJiBiKSB7IHJldHVybiBhLmlzQXBwcm94aW1hdGVseUVxdWFsVG8oYik7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5j
cHAJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
RkdFeGl0UHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAgRXhpdFBy
b2ZpbGU6On5FeGl0UHJvZmlsZSgpIHsgfQogCiBib29sIEV4aXRQcm9maWxlOjphZGQoY29uc3Qg
Q29uY3VycmVudEpJVExvY2tlciYsIGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpCiB7Cisg
ICAgQVNTRVJUKHNpdGUuaml0VHlwZSgpICE9IEV4aXRGcm9tQW55dGhpbmcpOworICAgIAogICAg
IC8vIElmIHdlJ3ZlIG5ldmVyIHNlZW4gYW55IGZyZXF1ZW50IGV4aXRzIHRoZW4gY3JlYXRlIHRo
ZSBsaXN0IGFuZCBwdXQgdGhpcyBzaXRlCiAgICAgLy8gaW50byBpdC4KICAgICBpZiAoIW1fZnJl
cXVlbnRFeGl0U2l0ZXMpIHsKQEAgLTc4LDcgKzgwLDcgQEAgYm9vbCBFeGl0UHJvZmlsZTo6aGFz
RXhpdFNpdGUoY29uc3QgQ29uYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyBpLS07KSB7Ci0gICAg
ICAgIGlmIChtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKSA9PSBzaXRlKQorICAgICAgICBpZiAo
c2l0ZS5zdWJzdW1lcyhtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJKHJldmlzaW9uIDE2Mjc3
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
bmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1ZGUgIkV4aXRLaW5kLmgiCisjaW5j
bHVkZSAiRXhpdGluZ0pJVFR5cGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CkBAIC0zOSwxOCArNDAs
MjIgQEAgcHVibGljOgogICAgIEZyZXF1ZW50RXhpdFNpdGUoKQogICAgICAgICA6IG1fYnl0ZWNv
ZGVPZmZzZXQoMCkgLy8gMCA9IGVtcHR5IHZhbHVlCiAgICAgICAgICwgbV9raW5kKEV4aXRLaW5k
VW5zZXQpCisgICAgICAgICwgbV9qaXRUeXBlKEV4aXRGcm9tQW55dGhpbmcpCiAgICAgewogICAg
IH0KICAgICAKICAgICBGcmVxdWVudEV4aXRTaXRlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDEpIC8vIDEgPSBkZWxldGVkIHZhbHVl
CiAgICAgICAgICwgbV9raW5kKEV4aXRLaW5kVW5zZXQpCisgICAgICAgICwgbV9qaXRUeXBlKEV4
aXRGcm9tQW55dGhpbmcpCiAgICAgewogICAgIH0KICAgICAKLSAgICBleHBsaWNpdCBGcmVxdWVu
dEV4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBFeGl0S2luZCBraW5kKQorICAgIGV4
cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUoCisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
LCBFeGl0S2luZCBraW5kLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlID0gRXhpdEZyb21Bbnl0aGlu
ZykKICAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAs
IG1fa2luZChraW5kKQorICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgIHsKICAgICAg
ICAgaWYgKG1fa2luZCA9PSBBcmd1bWVudHNFc2NhcGVkKSB7CiAgICAgICAgICAgICAvLyBDb3Vu
dCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUg
YmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwpAQCAtNjEsOSArNjYsMTAgQEAgcHVibGljOgog
ICAgIAogICAgIC8vIFVzZSB0aGlzIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIGZvciB0aGUgZXhp
dCBzaXRlIHRvIGJlIGNvdW50ZWQgZ2xvYmFsbHkgd2l0aGluIGl0cwogICAgIC8vIGNvZGUgYmxv
Y2suCi0gICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZShFeGl0S2luZCBraW5kKQorICAgIGV4
cGxpY2l0IEZyZXF1ZW50RXhpdFNpdGUoRXhpdEtpbmQga2luZCwgRXhpdGluZ0pJVFR5cGUgaml0
VHlwZSA9IEV4aXRGcm9tQW55dGhpbmcpCiAgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKQog
ICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAg
IHsKICAgICB9CiAgICAgCkBAIC03NSwxNiArODEsMzYgQEAgcHVibGljOgogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90aGVyLm1fYnl0ZWNvZGVPZmZzZXQKLSAg
ICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQ7CisgICAgICAgICAgICAmJiBtX2tp
bmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2ppdFR5cGUgPT0gb3RoZXIubV9q
aXRUeXBlOworICAgIH0KKyAgICAKKyAgICBib29sIHN1YnN1bWVzKGNvbnN0IEZyZXF1ZW50RXhp
dFNpdGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYnl0ZWNvZGVPZmZzZXQg
IT0gb3RoZXIubV9ieXRlY29kZU9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKG1fa2luZCAhPSBvdGhlci5tX2tpbmQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmIChtX2ppdFR5cGUgPT0gRXhpdEZyb21Bbnl0aGluZykKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9qaXRUeXBlID09IG90aGVyLm1faml0
VHlwZTsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9raW5kOworICAg
ICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9raW5kICsgbV9q
aXRUeXBlICogNzsKICAgICB9CiAgICAgCiAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0OyB9CiAgICAgRXhpdEtpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIEV4aXRpbmdKSVRUeXBlIGppdFR5cGUoKSBjb25z
dCB7IHJldHVybiBtX2ppdFR5cGU7IH0KKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIHdpdGhK
SVRUeXBlKEV4aXRpbmdKSVRUeXBlIGppdFR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBGcmVx
dWVudEV4aXRTaXRlIHJlc3VsdCA9ICp0aGlzOworICAgICAgICByZXN1bHQubV9qaXRUeXBlID0g
aml0VHlwZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKICAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKICAgICB7CkBAIC05NCw2ICsxMjAsNyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CiAgICAgRXhpdEtp
bmQgbV9raW5kOworICAgIEV4aXRpbmdKSVRUeXBlIG1faml0VHlwZTsKIH07CiAKIHN0cnVjdCBG
cmVxdWVudEV4aXRTaXRlSGFzaCB7CkBAIC0xNjYsNiArMTkzLDEwIEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKICAg
ICB7CisgICAgICAgIGlmIChzaXRlLmppdFR5cGUoKSA9PSBFeGl0RnJvbUFueXRoaW5nKSB7Cisg
ICAgICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoc2l0ZS53aXRoSklUVHlwZShFeGl0RnJvbURG
RykpCisgICAgICAgICAgICAgICAgfHwgaGFzRXhpdFNpdGUoc2l0ZS53aXRoSklUVHlwZShFeGl0
RnJvbUZUTCkpOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2ZyZXF1ZW50RXhpdFNpdGVz
LmZpbmQoc2l0ZSkgIT0gbV9mcmVxdWVudEV4aXRTaXRlcy5lbmQoKTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdEtpbmQuaAkocmV2aXNpb24g
MTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRLaW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWVudW0g
RXhpdEtpbmQgeworZW51bSBFeGl0S2luZCA6IHVpbnQ4X3QgewogICAgIEV4aXRLaW5kVW5zZXQs
CiAgICAgQmFkVHlwZSwgLy8gV2UgZXhpdGVkIGJlY2F1c2UgYSB0eXBlIHByZWRpY3Rpb24gd2Fz
IHdyb25nLgogICAgIEJhZEZ1bmN0aW9uLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBtYWRlIGFu
IGluY29ycmVjdCBhc3N1bXB0aW9uIGFib3V0IHdoYXQgZnVuY3Rpb24gd2Ugd291bGQgc2VlLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V4aXRpbmdKSVRUeXBl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXhpdGlu
Z0pJVFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRXhpdGluZ0pJVFR5cGVf
aAorI2RlZmluZSBFeGl0aW5nSklUVHlwZV9oCisKKyNpbmNsdWRlICJKSVRDb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitlbnVtIEV4aXRpbmdKSVRUeXBlIDogdWludDhfdCB7CisgICAgRXhp
dEZyb21Bbnl0aGluZywKKyAgICBFeGl0RnJvbURGRywKKyAgICBFeGl0RnJvbUZUTAorfTsKKwor
aW5saW5lIEV4aXRpbmdKSVRUeXBlIGV4aXRpbmdKSVRUeXBlRm9yKEpJVENvZGU6OkpJVFR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJVDoK
KyAgICAgICAgcmV0dXJuIEV4aXRGcm9tREZHOworICAgIGNhc2UgSklUQ29kZTo6RlRMSklUOgor
ICAgICAgICByZXR1cm4gRXhpdEZyb21GVEw7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEV4aXRGcm9tQW55dGhpbmc7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEV4aXRpbmdKSVRU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Byb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9p
bnQuY3BwCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC00OSw3ICs0OSw5IEBAIHZvaWQgUHJvZmlsZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNo
cG8KICAgICAKICAgICBpZiAoc291cmNlQmFzZWxpbmVDb2RlQmxvY2spIHsKICAgICAgICAgc291
cmNlQmFzZWxpbmVDb2RlQmxvY2stPmFkZEZyZXF1ZW50RXhpdFNpdGUoCi0gICAgICAgICAgICBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1fZXhpdEtp
bmQpKTsKKyAgICAgICAgICAgIERGRzo6RnJlcXVlbnRFeGl0U2l0ZSgKKyAgICAgICAgICAgICAg
ICBtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9leGl0S2luZCwKKyAgICAgICAgICAgICAg
ICBleGl0aW5nSklUVHlwZUZvcihtX2NvZGVCbG9jay0+aml0VHlwZSgpKSkpOwogICAgIH0KICAg
ICAKICAgICBtX2NvZGVCbG9jay0+amV0dGlzb24oQ291bnRSZW9wdGltaXphdGlvbik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzYsNiArMTEzNiw4IEBAIHByaXZhdGU6
CiAgICAgLy8gd29yay1hcm91bmQgZm9yIHRoZSBmYWN0IHRoYXQgSlNWYWx1ZU1hcCBjYW4ndCBo
YW5kbGUgImVtcHR5IiB2YWx1ZXMuCiAgICAgdW5zaWduZWQgbV9lbXB0eUpTVmFsdWVJbmRleDsK
ICAgICAKKyAgICBDYWxsTGlua1N0YXR1czo6Q29udGV4dE1hcCBtX2NhbGxDb250ZXh0TWFwOwor
ICAgIAogICAgIEluc3RydWN0aW9uKiBtX2N1cnJlbnRJbnN0cnVjdGlvbjsKIH07CiAKQEAgLTEx
NjUsMTAgKzExNjcsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAK
ICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1czsKIAotICAgIGlmIChtX2dyYXBoLmlz
Q29uc3RhbnQoY2FsbFRhcmdldCkpCi0gICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtT
dGF0dXMobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChjYWxsVGFyZ2V0KSkuc2V0SXNQcm92ZWQo
dHJ1ZSk7Ci0gICAgZWxzZQotICAgICAgICBjYWxsTGlua1N0YXR1cyA9IENhbGxMaW5rU3RhdHVz
Ojpjb21wdXRlRm9yKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9jdXJyZW50
SW5kZXgpOworICAgIGlmIChtX2dyYXBoLmlzQ29uc3RhbnQoY2FsbFRhcmdldCkpIHsKKyAgICAg
ICAgY2FsbExpbmtTdGF0dXMgPSBDYWxsTGlua1N0YXR1cygKKyAgICAgICAgICAgIG1fZ3JhcGgu
dmFsdWVPZkpTQ29uc3RhbnQoY2FsbFRhcmdldCkpLnNldElzUHJvdmVkKHRydWUpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGNhbGxMaW5rU3RhdHVzID0gQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVG
b3IoCisgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIGN1cnJl
bnRDb2RlT3JpZ2luKCksIG1fY2FsbENvbnRleHRNYXApOworICAgIH0KICAgICAKICAgICBpZiAo
IWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAgICAgICAgLy8gT2RkbHksIHRoaXMg
Y29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRlZCB3aXRoIGNhbGxzIHRoYXQgYmVo
YXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CkBAIC0xMjUxLDMwICsxMjU2LDMyIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b20KIAogYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRP
cGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rl
ck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zm
c2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CisgICAgc3RhdGljIGNvbnN0IGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworICAgIAorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyBpbmxpbmluZyAiLCBjYWxsTGlua1N0YXR1cywgIiBpbnRvICIsIGN1
cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOworICAgIAogICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5
IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPwotICAgIGlm
ICghY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKQorICAgIGlmICghY2FsbExpbmtTdGF0dXMu
ZXhlY3V0YWJsZSgpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEZhaWxpbmcgYmVjYXVzZSB0aGVyZSBpcyBubyBleGVjdXRhYmxlLlxuIik7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpLT5p
c0hvc3RGdW5jdGlvbigpKQorICAgIH0KKyAgICBpZiAoY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJs
ZSgpLT5pc0hvc3RGdW5jdGlvbigpKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSBpdCdzIGEgaG9zdCBmdW5jdGlvbi5cbiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIAogICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjYWxsTGlua1N0
YXR1cy5leGVjdXRhYmxlKCkpOwogICAgIAogICAgIC8vIERvZXMgdGhlIG51bWJlciBvZiBhcmd1
bWVudHMgd2UncmUgcGFzc2luZyBtYXRjaCB0aGUgYXJpdHkgb2YgdGhlIHRhcmdldD8gV2UgY3Vy
cmVudGx5CiAgICAgLy8gaW5saW5lIG9ubHkgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFz
c2VkIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgbnVtYmVyCiAgICAgLy8gYXJndW1l
bnRzIGV4cGVjdGVkLgotICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFt
ZXRlckNvdW50KCkpICsgMSA+IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorICAgIGlmIChz
dGF0aWNfY2FzdDxpbnQ+KGV4ZWN1dGFibGUtPnBhcmFtZXRlckNvdW50KCkpICsgMSA+IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSBvZiBhcml0eSBtaXNtYXRjaC5cbiIpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gSGF2ZSB3ZSBleGNlZWRlZCBpbmxp
bmUgc3RhY2sgZGVwdGgsIG9yIGFyZSB3ZSB0cnlpbmcgdG8gaW5saW5lIGEgcmVjdXJzaXZlIGNh
bGw/Ci0gICAgLy8gSWYgZWl0aGVyIG9mIHRoZXNlIGFyZSBkZXRlY3RlZCwgdGhlbiBkb24ndCBp
bmxpbmUuCi0gICAgdW5zaWduZWQgZGVwdGggPSAwOwotICAgIGZvciAoSW5saW5lU3RhY2tFbnRy
eSogZW50cnkgPSBtX2lubGluZVN0YWNrVG9wOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bV9jYWxs
ZXIpIHsKLSAgICAgICAgKytkZXB0aDsKLSAgICAgICAgaWYgKGRlcHRoID49IE9wdGlvbnM6Om1h
eGltdW1JbmxpbmluZ0RlcHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIERlcHRo
IGV4Y2VlZGVkLgotICAgICAgICAKLSAgICAgICAgaWYgKGVudHJ5LT5leGVjdXRhYmxlKCkgPT0g
ZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gUmVjdXJzaW9uIGRldGVj
dGVkLgogICAgIH0KICAgICAKICAgICAvLyBEbyB3ZSBoYXZlIGEgY29kZSBibG9jaywgYW5kIGRv
ZXMgdGhlIGNvZGUgYmxvY2sncyBzaXplIG1hdGNoIHRoZSBoZXVyaXN0aWNzL3JlcXVpcmVtZW50
cyBmb3IKQEAgLTEyODQsMTAgKzEyOTEsNjAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcoTm9kZQogICAgIC8vIGdsb2JhbCBmdW5jdGlvbiwgd2hlcmUgd2F0Y2hwb2ludGlu
ZyBnaXZlcyB1cyBzdGF0aWMgaW5mb3JtYXRpb24uIE92ZXJhbGwsIGl0J3MgYSByYXJlIGNhc2UK
ICAgICAvLyBiZWNhdXNlIHdlIGV4cGVjdCB0aGF0IGFueSBob3QgY2FsbGVlcyB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiBjb21waWxlZC4KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1
dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGtpbmQpOwotICAgIGlmICghY29kZUJsb2NrKQor
ICAgIGlmICghY29kZUJsb2NrKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSBubyBjb2RlIGJsb2NrIGF2YWlsYWJsZS5cbiIp
OwogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFjYW5JbmxpbmVGdW5jdGlvbkZvcihj
b2RlQmxvY2ssIGtpbmQsIGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkpCisgICAgfQor
ICAgIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwgPSBpbmxpbmVGdW5jdGlvbkZvckNh
cGFiaWxpdHlMZXZlbCgKKyAgICAgICAgY29kZUJsb2NrLCBraW5kLCBjYWxsTGlua1N0YXR1cy5p
c0Nsb3N1cmVDYWxsKCkpOworICAgIGlmICghY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbCkpIHsK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCIgICAgRmFpbGluZyBi
ZWNhdXNlIHRoZSBmdW5jdGlvbiBpcyBub3QgaW5saW5lYWJsZS5cbiIpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiB0aGlzIHNob3VsZCBiZSBiZXR0
ZXIgYXQgcHJlZGljdGluZyBob3cgbXVjaCBibG9hdCB3ZSB3aWxsIGludHJvZHVjZSBieSBpbmxp
bmluZworICAgIC8vIHRoaXMgZnVuY3Rpb24uCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzYyNworICAgIAorICAgIC8vIEhhdmUgd2UgZXhjZWVkZWQg
aW5saW5lIHN0YWNrIGRlcHRoLCBvciBhcmUgd2UgdHJ5aW5nIHRvIGlubGluZSBhIHJlY3Vyc2l2
ZSBjYWxsIHRvCisgICAgLy8gdG9vIG1hbnkgbGV2ZWxzPyBJZiBlaXRoZXIgb2YgdGhlc2UgYXJl
IGRldGVjdGVkLCB0aGVuIGRvbid0IGlubGluZS4gV2UgYWRqdXN0IG91cgorICAgIC8vIGhldXJp
c3RpY3MgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIGZ1bmN0aW9uIHRoYXQgY2Fubm90IG90aGVy
d2lzZSBiZSBjb21waWxlZC4KKyAgICAKKyAgICB1bnNpZ25lZCBkZXB0aExpbWl0OworICAgIHVu
c2lnbmVkIHJlY3Vyc2lvbkxpbWl0OworICAgIGlmIChjYW5Db21waWxlKGNhcGFiaWxpdHlMZXZl
bCkpIHsKKyAgICAgICAgZGVwdGhMaW1pdCA9IE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ0RlcHRo
KCk7CisgICAgICAgIHJlY3Vyc2lvbkxpbWl0ID0gT3B0aW9uczo6bWF4aW11bUlubGluaW5nUmVj
dXJzaW9uKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGVwdGhMaW1pdCA9IE9wdGlvbnM6Om1h
eGltdW1JbmxpbmluZ0RlcHRoRm9yTXVzdElubGluZSgpOworICAgICAgICByZWN1cnNpb25MaW1p
dCA9IE9wdGlvbnM6Om1heGltdW1JbmxpbmluZ1JlY3Vyc2lvbkZvck11c3RJbmxpbmUoKTsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgZGVwdGggPSAwOworICAgIHVuc2lnbmVkIHJlY3Vyc2lv
biA9IDA7CisgICAgCisgICAgZm9yIChJbmxpbmVTdGFja0VudHJ5KiBlbnRyeSA9IG1faW5saW5l
U3RhY2tUb3A7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5tX2NhbGxlcikgeworICAgICAgICArK2Rl
cHRoOworICAgICAgICBpZiAoZGVwdGggPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5nRGVwdGgo
KSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgIEZhaWxpbmcgYmVjYXVzZSBkZXB0aCBleGNlZWRlZC5cbiIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZW50cnktPmV4ZWN1
dGFibGUoKSA9PSBleGVjdXRhYmxlKSB7CisgICAgICAgICAgICArK3JlY3Vyc2lvbjsKKyAgICAg
ICAgICAgIGlmIChyZWN1cnNpb24gPj0gT3B0aW9uczo6bWF4aW11bUlubGluaW5nUmVjdXJzaW9u
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgIEZhaWxpbmcgYmVjYXVzZSByZWN1cnNpb24gZGV0ZWN0ZWQuXG4iKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICBDb21taXR0
aW5nIHRvIGlubGluaW5nLlxuIik7CiAgICAgCiAgICAgLy8gTm93IHdlIGtub3cgd2l0aG91dCBh
IGRvdWJ0IHRoYXQgd2UgYXJlIGNvbW1pdHRlZCB0byBpbmxpbmluZy4gU28gYmVnaW4gdGhlIHBy
b2Nlc3MKICAgICAvLyBieSBjaGVja2luZyB0aGUgY2FsbGVlIChpZiBuZWNlc3NhcnkpIGFuZCBt
YWtpbmcgc3VyZSB0aGF0IGFyZ3VtZW50cyBhbmQgdGhlIGNhbGxlZQpAQCAtMzY2MCw2ICszNzE3
LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICAvLyBTZXQgZHVyaW5nIGNv
bnN0cnVjdGlvbi4KICAgICBBU1NFUlQoIW1fY3VycmVudEluZGV4KTsKICAgICAKKyAgICBpZiAo
aXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkKKyAgICAgICAgJiYgISFtX2dyYXBoLm1fcGxhbi5w
cm9maWxlZERGR0NvZGVCbG9jaworICAgICAgICAmJiBPcHRpb25zOjplbmFibGVQb2x5dmFyaWFu
dENhbGxJbmxpbmluZygpKSB7CisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlREZHU3Rh
dHVzZXMoCisgICAgICAgICAgICBtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jay5n
ZXQoKSwgbV9jYWxsQ29udGV4dE1hcCk7CisgICAgfQorICAgIAogICAgIGlmIChtX2NvZGVCbG9j
ay0+Y2FwdHVyZUNvdW50KCkpIHsKICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xOTgsNiArMTk4LDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBpZiAoY29kZUJsb2NrLT51c2Vz
QXJndW1lbnRzKCkgJiYgcGNbNF0udS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVn
aXN0ZXIoKS5vZmZzZXQoKSkKICAgICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgaGFuZGxlIHRoaXMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjYKICAgICAgICAgcmV0dXJuIENhbm5v
dENvbXBpbGU7CiAKICAgICBjYXNlIG9wX25ld19yZWdleHA6IApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCShyZXZpc2lvbiAxNjI3NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC05NiwxOSArOTYsMjggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBmdW5jdGlvbkZvckNv
bnN0cgogICAgIHJldHVybiBjYXBhYmlsaXR5TGV2ZWwoY29kZUJsb2NrKTsKIH0KIAotaW5saW5l
IGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JDYWxsKENvZGVCbG9jayogY29kZUJsb2NrKQoraW5s
aW5lIENhcGFiaWxpdHlMZXZlbCBpbmxpbmVGdW5jdGlvbkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgcmV0dXJuIG1pZ2h0SW5saW5lRnVuY3Rpb25G
b3JDYWxsKGNvZGVCbG9jaykgJiYgY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbChjb2RlQmxvY2sp
KTsKKyAgICBpZiAoIW1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDYWxsKGNvZGVCbG9jaykpCisgICAg
ICAgIHJldHVybiBDYW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYXBhYmlsaXR5TGV2
ZWwoY29kZUJsb2NrKTsKIH0KIAotaW5saW5lIGJvb2wgY2FuSW5saW5lRnVuY3Rpb25Gb3JDbG9z
dXJlQ2FsbChDb2RlQmxvY2sqIGNvZGVCbG9jaykKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgaW5s
aW5lRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbENhcGFiaWxpdHlMZXZlbChDb2RlQmxvY2sqIGNvZGVC
bG9jaykKIHsKLSAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNsb3N1cmVDYWxsKGNv
ZGVCbG9jaykgJiYgY2FuSW5saW5lKGNhcGFiaWxpdHlMZXZlbChjb2RlQmxvY2spKTsKKyAgICBp
ZiAoIW1pZ2h0SW5saW5lRnVuY3Rpb25Gb3JDbG9zdXJlQ2FsbChjb2RlQmxvY2spKQorICAgICAg
ICByZXR1cm4gQ2Fubm90Q29tcGlsZTsKKyAgICAKKyAgICByZXR1cm4gY2FwYWJpbGl0eUxldmVs
KGNvZGVCbG9jayk7CiB9CiAKLWlubGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9yQ29uc3Ry
dWN0KENvZGVCbG9jayogY29kZUJsb2NrKQoraW5saW5lIENhcGFiaWxpdHlMZXZlbCBpbmxpbmVG
dW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbChDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKLSAgICByZXR1cm4gbWlnaHRJbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChjb2RlQmxvY2sp
ICYmIGNhbklubGluZShjYXBhYmlsaXR5TGV2ZWwoY29kZUJsb2NrKSk7CisgICAgaWYgKCFtaWdo
dElubGluZUZ1bmN0aW9uRm9yQ29uc3RydWN0KGNvZGVCbG9jaykpCisgICAgICAgIHJldHVybiBD
YW5ub3RDb21waWxlOworICAgIAorICAgIHJldHVybiBjYXBhYmlsaXR5TGV2ZWwoY29kZUJsb2Nr
KTsKIH0KIAogaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTI0LDE2ICsxMzMsMTYg
QEAgaW5saW5lIGJvb2wgbWlnaHRJbmxpbmVGdW5jdGlvbihDb2RlQmxvYwogICAgIHJldHVybiBt
aWdodElubGluZUZ1bmN0aW9uRm9yKGNvZGVCbG9jaywgY29kZUJsb2NrLT5zcGVjaWFsaXphdGlv
bktpbmQoKSk7CiB9CiAKLWlubGluZSBib29sIGNhbklubGluZUZ1bmN0aW9uRm9yKENvZGVCbG9j
ayogY29kZUJsb2NrLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIGJvb2wgaXNDbG9zdXJl
Q2FsbCkKK2lubGluZSBDYXBhYmlsaXR5TGV2ZWwgaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5
TGV2ZWwoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwg
Ym9vbCBpc0Nsb3N1cmVDYWxsKQogewogICAgIGlmIChpc0Nsb3N1cmVDYWxsKSB7CiAgICAgICAg
IEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKLSAgICAgICAgcmV0dXJuIGNhbklubGluZUZ1
bmN0aW9uRm9yQ2xvc3VyZUNhbGwoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUZ1
bmN0aW9uRm9yQ2xvc3VyZUNhbGxDYXBhYmlsaXR5TGV2ZWwoY29kZUJsb2NrKTsKICAgICB9CiAg
ICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpCi0gICAgICAgIHJldHVybiBjYW5JbmxpbmVGdW5j
dGlvbkZvckNhbGwoY29kZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUZ1bmN0aW9uRm9y
Q2FsbENhcGFiaWxpdHlMZXZlbChjb2RlQmxvY2spOwogICAgIEFTU0VSVChraW5kID09IENvZGVG
b3JDb25zdHJ1Y3QpOwotICAgIHJldHVybiBjYW5JbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdChj
b2RlQmxvY2spOworICAgIHJldHVybiBpbmxpbmVGdW5jdGlvbkZvckNvbnN0cnVjdENhcGFiaWxp
dHlMZXZlbChjb2RlQmxvY2spOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2Mjc3NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIyNiw3ICsyMjYsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAvLyBQ
dXQgdGhpbmdzIGhlcmUgdGhhdCBtdXN0IGJlIGRlZmluZWQgZXZlbiBpZiBFTkFCTEUoREZHX0pJ
VCkgaXMgZmFsc2UuCiAKLWVudW0gQ2FwYWJpbGl0eUxldmVsIHsgQ2Fubm90Q29tcGlsZSwgQ2Fu
SW5saW5lLCBDYW5Db21waWxlLCBDYW5Db21waWxlQW5kSW5saW5lLCBDYXBhYmlsaXR5TGV2ZWxO
b3RTZXQgfTsKK2VudW0gQ2FwYWJpbGl0eUxldmVsIHsKKyAgICBDYW5ub3RDb21waWxlLAorICAg
IENhbklubGluZSwKKyAgICBDYW5Db21waWxlLAorICAgIENhbkNvbXBpbGVBbmRJbmxpbmUsCisg
ICAgQ2FwYWJpbGl0eUxldmVsTm90U2V0Cit9OwogCiBpbmxpbmUgYm9vbCBjYW5Db21waWxlKENh
cGFiaWxpdHlMZXZlbCBsZXZlbCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0RyaXZlci5jcHAJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NTUsOCArNTUsOCBAQCB1bnNpZ25lZCBnZXROdW1Db21waWxhdGlvbnMoKQogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgVk0m
IHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25Nb2RlIG1vZGUsIHVuc2lnbmVk
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKLSAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVz
dEhhbmRsZVZhbHVlcywKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwKKyAgICB1bnNp
Z25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0
SGFuZGxlVmFsdWVzLAogICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
PiBjYWxsYmFjaykKIHsKICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIENv
bXBpbGF0aW9uIChEcml2ZXIpIik7CkBAIC02Niw2ICs2Niw3IEBAIHN0YXRpYyBDb21waWxhdGlv
blJlc3VsdCBjb21waWxlSW1wbCgKICAgICBBU1NFUlQoY29kZUJsb2NrKTsKICAgICBBU1NFUlQo
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAgIEFTU0VSVCgh
cHJvZmlsZWRERkdDb2RlQmxvY2sgfHwgcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdFR5cGUoKSA9
PSBKSVRDb2RlOjpERkdKSVQpOwogICAgIAogICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkg
fHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKICAgICAgICAgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOwpAQCAtOTUsNyArOTYsNyBAQCBzdGF0aWMgQ29tcGlsYXRp
b25SZXN1bHQgY29tcGlsZUltcGwoCiAgICAgfQogICAgIAogICAgIFJlZlB0cjxQbGFuPiBwbGFu
ID0gYWRvcHRSZWYoCi0gICAgICAgIG5ldyBQbGFuKGNvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlC
eXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKSk7CisgICAgICAgIG5ldyBQbGFuKGNvZGVC
bG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwg
bXVzdEhhbmRsZVZhbHVlcykpOwogICAgIAogICAgIGJvb2wgZW5hYmxlQ29uY3VycmVudEpJVDsK
ICNpZiBFTkFCTEUoQ09OQ1VSUkVOVF9KSVQpCkBAIC0xMTcsNyArMTE4LDcgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGVJbXBsKAogfQogI2Vsc2UgLy8gRU5BQkxFKERGR19KSVQp
CiBzdGF0aWMgQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZUltcGwoCi0gICAgVk0mLCBDb2RlQmxv
Y2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkLCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYs
CisgICAgVk0mLCBDb2RlQmxvY2sqLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2ln
bmVkLCBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYsCiAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s+KQogewogICAgIHJldHVybiBDb21waWxhdGlvbkZhaWxlZDsKQEAg
LTEyNSwxMyArMTI2LDE0IEBAIHN0YXRpYyBDb21waWxhdGlvblJlc3VsdCBjb21waWxlSW1wbCgK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogQ29tcGlsYXRpb25SZXN1bHQgY29tcGlsZSgK
LSAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvbk1vZGUgbW9kZSwg
dW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAotICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFs
dWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAor
ICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1
ZT4mIG11c3RIYW5kbGVWYWx1ZXMsCiAgICAgUGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s+IHBhc3NlZENhbGxiYWNrKQogewogICAgIFJlZlB0cjxEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gcGFzc2VkQ2FsbGJhY2s7CiAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gY29tcGlsZUltcGwoCi0gICAgICAgIHZtLCBjb2RlQmxvY2ssIG1vZGUs
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywgY2FsbGJhY2spOworICAg
ICAgICB2bSwgY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgbW9kZSwgb3NyRW50cnlC
eXRlY29kZUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzLAorICAgICAgICBjYWxsYmFjayk7CiAgICAg
aWYgKHJlc3VsdCAhPSBDb21waWxhdGlvbkRlZmVycmVkKQogICAgICAgICBjYWxsYmFjay0+Y29t
cGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkocmV2aXNpb24gMTYy
Nzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEcml2ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDUsOCArNDUsOSBAQCBKU19FWFBPUlRfUFJJVkFURSB1bnNpZ25l
ZCBnZXROdW1Db21waWxhCiAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm9uLW51bGwsIHdlIGRvIGEg
Y29uY3VycmVudCBjb21waWxlLiBPdGhlcndpc2Ugd2UgZG8gYSBzeW5jaHJvbm91cwogLy8gY29t
cGlsZS4gRXZlbiBpZiB3ZSBkbyBhIHN5bmNocm9ub3VzIGNvbXBpbGUsIHdlIGNhbGwgdGhlIGNh
bGxiYWNrIHdpdGggdGhlIHJlc3VsdC4KIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCi0gICAg
Vk0mLCBDb2RlQmxvY2sqLCBDb21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNv
ZGVJbmRleCwKLSAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcywg
UGFzc1JlZlB0cjxEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+KTsKKyAgICBWTSYsIENvZGVC
bG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSwK
KyAgICB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIGNvbnN0IE9wZXJhbmRzPEpTVmFs
dWU+JiBtdXN0SGFuZGxlVmFsdWVzLAorICAgIFBhc3NSZWZQdHI8RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmFpbGVkRmluYWxpemVyLmNwcAkocmV2aXNp
b24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGYWlsZWRGaW5hbGl6
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSwxMSBAQCBGYWlsZWRGaW5hbGl6ZXI6
On5GYWlsZWRGaW5hbGl6ZXIoKQogewogfQogCitzaXplX3QgRmFpbGVkRmluYWxpemVyOjpjb2Rl
U2l6ZSgpCit7CisgICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgRmFpbGVkRmluYWxpemVyOjpmaW5h
bGl6ZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGYWlsZWRGaW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZhaWxlZEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBAIHB1YmxpYzoKICAgICBGYWlsZWRGaW5hbGl6ZXIoUGxhbiYpOwog
ICAgIHZpcnR1YWwgfkZhaWxlZEZpbmFsaXplcigpOwogICAgIAorICAgIHZpcnR1YWwgc2l6ZV90
IGNvZGVTaXplKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplKCkgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplRnVuY3Rpb24oKSBvdmVycmlkZTsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpbmFsaXplci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHJldmlzaW9uIDE2
Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmluYWxpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogICAgIEZpbmFsaXplcihQbGFuJik7
CiAgICAgdmlydHVhbCB+RmluYWxpemVyKCk7CiAgICAgCisgICAgdmlydHVhbCBzaXplX3QgY29k
ZVNpemUoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGZpbmFsaXplKCkgPSAwOwogICAgIHZpcnR1
YWwgYm9vbCBmaW5hbGl6ZUZ1bmN0aW9uKCkgPSAwOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGUuaAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTExOSw2ICsxMTksNyBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPERGRzo6T1NSRW50cnlEYXRhPiBvc3JFbnRyeTsKICAgICBTZWdt
ZW50ZWRWZWN0b3I8REZHOjpPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIFZlY3RvcjxERkc6OlNw
ZWN1bGF0aW9uUmVjb3Zlcnk+IHNwZWN1bGF0aW9uUmVjb3Zlcnk7CisgICAgVmVjdG9yPHVuc2ln
bmVkPiBzbG93UGF0aENhbGxzOwogICAgIERGRzo6VmFyaWFibGVFdmVudFN0cmVhbSB2YXJpYWJs
ZUV2ZW50U3RyZWFtOwogICAgIERGRzo6TWluaWZpZWRHcmFwaCBtaW5pZmllZERGRzsKICNpZiBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMyLDYgKzIzMiw3IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgaW5mby5w
YXRjaC5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRyKGNhbGxS
ZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhH
ZW5lcmF0b3ItPmxhYmVsKCkpKTsKICAgICB9CiAgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoIW1f
Z3JhcGgubV9wbGFuLndpbGxUcnlUb1RpZXJVcCB8fCBtX2ppdENvZGUtPnNsb3dQYXRoQ2FsbHMu
c2l6ZSgpID49IG1fanNDYWxscy5zaXplKCkpOwogICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJP
ZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewogICAgICAgICBDYWxsTGlua0luZm8mIGlu
Zm8gPSBtX2NvZGVCbG9jay0+Y2FsbExpbmtJbmZvKGkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MjEsNiArMjIxLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1faW5zLmFwcGVuZChyZWNv
cmQpOwogICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBjdXJyZW50SlNDYWxsSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fanNDYWxscy5zaXplKCk7CisgICAgfQogCiAgICAg
dm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRy
IHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBj
YWxsZWUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxNjI3NzUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDYgKzQ2LDExIEBAIEpJVEZpbmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiB7
CiB9CiAKK3NpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKK3sKKyAgICByZXR1cm4gbV9s
aW5rQnVmZmVyLT5zaXplKCk7Cit9CisKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7
CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMTYyNzc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgSklURmluYWxpemVyKFBsYW4mLCBQYXNzUmVm
UHRyPEpJVENvZGU+LCBQYXNzT3duUHRyPExpbmtCdWZmZXI+LCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgd2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyOjpFbXB0eVZhbHVlKSk7CiAgICAgdmlydHVhbCB+SklURmluYWxpemVyKCk7CiAgICAg
CisgICAgdmlydHVhbCBzaXplX3QgY29kZVNpemUoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJv
b2wgZmluYWxpemUoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgZmluYWxpemVGdW5jdGlv
bigpIG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTEgQEAgc3RydWN0IE9TUkV4aXQg
OiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIHVuc2lnbmVkIG1fc3RyZWFtSW5kZXg7CiAgICAg
CiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJp
ZGU7CisgICAgCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9TUkV4aXRC
YXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZENvZGVCbG9jaywg
RXhpdEZyb21ERkcpOworICAgIH0KIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1
Z0luZm8gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5jcHAJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sp
Citib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3co
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaywgRXhpdGluZ0pJVFR5cGUgaml0VHlwZSkKIHsK
ICAgICBDb2RlQmxvY2sqIHNvdXJjZVByb2ZpbGVkQ29kZUJsb2NrID0KICAgICAgICAgYmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jaygKQEAgLTQzLDcgKzQzLDcg
QEAgYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZQogICAgIGlmICghc291
cmNlUHJvZmlsZWRDb2RlQmxvY2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4g
c291cmNlUHJvZmlsZWRDb2RlQmxvY2stPmFkZEZyZXF1ZW50RXhpdFNpdGUoCi0gICAgICAgICAg
ICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5k
ZXgsIG1fa2luZCkpOworICAgICAgICBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCwgaml0VHlwZSkpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDE1ICs1OCwxNiBAQCBz
dHJ1Y3QgT1NSRXhpdEJhc2UgewogICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwogICAgIENv
ZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CiAKLSAgICBib29sIGNvbnNpZGVy
QWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCitw
cm90ZWN0ZWQ6CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrLCBFeGl0aW5nSklUVHlwZSBqaXRUeXBlKQogICAgIHsK
ICAgICAgICAgaWYgKCFtX2NvdW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KHByb2ZpbGVkQ29k
ZUJsb2NrKTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
U2xvdyhwcm9maWxlZENvZGVCbG9jaywgaml0VHlwZSk7CiAgICAgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2spOworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGVTbG93KENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2ssIEV4aXRpbmdKSVRUeXBlIGppdFR5
cGUpOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjI3NzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTY5LDggKzExNjksOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclRpZXJVcE5v
dyhFeGVjCiAKICAgICAvLyBXZSBuZWVkIHRvIGNvbXBpbGUgdGhlIGNvZGUuCiAgICAgY29tcGls
ZSgKLSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZUTE1v
ZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAotICAgICAgICBUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOworICAgICAgICAqdm0sIGNv
ZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBVSU5U
X01BWCwKKyAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKIH0KIAogY2hhciogSklUX09QRVJBVElP
TiB0cmlnZ2VyT1NSRW50cnlOb3coCkBAIC0xMjU1LDcgKzEyNTUsNyBAQCBjaGFyKiBKSVRfT1BF
UkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKICAg
ICAgICAgZXhlYywgY29kZUJsb2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1J
bmRleCwgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgQ29tcGlsYXRpb25SZXN1bHQgZm9yRW50cnlS
ZXN1bHQgPSBjb21waWxlKAotICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQo
KS5nZXQoKSwgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAqdm0s
IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExGb3JPU1JF
bnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2sp
KTsKICAgICAKICAgICAvLyBCdXQgd2UgYWxzbyB3YW50IHRvIHRyaWdnZXIgYSByZXBsYWNlbWVu
dCBjb21waWxlLiBPZiBjb3Vyc2UsIHdlIGRvbid0IHdhbnQgdG8KQEAgLTEyNzIsOCArMTI3Miw4
IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgICAgICAmJiAo
IXdvcmtsaXN0CiAgICAgICAgICAgICB8fCB3b3JrbGlzdC0+Y29tcGlsYXRpb25TdGF0ZShrZXlG
b3JSZXBsYWNlbWVudCkgPT0gV29ya2xpc3Q6Ok5vdEtub3duKSkgewogICAgICAgICBjb21waWxl
KAotICAgICAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIEZU
TE1vZGUsIFVJTlRfTUFYLCBPcGVyYW5kczxKU1ZhbHVlPigpLAotICAgICAgICAgICAgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAgICAg
ICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxvY2ssIEZU
TE1vZGUsIFVJTlRfTUFYLAorICAgICAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTYyNzc1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDEwICsxMDgsMTIgQEAgc3RhdGljIFByb2ZpbGVyOjpDb21waWxhdGlvbktpbmQgcHJv
ZmlsZQogfQogCiBQbGFuOjpQbGFuKAotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRD
b2RlQmxvY2ssIENvbXBpbGF0aW9uTW9kZSBtb2RlLAotICAgIHVuc2lnbmVkIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCwgY29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCisg
ICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9m
aWxlZERGR0NvZGVCbG9jaywKKyAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3Ny
RW50cnlCeXRlY29kZUluZGV4LAorICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFu
ZGxlVmFsdWVzKQogICAgIDogdm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIGNvZGVC
bG9jayhwYXNzZWRDb2RlQmxvY2spCisgICAgLCBwcm9maWxlZERGR0NvZGVCbG9jayhwcm9maWxl
ZERGR0NvZGVCbG9jaykKICAgICAsIG1vZGUobW9kZSkKICAgICAsIG9zckVudHJ5Qnl0ZWNvZGVJ
bmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtdXN0SGFuZGxlVmFsdWVzKG11c3RI
YW5kbGVWYWx1ZXMpCkBAIC0xNjcsNyArMTY5LDcgQEAgdm9pZCBQbGFuOjpjb21waWxlSW5UaHJl
YWQoTG9uZ0xpdmVkU3RhdAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ZG91YmxlIG5vdyA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICAgICAgZGF0YUxvZygiT3B0aW1pemVk
ICIsICpjb2RlQmxvY2ssICIgdXNpbmcgIiwgbW9kZSwgIiB3aXRoICIsIHBhdGhOYW1lLCAiIGlu
ICIsIG5vdyAtIGJlZm9yZSwgIiBtcyIpOworICAgICAgICBkYXRhTG9nKCJPcHRpbWl6ZWQgIiwg
KmNvZGVCbG9jaywgIiB1c2luZyAiLCBtb2RlLCAiIHdpdGggIiwgcGF0aE5hbWUsICIgaW50byAi
LCBmaW5hbGl6ZXItPmNvZGVTaXplKCksICIgYnl0ZXMgaW4gIiwgbm93IC0gYmVmb3JlLCAiIG1z
Iik7CiAgICAgICAgIGlmIChwYXRoID09IEZUTFBhdGgpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
KERGRzogIiwgYmVmb3JlRlRMIC0gYmVmb3JlLCAiLCBMTFZNOiAiLCBub3cgLSBiZWZvcmVGVEws
ICIpIik7CiAgICAgICAgIGRhdGFMb2coIi5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQbGFuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmgJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSw3ICs1NSw4IEBAIGNsYXNzIExvbmdMaXZl
ZFN0YXRlOwogCiBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFu
PiB7CiAgICAgUGxhbigKLSAgICAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+LCBDb21waWxhdGlv
bk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKKyAgICAgICAgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0Nv
ZGVCbG9jaywKKyAgICAgICAgQ29tcGlsYXRpb25Nb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVj
b2RlSW5kZXgsCiAgICAgICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFs
dWVzKTsKICAgICB+UGxhbigpOwogICAgIApAQCAtNzAsNiArNzEsNyBAQCBzdHJ1Y3QgUGxhbiA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgVk0mIHZtOwogICAgIFJlZlB0
cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKKyAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm9maWxlZERG
R0NvZGVCbG9jazsKICAgICBDb21waWxhdGlvbk1vZGUgbW9kZTsKICAgICBjb25zdCB1bnNpZ25l
ZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXg7CiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRs
ZVZhbHVlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk1LDYg
KzY5NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAg
CiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgIAorICAgIGlmIChtX2ppdC5ncmFwaCgp
Lm1fcGxhbi53aWxsVHJ5VG9UaWVyVXApIHsKKyAgICAgICAgbV9qaXQuYWRkMzIoCisgICAgICAg
ICAgICBUcnVzdGVkSW1tMzIoMSksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzKAorICAgICAgICAgICAgICAgIG1faml0LmppdENvZGUoKS0+c2xvd1BhdGhDYWxs
cy5iZWdpbigpICsgbV9qaXQuY3VycmVudEpTQ2FsbEluZGV4KCkpKTsKKyAgICB9CisgICAgCiAg
ICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5lZWRz
IHRvIGJlIGluIHJlZ1QwCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5u
ZWFyQ2FsbCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM0
LDEwICsxNTM0LDQwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygK
ICAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzID0gZmFsc2U7CiB9CiAKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnByZXBhcmVKSVRDb2RlRm9yVGllclVwKCkKK3sKKyAgICB1bnNpZ25lZCBudW1i
ZXJPZkNhbGxzID0gMDsKKyAgICAKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1f
aml0LmdyYXBoKCkubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2ppdC5ncmFwaCgpLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2Fs
bDoKKyAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0OgorICAgICAgICAgICAgICAgIG51bWJlck9m
Q2FsbHMrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9qaXQuaml0Q29kZSgpLT5zbG93UGF0aENhbGxz
LmZpbGwoMCwgbnVtYmVyT2ZDYWxscyk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoKQogewogICAgIGNoZWNrQXJndW1lbnRUeXBlcygpOwotCisgICAgCisgICAgaWYgKG1faml0
LmdyYXBoKCkubV9wbGFuLndpbGxUcnlUb1RpZXJVcCkKKyAgICAgICAgcHJlcGFyZUpJVENvZGVG
b3JUaWVyVXAoKTsKKyAgICAKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwogICAgIGZvciAo
QmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1faml0LmdyYXBoKCkubnVt
QmxvY2tzKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICBtX2ppdC5zZXRGb3JCbG9ja0luZGV4
KGJsb2NrSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksNiArMTE5LDkg
QEAgcHVibGljOgogICAgIH5TcGVjdWxhdGl2ZUpJVCgpOwogCiAgICAgYm9vbCBjb21waWxlKCk7
CisgICAgCisgICAgdm9pZCBwcmVwYXJlSklUQ29kZUZvclRpZXJVcCgpOworICAgIAogICAgIHZv
aWQgY3JlYXRlT1NSRW50cmllcygpOwogICAgIHZvaWQgbGlua09TUkVudHJpZXMoTGlua0J1ZmZl
ciYpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDIyIEBAIEpJVEZp
bmFsaXplcjo6fkpJVEZpbmFsaXplcigpCiB7CiB9CiAKK3NpemVfdCBKSVRGaW5hbGl6ZXI6OmNv
ZGVTaXplKCkKK3sKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAKKyAgICByZXN1bHQgKz0g
ZXhpdFRodW5rc0xpbmtCdWZmZXItPnNpemUoKTsKKyAgICByZXN1bHQgKz0gZW50cnlwb2ludExp
bmtCdWZmZXItPnNpemUoKTsKKyAgICBpZiAoc2lkZUNvZGVMaW5rQnVmZmVyKQorICAgICAgICBy
ZXN1bHQgKz0gc2lkZUNvZGVMaW5rQnVmZmVyLT5zaXplKCk7CisgICAgcmVzdWx0ICs9IGhhbmRs
ZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5zaXplKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gaml0Q29kZS0+aGFuZGxlcygpLnNpemUoKTsgaS0tOykKKyAgICAgICAgcmVzdWx0ICs9IGpp
dENvZGUtPmhhbmRsZXMoKVtpXS0+c2l6ZUluQnl0ZXMoKTsKKyAgICAKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE2Mjc3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDkg
QEAgcHVibGljOgogICAgIEpJVEZpbmFsaXplcihERkc6OlBsYW4mKTsKICAgICB2aXJ0dWFsIH5K
SVRGaW5hbGl6ZXIoKTsKICAgICAKLSAgICBib29sIGZpbmFsaXplKCk7Ci0gICAgYm9vbCBmaW5h
bGl6ZUZ1bmN0aW9uKCk7CisgICAgc2l6ZV90IGNvZGVTaXplKCkgb3ZlcnJpZGU7CisgICAgYm9v
bCBmaW5hbGl6ZSgpIG92ZXJyaWRlOworICAgIGJvb2wgZmluYWxpemVGdW5jdGlvbigpIG92ZXJy
aWRlOwogCiAgICAgT3duUHRyPExpbmtCdWZmZXI+IGV4aXRUaHVua3NMaW5rQnVmZmVyOwogICAg
IE93blB0cjxMaW5rQnVmZmVyPiBlbnRyeXBvaW50TGlua0J1ZmZlcjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYg
KzE2NiwxMSBAQCBzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlCiAgICAg
dWludDMyX3QgbV9zdGFja21hcElEOwogICAgIAogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxv
Y2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisg
ICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2Zp
bGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9TUkV4aXRCYXNlOjpjb25zaWRl
ckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShwcm9maWxlZENvZGVCbG9jaywgRXhpdEZyb21GVEwp
OworICAgIH0KIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiAxNjI3NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNyArNTQsMTQgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIENvZGVSZWY7CiAgICAg
dHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgQ29kZVB0cjsKIAotICAgIGVudW0gSklUVHlw
ZSB7IE5vbmUsIEhvc3RDYWxsVGh1bmssIEludGVycHJldGVyVGh1bmssIEJhc2VsaW5lSklULCBE
RkdKSVQsIEZUTEpJVCB9OworICAgIGVudW0gSklUVHlwZSA6IHVpbnQ4X3QgeworICAgICAgICBO
b25lLAorICAgICAgICBIb3N0Q2FsbFRodW5rLAorICAgICAgICBJbnRlcnByZXRlclRodW5rLAor
ICAgICAgICBCYXNlbGluZUpJVCwKKyAgICAgICAgREZHSklULAorICAgICAgICBGVExKSVQKKyAg
ICB9OwogICAgIAogICAgIHN0YXRpYyBKSVRUeXBlIGJvdHRvbVRpZXJKSVQoKQogICAgIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNp
b24gMTYyNzc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE4Niw3ICsxMTg2LDcgQEAgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICB9CiAKICAgICAgICAgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0ID0gREZHOjpjb21waWxlKAotICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+
bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAorICAg
ICAgICAgICAgdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgMCwgREZHOjpE
RkdNb2RlLCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgSklU
VG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTYyNzc1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzEsNiArMTcxLDExIEBAIHR5cGVkZWYgT3B0aW9uUmFuZ2Ugb3B0aW9uUmFuZ2U7CiAgICAgXAog
ICAgIC8qIERlcHRoIG9mIGlubGluZSBzdGFjaywgc28gMSA9IG5vIGlubGluaW5nLCAyID0gb25l
IGxldmVsLCBldGMuICovIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtSW5saW5pbmdEZXB0aCwg
NSkgXAorICAgIHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ1JlY3Vyc2lvbiwgMikgXAorICAg
IHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ0RlcHRoRm9yTXVzdElubGluZSwgNykgXAorICAg
IHYodW5zaWduZWQsIG1heGltdW1JbmxpbmluZ1JlY3Vyc2lvbkZvck11c3RJbmxpbmUsIDMpIFwK
KyAgICBcCisgICAgdihib29sLCBlbmFibGVQb2x5dmFyaWFudENhbGxJbmxpbmluZywgdHJ1ZSkg
XAogICAgIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoQ2FzZUxl
bmd0aCwgNTApIFwKICAgICB2KHVuc2lnbmVkLCBtYXhpbXVtQmluYXJ5U3RyaW5nU3dpdGNoVG90
YWxMZW5ndGgsIDIwMDApIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvc2ltcGxlLXBvbHl2YXJpYW50LWNhbGwtaW5saW5pbmctZXhhbXBsZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFu
dC1jYWxsLWlubGluaW5nLWV4YW1wbGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbXBsZS1wb2x5dmFyaWFudC1jYWxsLWlubGluaW5nLWV4
YW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMiBAQAorZnVuY3Rpb24gZm9vKGJh
eikgeworICAgIHJldHVybiBiYXIoYmF6KTsKK30KKworZnVuY3Rpb24gZnV6eihiYXopIHsKKyAg
ICByZXR1cm4gYmFyKGJheik7Cit9CisKK2Z1bmN0aW9uIGJhcihiYXopIHsKKyAgICByZXR1cm4g
YmF6KCk7Cit9CisKK2Z1bmN0aW9uIGJhejEoKSB7CisgICAgcmV0dXJuIDQyOworfQorCitmdW5j
dGlvbiBiYXoyKCkgeworICAgIHJldHVybiAyNDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5s
aW5lKGZ1enopOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGZvbyhiYXoxKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgdmFyIHJlc3VsdCA9IGZ1enoo
YmF6Mik7CisgICAgaWYgKHJlc3VsdCAhPSAyNCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OworfQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>