<?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>117385</bug_id>
          
          <creation_ts>2013-06-09 13:38:59 -0700</creation_ts>
          <short_desc>fourthTier: DFG should support op_in and it should use patching to make it fast</short_desc>
          <delta_ts>2013-06-13 13:54:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>898501</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 13:38:59 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898502</commentid>
    <comment_count>1</comment_count>
      <attachid>204122</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-09 13:39:43 -0700</bug_when>
    <thetext>Created attachment 204122
very early work in progress

Still figuring out what the best way of doing this is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>898971</commentid>
    <comment_count>2</comment_count>
      <attachid>204277</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-10 19:30:56 -0700</bug_when>
    <thetext>Created attachment 204277
it should just work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899041</commentid>
    <comment_count>3</comment_count>
      <attachid>204289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-10 23:00:12 -0700</bug_when>
    <thetext>Created attachment 204289
it did just work

Still need to implement 32-bit part, still need to run more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899231</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-11 10:58:19 -0700</bug_when>
    <thetext>Still debugging some LayoutTests/jquery crashes.  No perf numbers yet other than microbenchmarks which speed up by a *lot*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899301</commentid>
    <comment_count>5</comment_count>
      <attachid>204361</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-11 14:39:08 -0700</bug_when>
    <thetext>Created attachment 204361
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899351</commentid>
    <comment_count>6</comment_count>
      <attachid>204375</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-11 18:07:02 -0700</bug_when>
    <thetext>Created attachment 204375
the patch

32-bit now builds and runs clean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899353</commentid>
    <comment_count>7</comment_count>
      <attachid>204376</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-11 18:23:32 -0700</bug_when>
    <thetext>Created attachment 204376
the patch

Added JSRegress tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899718</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-12 12:12:05 -0700</bug_when>
    <thetext>This isn&apos;t a small speed-up.


   in-four-cases                                 297.3037+-2.8573     ^     21.8263+-0.1147        ^ definitely 13.6213x faster
   in-one-case-false                             178.0126+-2.6962     ^     10.4301+-0.1371        ^ definitely 17.0673x faster
   in-one-case-true                              156.9623+-2.0516     ^     10.1108+-0.0654        ^ definitely 15.5242x faster
   in-two-cases                                  166.7664+-1.6888     ^     10.5953+-0.1015        ^ definitely 15.7397x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>899738</commentid>
    <comment_count>9</comment_count>
      <attachid>204376</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-12 13:16:52 -0700</bug_when>
    <thetext>Comment on attachment 204376
the patch

Would be nice to take even more advantage and further optimize for cases like

    if (!(&quot;property&quot; in object))
        throw &quot;oops!&quot;;
    return object.property;

but I can&apos;t in good conscience thumb my nose at a 17X speedup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900148</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 09:59:29 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 204376 [details])
&gt; Would be nice to take even more advantage and further optimize for cases like
&gt; 
&gt;     if (!(&quot;property&quot; in object))
&gt;         throw &quot;oops!&quot;;
&gt;     return object.property;

Yes.  Here&apos;s the plan:

1) Get the baseline JIT to use the DFG&apos;s inline caching logic, including for op_in.

2) Have the DFGByteCodeParser extract the inline cache data for op_in the same way it does for op_get_by_id and friends.

3a) For In&apos;s that only have one case in the inline cache and they didn&apos;t take slow path, simply turn them into CheckStructure and their result becomes a JSConstant(true) or JSConstant(false).

3b) For In&apos;s that too two cases (a true and a false case), integrate Branch(In(@object)) with the CFA such that the CFA will remember that on the then case of the Branch, we know that @object has the true structure, and on the else case of the Branch, we know that @object has the false structure.  We haven&apos;t yet done such things in the CFA, but they are easy to do in our IR; they&apos;ll just require a slight refiddling of the relationship between the CFA&apos;s executeEffects() method and the mergeXYZ() methods; executeEffects() will have to convey to the merge methods that we will want to merge slightly different data for the different paths of the branch.

&gt; 
&gt; but I can&apos;t in good conscience thumb my nose at a 17X speedup.

Seems sensible! ;-)

OTOH, this didn&apos;t really speed up pdfjs despite increasing coverage, and despite the fact that pdfjs is clearly making good use of the inline caching - disassembly dumps show lots of juicy DFG In stubs, and most of them look optimal.  So I guess those functions that used &apos;in&apos; simply weren&apos;t on the hot path.  Oh well it happens.  Still happy that I made it fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>900274</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-13 13:54:57 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151569</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204122</attachid>
            <date>2013-06-09 13:39:43 -0700</date>
            <delta_ts>2013-06-10 19:30:56 -0700</delta_ts>
            <desc>very early work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7970</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
dHViSW5mby5oCShyZXZpc2lvbiAxNTEzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niwx
NCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBzdHJ1Y3QgewogICAgICAg
ICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBwdXRCeUlkTGlz
dDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBiYXNlU3RydWN0dXJlOworICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1
cmVDaGFpbj4gY2hhaW47CisgICAgICAgIH0gaW47CisgICAgICAgIHN0cnVjdCB7CisgICAgICAg
ICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHN0cnVjdHVyZUxpc3Q7CisgICAg
ICAgICAgICBpbnQgbGlzdFNpemU7CisgICAgICAgIH0gaW5MaXN0OwogICAgIH0gdTsKIAogICAg
IFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE1MTM1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MTYsNiArMTUxNiwxMiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIH0KICAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNv
ZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIEluOgorICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRldGVybWluZSB3aGVuIHRoZSBwcm9w
ZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0cmFjdAorICAgICAgICAvLyB2YWx1
ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGlu
ZGV4SW5CbG9jayk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBHZXRH
bG9iYWxWYXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUwLDYgKzMzNTAsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSWRl
bnRpdHksIEVkZ2UoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBOdW1iZXJV
c2UpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19udW1iZXIpOwogICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9pbjogeworICAgICAgICAgICAgc2V0KGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChJbiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBnZXQoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lu
KTsKKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBQYXJzZSBm
YWlsZWQhIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJpbGl0aWVzIGNo
ZWNrZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3IEBAIENhcGFi
aWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3B1dF90b19i
YXNlOgogICAgIGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgICAg
ICAvL2Nhc2Ugb3BfaW46CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAg
ICAgICAKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODI2LDYgKzgyNiwxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94
SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbjogeworICAgICAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBhdCBzb21lIHBvaW50IGhhdmUgYXJyYXkgcHJvZmlsaW5n
IG9uIG9wX2luLCBpbiB3aGljaAorICAgICAgICAgICAgLy8gY2FzZSB3ZSB3b3VsZCBiZSBhYmxl
IHRvIHR1cm4gdGhpcyBpbnRvIGEga2luZCBvZiBHZXRCeVZhbC4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAg
ICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBQaGFudG9tOgogICAgICAgICBjYXNlIElkZW50aXR5OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNiw2ICsy
MjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oVG9TdHJp
bmcsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBc
CiAgICAgbWFjcm8oTmV3U3RyaW5nT2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhN
YWtlUm9wZSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSW4sIE5vZGVSZXN1bHRCb29sZWFu
IHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgXAogICAgIC8q
IE5vZGVzIHVzZWQgZm9yIGFjdGl2YXRpb25zLiBBY3RpdmF0aW9uIHN1cHBvcnQgd29ya3MgYnkg
aGF2aW5nIGl0IGFuY2hvcmVkIGF0ICovXAogICAgIC8qIGVwaWxnb3VlcyB2aWEgVGVhck9mZkFj
dGl2YXRpb24sIGFuZCBhbGwgQ3JlYXRlQWN0aXZhdGlvbiBub2RlcyBrZXB0IGFsaXZlIGJ5ICov
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
R2V0U2NvcGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxP
dGhlcik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIElu
OgorICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczOSw2ICs0NzM5LDEx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgY29t
cGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAg
IAorICAgIGNhc2UgSW46CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKICAgICBjYXNlIENvdW50
RXhlY3V0aW9uOgogICAgICAgICBtX2ppdC5hZGQ2NChUcnVzdGVkSW1tMzIoMSksIE1hY3JvQXNz
ZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3Mobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpLT5hZGRyZXNz
KCkpKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMCAr
MjA1LDE4IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAgICB9
IGVsc2UgaWYgKGlzQ2VsbCgpKSB7CiAgICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJkpT
U3RyaW5nOjpzX2luZm8pKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0
PEpTU3RyaW5nKj4oYXNDZWxsKCkpOwotICAgICAgICAgICAgb3V0LnByaW50KCJTdHJpbmc6ICIp
OworICAgICAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKICAgICAgICAgICAgIGlmIChzdHJp
bmctPmlzUm9wZSgpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiKHJvcGUpICIpOwotICAg
ICAgICAgICAgb3V0LnByaW50KHN0cmluZy0+dHJ5R2V0VmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIgKHJvcGUpIik7CisgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBp
bXBsID0gc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsKKyAgICAgICAgICAgIGlmIChpbXBsKSB7
CisgICAgICAgICAgICAgICAgaWYgKGltcGwtPmlzQXRvbWljKCkpCisgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiIChhdG9taWMpIik7CisgICAgICAgICAgICAgICAgaWYgKGltcGwtPmlz
SWRlbnRpZmllcigpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoaWRlbnRpZmll
cikiKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICh1
bnJlc29sdmVkKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCI6ICIsIGltcGwpOwogICAgICAg
ICB9IGVsc2UgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmU3RydWN0dXJlOjpzX2luZm8pKSB7CiAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0Nl
bGwoKSk7CiAgICAgICAgICAgICBvdXQucHJpbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7
CisgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZhbHVlSW1wbCgpIGNvbnN0OwogICAg
ICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQogCiAgICAgICAgIEpT
VmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Q7CkBAIC0zNzgsNiArMzc5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4g
bV92YWx1ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgY29uc3QgU3RyaW5nSW1wbCogSlNTdHJpbmc6
OnRyeUdldFZhbHVlSW1wbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZS5p
bXBsKCk7CisgICAgfQorCiAgICAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbkdl
dEluZGV4KGkpKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDE1MTM1NCkK
KysrIFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQs
NiArNjQsOCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uCiAKIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmdJbXBsKiBzdHJp
bmcpCiB7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIG91dC5wcmludCgiKG51bGwgU3RyaW5n
SW1wbCopIik7CiAgICAgb3V0LnByaW50KHN0cmluZy0+dXRmOCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204277</attachid>
            <date>2013-06-10 19:30:56 -0700</date>
            <delta_ts>2013-06-10 23:00:12 -0700</delta_ts>
            <desc>it should just work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29587</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ3MywxNCArMjQ3MywyMCBAQCB2b2lkIENvZGVC
bG9jazo6cmVzZXRTdHViSW50ZXJuYWwoUmVwYXRjCiAgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGlu
ZUpJVDoKICAgICAgICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKICAgICAgICAg
ICAgIEpJVDo6cmVzZXRQYXRjaEdldEJ5SWQocmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKLSAg
ICAgICAgZWxzZQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
UHV0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSk7CiAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hQ
dXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7CisgICAgICAgIH0KICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBKSVRDb2RlOjpERkdKSVQ6CiAgICAgICAgIGlmIChpc0dldEJ5SWRBY2Nl
c3MoYWNjZXNzVHlwZSkpCiAgICAgICAgICAgICBERkc6OmRmZ1Jlc2V0R2V0QnlJRChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSBpZiAoaXNQdXRC
eUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQogICAgICAgICAgICAgREZHOjpkZmdSZXNldFB1dEJ5SUQo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzSW5BY2Nlc3MoYWNjZXNzVHlwZSkpOworICAgICAgICAgICAgREZHOjpk
ZmdSZXNldEluKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICAgICAgfQogICAgICAgICBi
cmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMzI3OCw2ICszMjg0LDE2IEBAIHZvaWQgQ29kZUJsb2NrOjpzZXRPcHRpbWl6YXRpb25U
aHJlc2hvbGQKIH0KIAogI2lmIEVOQUJMRShKSVQpCitzdGF0aWMgYm9vbCBzdHJ1Y3R1cmVTdHVi
SW5mb0xlc3NUaGFuKGNvbnN0IFN0cnVjdHVyZVN0dWJJbmZvJiBhLCBjb25zdCBTdHJ1Y3R1cmVT
dHViSW5mbyYgYikKK3sKKyAgICByZXR1cm4gZ2V0U3RydWN0dXJlU3R1YkluZm9SZXR1cm5Mb2Nh
dGlvbihhKSA8IGdldFN0cnVjdHVyZVN0dWJJbmZvUmV0dXJuTG9jYXRpb24oYik7Cit9CisKK3Zv
aWQgQ29kZUJsb2NrOjpzb3J0U3RydWN0dXJlU3R1YkluZm9zKCkKK3sKKyAgICBzdGQ6OnNvcnQo
bV9zdHJ1Y3R1cmVTdHViSW5mb3MuYmVnaW4oKSwgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZW5kKCks
IHN0cnVjdHVyZVN0dWJJbmZvTGVzc1RoYW4pOworfQorCiB1aW50MzJfdCBDb2RlQmxvY2s6OmFk
anVzdGVkRXhpdENvdW50VGhyZXNob2xkKHVpbnQzMl90IGRlc2lyZWRUaHJlc2hvbGQpCiB7CiAg
ICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1MTM1
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDA2LDYgKzQwNiw3IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgdm9pZCBzZXROdW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcyhzaXplX3Qgc2l6ZSkgeyBtX3N0
cnVjdHVyZVN0dWJJbmZvcy5ncm93KHNpemUpOyB9CisgICAgdm9pZCBzb3J0U3RydWN0dXJlU3R1
YkluZm9zKCk7CiAgICAgc2l6ZV90IG51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTdHViSW5mb3Muc2l6ZSgpOyB9CiAgICAgU3RydWN0dXJlU3R1
YkluZm8mIHN0cnVjdHVyZVN0dWJJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVT
dHViSW5mb3NbaW5kZXhdOyB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZpc2lvbiAxNTEz
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMSBAQCB2b2lkIFN0cnVjdHVyZVN0dWJJ
bmZvOjpkZXJlZigpCiAgICAgY2FzZSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q6CiAgICAgICAgIGRl
bGV0ZSB1LnB1dEJ5SWRMaXN0Lmxpc3Q7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIGFjY2Vz
c19pbl9saXN0OiB7CisgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgZGVs
ZXRlIHBvbHltb3JwaGljU3RydWN0dXJlczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJv
dG86CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgpAQCAtMTExLDYgKzExNiwxMiBA
QCBib29sIFN0cnVjdHVyZVN0dWJJbmZvOjp2aXNpdFdlYWtSZWZlcmVuCiAgICAgICAgIGlmICgh
dS5wdXRCeUlkTGlzdC5saXN0LT52aXNpdFdlYWsoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogeworICAgICAgICBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUu
aW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGlmICghcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT52aXNpdFdlYWsodS5pbkxpc3QubGlzdFNpemUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gVGhlIHJl
c3Qgb2YgdGhlIGluc3RydWN0aW9ucyBkb24ndCByZXF1aXJlIHJlZmVyZW5jZXMsIHNvIHRoZXJl
IGlzIG5vIG5lZWQgdG8KICAgICAgICAgLy8gZG8gYW55dGhpbmcuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNp
b24gMTUxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgZW51bSBBY2Nlc3NUeXBl
IHsKICAgICBhY2Nlc3NfcHV0X2J5X2lkX2dlbmVyaWMsCiAgICAgYWNjZXNzX2dldF9hcnJheV9s
ZW5ndGgsCiAgICAgYWNjZXNzX2dldF9zdHJpbmdfbGVuZ3RoLAorICAgIGFjY2Vzc19pbl9saXN0
CiB9OwogCiBpbmxpbmUgYm9vbCBpc0dldEJ5SWRBY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBl
KQpAQCAtOTMsNiArOTQsMTYgQEAgaW5saW5lIGJvb2wgaXNQdXRCeUlkQWNjZXNzKEFjY2Vzc1R5
cGUgYQogICAgIH0KIH0KIAoraW5saW5lIGJvb2wgaXNJbkFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vz
c1R5cGUpCit7CisgICAgc3dpdGNoIChhY2Nlc3NUeXBlKSB7CisgICAgY2FzZSBhY2Nlc3NfaW5f
bGlzdDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKwogc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICBTdHJ1
Y3R1cmVTdHViSW5mbygpCiAgICAgICAgIDogYWNjZXNzVHlwZShhY2Nlc3NfdW5zZXQpCkBAIC0x
NzAsNiArMTgxLDEzIEBAIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIGFjY2Vz
c1R5cGUgPSBhY2Nlc3NfcHV0X2J5X2lkX2xpc3Q7CiAgICAgICAgIHUucHV0QnlJZExpc3QubGlz
dCA9IGxpc3Q7CiAgICAgfQorICAgIAorICAgIHZvaWQgaW5pdEluTGlzdChQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIGxpc3QsIGludCBsaXN0U2l6ZSkKKyAgICB7CisgICAgICAgIGFj
Y2Vzc1R5cGUgPSBhY2Nlc3NfaW5fbGlzdDsKKyAgICAgICAgdS5pbkxpc3Quc3RydWN0dXJlTGlz
dCA9IGxpc3Q7CisgICAgICAgIHUuaW5MaXN0Lmxpc3RTaXplID0gbGlzdFNpemU7CisgICAgfQog
ICAgICAgICAKICAgICB2b2lkIHJlc2V0KCkKICAgICB7CkBAIC0yOTYsNiArMzE0LDEwIEBAIHN0
cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBQ
b2x5bW9ycGhpY1B1dEJ5SWRMaXN0KiBsaXN0OwogICAgICAgICB9IHB1dEJ5SWRMaXN0OworICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBzdHJ1Y3R1cmVMaXN0OworICAgICAgICAgICAgaW50IGxpc3RTaXplOworICAgICAgICB9IGlu
TGlzdDsKICAgICB9IHU7CiAKICAgICBSZWZQdHI8SklUU3R1YlJvdXRpbmU+IHN0dWJSb3V0aW5l
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTE2LDYgKzE1MTYsMTIgQEAgYm9v
bCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlRWZmZWN0cyh1bnNpZwogICAgICAgICB9CiAgICAgICAg
IGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOwogICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJbjoKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBk
ZXRlcm1pbmUgd2hlbiB0aGUgcHJvcGVydHkgZGVmaW5pdGVseSBleGlzdHMgYmFzZWQgb24gYWJz
dHJhY3QKKyAgICAgICAgLy8gdmFsdWUgaW5mb3JtYXRpb24uCisgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5jb2RlT3JpZ2luLCBpbmRleEluQmxvY2spOworICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAogICAgIGNhc2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBmb3JOb2RlKG5vZGUpLm1h
a2VUb3AoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM1MCw2ICszMzUw
LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKElkZW50aXR5LCBFZGdlKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSwgTnVtYmVyVXNlKSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3Bf
dG9fbnVtYmVyKTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3BfaW46
IHsKKyAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLAorICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoSW4sIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKSk7CisgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9pbik7CisgICAgICAgIH0KIAogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgLy8gUGFyc2UgZmFpbGVkISBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGJlY2F1
c2UgdGhlIGNhcGFiaWxpdGllcyBjaGVja2VyCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNCw2ICsyMDQsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
CiAgICAgY2FzZSBvcF9wdXRfdG9fYmFzZToKICAgICBjYXNlIG9wX3R5cGVvZjoKICAgICBjYXNl
IG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX2luOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGls
ZUFuZElubGluZTsKICAgICAgICAgCiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE1
MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgyNiw2ICs4MjYsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNl
dFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxDZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ug
SW46IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXQgc29tZSBwb2ludCBoYXZl
IGFycmF5IHByb2ZpbGluZyBvbiBvcF9pbiwgaW4gd2hpY2gKKyAgICAgICAgICAgIC8vIGNhc2Ug
d2Ugd291bGQgYmUgYWJsZSB0byB0dXJuIHRoaXMgaW50byBhIGtpbmQgb2YgR2V0QnlWYWwuCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxD
ZWxsVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgY2FzZSBJZGVudGl0eTogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGlu
ayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBjb2RlT3JpZ2luc1tpXSA9IHJlY29yZC5tX2Nv
ZGVPcmlnaW47CiAgICAgfQogICAgIAotICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVj
dHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpKTsKKyAgICBtX2NvZGVCbG9j
ay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUo
KSArIG1faW5zLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVy
dHlBY2Nlc3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5m
byA9IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKICAgICAgICAgQ29kZUxvY2F0
aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9w
ZXJ0eUFjY2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CkBAIC0yMDUsNiAr
MjA1LDIwIEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAg
ICAgbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhpbmZvLnBh
dGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJz
Rmx1c2hlZCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3JlZ2lzdGVyTW9kZSA9PSBQcm9wZXJ0
eUFjY2Vzc1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZDsKICAgICB9CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1faW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBpbmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fcHJvcGVydHlBY2Nl
c3Nlcy5zaXplKCkgKyBpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwganVtcCA9IGxpbmtC
dWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApOworICAgICAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5t
X3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpOworICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBt
X2luc1tpXS5tX2NvZGVPcmlnaW47CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0ganVtcDsK
KyAgICAgICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247Cisg
ICAgICAgIGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0
d2VlbkNvZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9p
bnNbaV0ubV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNo
LmRmZy5iYXNlR1BSID0gbV9wcm9wZXJ0eUFjY2Vzc2VzW2ldLm1fYmFzZUdQUjsKKyAgICAgICAg
aW5mby5wYXRjaC5kZmcudmFsdWVHUFIgPSBtX3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9yZXN1bHRH
UFI7CisgICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3VzZWRSZWdpc3RlcnMuY29weUlu
Zm8oaW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGluZm8ucGF0Y2guZGZn
LnJlZ2lzdGVyc0ZsdXNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgY29kZUJsb2NrLT5zb3J0U3Ry
dWN0dXJlU3R1YkluZm9zKCk7CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mQ2Fs
bExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw2ICsy
MzUsMjggQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKICAgICBSZWdpc3Rlck1vZGUg
bV9yZWdpc3Rlck1vZGU7CiB9OwogCitjbGFzcyBJblJlY29yZCB7CisgICAgSW5SZWNvcmQoCisg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1
bXAganVtcCwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQYXRoR2VuZXJhdG9yLCBp
bnQ4X3QgYmFzZUdQUiwgaW50OF90IHJlc3VsdEdQUiwKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMpCisgICAgICAgIDogbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisg
ICAgICAgICwgbV9qdW1wKGp1bXApCisgICAgICAgICwgbV9zbG93UGF0aEdlbmVyYXRvcihzbG93
UGF0aEdlbmVyYXRvcikKKyAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQUikKKyAgICAgICAgLCBt
X3Jlc3VsdEdQUihyZXN1bHRHUFIpCisgICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdp
c3RlcnMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX2p1bXA7CisgICAgU2xvd1BhdGhH
ZW5lcmF0b3IqIG1fc2xvd1BhdGhHZW5lcmF0b3I7CisgICAgaW50OF90IG1fYmFzZUdQUjsKKyAg
ICBpbnQ4X3QgbV9yZXN1bHRHUFI7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwor
fTsKKwogLy8gPT09IEpJVENvbXBpbGVyID09PQogLy8KIC8vIERGRzo6SklUQ29tcGlsZXIgaXMg
cmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgSklUIGNvZGUgZnJvbSB0aGUgZGF0YWZsb3cgZ3Jh
cGguCkBAIC0zNzYsNiArMzk4LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1fcHJvcGVy
dHlBY2Nlc3Nlcy5hcHBlbmQocmVjb3JkKTsKICAgICB9CisgICAgCisgICAgdm9pZCBhZGRJbihj
b25zdCBJblJlY29yZCYgcmVjb3JkKQorICAgIHsKKyAgICAgICAgbV9pbnMuYXBwZW5kKHJlY29y
ZCk7CisgICAgfQogCiAgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0Q2FsbCwgQ2FsbCBzbG93
Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUg
Y2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CkBA
IC00ODEsNiArNTA4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIAogICAgIFZlY3RvcjxQcm9w
ZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOworICAgIFZlY3RvcjxJblJl
Y29yZCwgND4gbV9pbnM7CiAgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwgND4gbV9qc0NhbGxzOwog
ICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBtX2V4aXRDb21waWxhdGlvbkluZm87
CiAgICAgVmVjdG9yPFZlY3RvcjxMYWJlbD4gPiBtX2V4aXRTaXRlTGFiZWxzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTUxMzU0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMjYsNiArMjI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKFRvU3RyaW5nLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZU1pZ2h0
Q2xvYmJlcikgXAogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgbWFjcm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKEluLCBOb2RlUmVz
dWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IFwKICAgICAvKiBOb2RlcyB1c2VkIGZvciBhY3RpdmF0aW9ucy4gQWN0aXZhdGlvbiBzdXBwb3J0
IHdvcmtzIGJ5IGhhdmluZyBpdCBhbmNob3JlZCBhdCAqL1wKICAgICAvKiBlcGlsZ291ZXMgdmlh
IFRlYXJPZmZBY3RpdmF0aW9uLCBhbmQgYWxsIENyZWF0ZUFjdGl2YXRpb24gbm9kZXMga2VwdCBh
bGl2ZSBieSAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMTUxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTM5LDYgKzUzOSw0NyBAQCBFbmNv
ZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZXN1bHQpOwogfQogCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQURE
UkVTU19FSkkob3BlcmF0aW9uSW5PcHRpbWl6ZSk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkluT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpCit7CisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIGV4ZWMtPnZt
KCkuZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluIiwgYmFzZSk7
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1YkluZm8ocmV0
dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHllcCBhY2Nlc3NUeXBlID0gc3RhdGljX2Nhc3Q8QWNj
ZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBJZGVudGlmaWVyIGlkZW50KHZt
LCBrZXkpOworICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgIGJvb2wgcmVzdWx0ID0gYXNPYmpl
Y3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCk7CisgICAgCisgICAgUkVMRUFT
RV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBzdHViSW5mby5hY2Nlc3NUeXBlKTsKKyAgICAKKyAgICBp
ZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50
LCByZXN1bHQsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBlbHNlCisgICAgICAgIHN0dWJJbmZvLnNl
ZW4gPSB0cnVlOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHJl
c3VsdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBsKiBrZXkpCit7CisgICAgaWYg
KCFiYXNlLT5pc09iamVjdCgpKSB7CisgICAgICAgIGV4ZWMtPnZtKCkuZXhjZXB0aW9uID0gY3Jl
YXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluIiwgYmFzZSk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7Cisg
ICAgcmV0dXJuIGFzT2JqZWN0KGJhc2UpLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0
ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBrZXkpCit7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4ob3BJbihleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5
KSwgYmFzZSkpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25D
YWxsQ3VzdG9tR2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBQcm9wZXJ0eVNs
b3Q6OkdldFZhbHVlRnVuYyBmdW5jdGlvbiwgU3RyaW5nSW1wbCogdWlkKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDE1MTM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDkgQEAgRW5jb2Rl
ZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJp
bmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25HZXRCeUlkQnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJ
bXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwq
KSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbklu
T3B0aW1pemUoRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25JbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJ
bXBsKik7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihF
eGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7CiBFbmNvZGVkSlNWYWx1ZSBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
UHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNDZWxsKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5vdGlmeUdsb2JhbFZhcldyaXRlKFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQp
IFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTEz
NTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSwxMCBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIEdldFNjb3BlOgogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0
aW9uKFNwZWNDZWxsT3RoZXIpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICAgICAgY2FzZSBJbjoKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVj
Qm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIElkZW50aXR5Ogog
ICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5j
cHAJKHJldmlzaW9uIDE1MTM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTEsNiArMTExMSwxMTIgQEAgdm9pZCBkZmdC
dWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICBkZmdSZXBhdGNoQ2FsbChl
eGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0
ZUdlbmVyaWNQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogfQogCitib29sIHRyeVJl
cGF0Y2hJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90
LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hl
YWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7Cisg
ICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBzaXplX3QgY291bnQg
PSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0Zv
dW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7
CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3RveXBlQ2hhaW4pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdDsKKyAgICBpbnQgbGlzdEluZGV4OworICAgIAorICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCA9IHN0dWJJbmZvLmhvdFBhdGhCZWdpbjsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uCisgICAgCisgICAgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsK
KyAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDAp
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVj
dHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXpl
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9ubGFiZWwocG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgewor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5n
ZXRGcmVlR1BSKCk7CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7
CisgICAgICAgIAorICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBp
ZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90
b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKFRydXN0ZWRJbW02NChKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAg
c3R1YkppdC5tb3ZlKFRydXN0ZWRJbW0zMih3YXNGb3VuZCksIHJlc3VsdEdQUik7CisjZW5kaWYK
KyAgICAgICAgCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MsIGZhaWw7Cisg
ICAgICAgIAorICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CisgICAg
ICAgIAorICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgJnN0dWJKaXQsIGV4ZWMt
PmNvZGVCbG9jaygpKTsKKworICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIs
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nl
c3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CisgICAgICAgIAorICAgICAgICBzdHViUm91dGluZSA9
IEZJTkFMSVpFX0NPREVfRk9SX0RGR19TVFVCKAorICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCisg
ICAgICAgICAgICAoIkRGRyBpbiAoZm91bmQgPSAlcykgc3R1YiBmb3IgJXMsIHJldHVybiBwb2lu
dCAlcCIsCisgICAgICAgICAgICAgICAgd2FzRm91bmQgPyAieWVzIiA6ICJubyIsIHRvQ1N0cmlu
ZygqZXhlYy0+Y29kZUJsb2NrKCkpLmRhdGEoKSwKKyAgICAgICAgICAgICAgICBzdWNjZXNzTGFi
ZWwuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIH0KKyAgICAKKyAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0cnVlKTsKKyAgICAKKyAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBsaXN0
SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSk7Cit9CisKIHN0YXRpYyB2
b2lkIGxpbmtTbG93Rm9yKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIsIFZNKiB2bSwgQ2Fs
bExpbmtJbmZvJiBjYWxsTGlua0luZm8sIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICAgICBpZiAoa2luZCA9PSBDb2RlRm9yQ2FsbCkgewpAQCAtMTMwNSw2ICsxNDExLDExIEBAIHZv
aWQgZGZnUmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImIHJlcGEKICAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpKTsKIH0KIAordm9pZCBkZmdSZXNldEluKFJlcGF0Y2hCdWZmZXImIHJlcGF0Y2hCdWZmZXIs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKK3sKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KDApLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHJldmlzaW9uIDE1MTM1NCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCwxMSArNDAsMTMgQEAgdm9pZCBkZmdCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0ZSos
IEpTVgogdm9pZCBkZmdCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
Jik7CiB2b2lkIGRmZ1JlcGF0Y2hQdXRCeUlEKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElk
ZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYsIFB1
dEtpbmQpOwogdm9pZCBkZmdCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNv
bnN0IElkZW50aWZpZXImLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5m
byYsIFB1dEtpbmQpOwordm9pZCBkZmdSZXBhdGNoSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgY29u
c3QgSWRlbnRpZmllciYsIGJvb2wgd2FzRm91bmQsIGNvbnN0IFByb3BlcnR5U2xvdCYsIFN0cnVj
dHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZv
JiwgQ29kZUJsb2NrKiwgSlNGdW5jdGlvbiogY2FsbGVlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogdm9pZCBkZmdMaW5rU2xvd0ZvcihFeGVjU3RhdGUq
LCBDYWxsTGlua0luZm8mLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIHZvaWQgZGZnTGlua0Ns
b3N1cmVDYWxsKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIFN0cnVjdHVy
ZSosIEV4ZWN1dGFibGVCYXNlKiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKTsKIHZvaWQgZGZnUmVz
ZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdS
ZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7Cit2b2lkIGRm
Z1Jlc2V0SW4oUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIApAQCAtNjEsNiArNjMsNyBAQCBuYW1lc3BhY2UgREZHIHsKIAog
aW5saW5lIE5PX1JFVFVSTiB2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3Ry
dWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIGlubGlu
ZSBOT19SRVRVUk4gdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CitpbmxpbmUgTk9f
UkVUVVJOIHZvaWQgZGZnUmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8m
KSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Mzks
NiArNDczOSw1MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGNvbXBpbGVOZXdGdW5jdGlvbkV4cHJlc3Npb24obm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgICAgICAKKyAgICBjYXNlIEluOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBpZiAoaXNDb25zdGFudChub2RlLT5jaGlsZDEo
KS5ub2RlKCkpKSB7CisgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0KKyAgICAgICAgICAg
ICAgICBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7CisgICAgICAgICAgICBpZiAoc3RyaW5nICYmIHN0cmluZy0+dHJ5R2V0
VmFsdWVJbXBsKCkKKyAgICAgICAgICAgICAgICAmJiBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgp
LT5pc0lkZW50aWZpZXIoKSkgeworICAgICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisgICAgICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICAgICAgICAgIHVzZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgUGF0Y2hhYmxlSnVtcCBqdW1wID0gbV9qaXQucGF0Y2hhYmxlSnVt
cCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE93blB0cjxTbG93UGF0aEdl
bmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAgICAgIGp1
bXAubV9qdW1wLCB0aGlzLCBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHRHUFIsIGJhc2VHUFIs
CisgICAgICAgICAgICAgICAgICAgIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faml0LmFkZEluKEluUmVjb3JkKAorICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwganVtcCwgc2xvd1BhdGguZ2V0KCksIHNh
ZmVDYXN0PGludDhfdD4oYmFzZUdQUiksCisgICAgICAgICAgICAgICAgICAgICBzYWZlQ2FzdDxp
bnQ4X3Q+KHJlc3VsdEdQUiksIHVzZWRSZWdpc3RlcnMoKSkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAganNWYWx1ZVJlc3VsdCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBub2Rl
LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KyAgICAgICAgCisgICAgICAgIGJhc2UudXNlKCk7CisgICAgICAgIGtleS51c2UoKTsKKyAgICAg
ICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uR2VuZXJpY0luLCByZXN1bHRHUFIsIGJhc2VHUFIsIGtleUdQUik7CisgICAgICAgIGpz
VmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGls
ZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIG1faml0LmFkZDY0KFRydXN0ZWRJbW0z
MigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2RlLT5leGVjdXRpb25Db3Vu
dGVyKCktPmFkZHJlc3MoKSkpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MTM1NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtNzIzLDcgKzcyMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQo
Q29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJPck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQ
UiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklU
Q29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3RlcnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAg
IHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwg
R1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJ
VENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAj
ZW5kaWYKLQorICAgIAorICAgIHZvaWQgY2FjaGVkSW4oTm9kZSosIEdQUlJlZyBiYXNlUmVnLCBT
dHJpbmdJbXBsKiBpZGVudGlmaWVyLCBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aFRhcmdldCA9
IEpJVENvbXBpbGVyOjpKdW1wKCkpOworICAgIAogICAgIHZvaWQgbm9uU3BlY3VsYXRpdmVOb25Q
ZWVwaG9sZUNvbXBhcmVOdWxsKEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAg
ICAgdm9pZCBub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChFZGdlIG9wZXJhbmQsIE5v
ZGUqIGJyYW5jaE5vZGUsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIGJvb2wgbm9uU3BlY3Vs
YXRpdmVDb21wYXJlTnVsbChOb2RlKiwgRWRnZSBvcGVyYW5kLCBib29sIGludmVydCA9IGZhbHNl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDEwICsyMDUsMTggQEAgdm9pZCBKU1Zh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkp
IHsKICAgICAgICAgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmSlNTdHJpbmc6OnNfaW5mbykpIHsK
ICAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwo
KSk7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIlN0cmluZzogIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIlN0cmluZyIpOwogICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3BlKCkpCi0gICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIocm9wZSkgIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQo
c3RyaW5nLT50cnlHZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAocm9w
ZSkiKTsKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZ0ltcGwqIGltcGwgPSBzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpOworICAgICAgICAgICAgaWYgKGltcGwpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaW1wbC0+aXNBdG9taWMoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGF0
b21pYykiKTsKKyAgICAgICAgICAgICAgICBpZiAoaW1wbC0+aXNJZGVudGlmaWVyKCkpCisgICAg
ICAgICAgICAgICAgICAgIG91dC5wcmludCgiIChpZGVudGlmaWVyKSIpOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQpIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1wbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxs
KCktPmluaGVyaXRzKCZTdHJ1Y3R1cmU6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0ganNDYXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKTsKICAgICAgICAgICAg
IG91dC5wcmludCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcu
aAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAg
ICAgIGNvbnN0IFN0cmluZyYgdHJ5R2V0VmFsdWUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgU3Ry
aW5nSW1wbCogdHJ5R2V0VmFsdWVJbXBsKCkgY29uc3Q7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0
aCgpIHsgcmV0dXJuIG1fbGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKQEAgLTM3OCw2ICszNzks
MTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAor
ICAgIGlubGluZSBjb25zdCBTdHJpbmdJbXBsKiBKU1N0cmluZzo6dHJ5R2V0VmFsdWVJbXBsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlLmltcGwoKTsKKyAgICB9CisKICAg
ICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVu
c2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUx
MzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMTIsNyArMjEyLDcgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90
b3R5cGVDaGFpbkZvcgogICAgIEpTQ2VsbCogY2VsbCA9IGJhc2UuYXNDZWxsKCk7CiAgICAgc2l6
ZV90IGNvdW50ID0gMDsKICAgICAgICAgCi0gICAgd2hpbGUgKHNsb3RCYXNlICE9IGNlbGwpIHsK
KyAgICB3aGlsZSAoIXNsb3RCYXNlIHx8IHNsb3RCYXNlICE9IGNlbGwpIHsKICAgICAgICAgaWYg
KGNlbGwtPmlzUHJveHkoKSkKICAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hh
aW47CiAgICAgICAgICAgICAKQEAgLTIyNCw4ICsyMjQsMTEgQEAgaW5saW5lIHNpemVfdCBub3Jt
YWxpemVQcm90b3R5cGVDaGFpbkZvcgogICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBzbG90
QmFzZSBpbiBiYXNlJ3MgcHJvdG90eXBlIGNoYWluLCB0aGVuIGJhc2UKICAgICAgICAgLy8gbXVz
dCBiZSBhIHByb3h5IGZvciBhbm90aGVyIG9iamVjdC4KIAotICAgICAgICBpZiAodi5pc051bGwo
KSkKKyAgICAgICAgaWYgKHYuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghc2xvdEJhc2Up
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgICAgICAgICAgcmV0dXJuIEludmFs
aWRQcm90b3R5cGVDaGFpbjsKKyAgICAgICAgfQogCiAgICAgICAgIGNlbGwgPSB2LmFzQ2VsbCgp
OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204289</attachid>
            <date>2013-06-10 23:00:12 -0700</date>
            <delta_ts>2013-06-11 14:39:08 -0700</delta_ts>
            <desc>it did just work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31678</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTEzNTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDcgKzExNCw3IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCks
ICIjIiwgaGFzaCgpLCAiOlsiLCBSYXdQb2ludGVyKHRoaXMpLCAiLT4iLCBSYXdQb2ludGVyKG93
bmVyRXhlY3V0YWJsZSgpKSwgIiwgIiwgaml0VHlwZSwgY29kZVR5cGUoKSk7CiAgICAgaWYgKGNv
ZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAgICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRp
b25LaW5kKCkpOwotICAgIGlmIChtX3Nob3VsZEFsd2F5c0JlSW5saW5lZCkKKyAgICBpZiAodGhp
cy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJ
bmxpbmVkKQogICAgICAgICBvdXQucHJpbnQoIiAoU0FCSSkiKTsKICAgICBpZiAob3duZXJFeGVj
dXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAgICAgIG91dC5wcmludCgiIChOZXZlcklubGlu
ZSkiKTsKQEAgLTI0NzMsMTQgKzI0NzMsMjAgQEAgdm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1Yklu
dGVybmFsKFJlcGF0YwogICAgIGNhc2UgSklUQ29kZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIGlm
IChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpCiAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0
Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHViSW5mbyk7Ci0gICAgICAgIGVsc2UKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNj
ZXNzVHlwZSkpOwogICAgICAgICAgICAgSklUOjpyZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVm
ZmVyLCAmc3R1YkluZm8pOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklU
Q29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQog
ICAgICAgICAgICAgREZHOjpkZmdSZXNldEdldEJ5SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8p
OwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgaWYgKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NU
eXBlKSkKICAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0
dWJJbmZvKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0lu
QWNjZXNzKGFjY2Vzc1R5cGUpKTsKKyAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRJbihyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMyNzgsNiArMzI4
NCwxNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkCiB9CiAKICNp
ZiBFTkFCTEUoSklUKQorc3RhdGljIGJvb2wgc3RydWN0dXJlU3R1YkluZm9MZXNzVGhhbihjb25z
dCBTdHJ1Y3R1cmVTdHViSW5mbyYgYSwgY29uc3QgU3RydWN0dXJlU3R1YkluZm8mIGIpCit7Cisg
ICAgcmV0dXJuIGEuY2FsbFJldHVybkxvY2F0aW9uLmV4ZWN1dGFibGVBZGRyZXNzKCkgPCBiLmNh
bGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVzcygpOworfQorCit2b2lkIENvZGVCbG9j
azo6c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpCit7CisgICAgc3RkOjpzb3J0KG1fc3RydWN0dXJl
U3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJlU3R1YkluZm9zLmVuZCgpLCBzdHJ1Y3R1cmVT
dHViSW5mb0xlc3NUaGFuKTsKK30KKwogdWludDMyX3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRD
b3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVkVGhyZXNob2xkKQogewogICAgIEFTU0VSVChK
SVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwNiw2ICs0MDYsNyBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0
TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHVi
SW5mb3MuZ3JvdyhzaXplKTsgfQorICAgIHZvaWQgc29ydFN0cnVjdHVyZVN0dWJJbmZvcygpOwog
ICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQogICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1
Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2lu
ZGV4XTsgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgdm9pZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYo
KQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9saXN0OgogICAgICAgICBkZWxldGUgdS5wdXRC
eUlkTGlzdC5saXN0OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDog
eworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3Ry
dWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGRlbGV0ZSBwb2x5bW9y
cGhpY1N0cnVjdHVyZXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgogICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKQEAgLTExMSw2ICsxMTYsMTIgQEAgYm9vbCBTdHJ1
Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbgogICAgICAgICBpZiAoIXUucHV0QnlJZExp
c3QubGlzdC0+dmlzaXRXZWFrKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1
Y3R1cmVMaXN0OworICAgICAgICBpZiAoIXBvbHltb3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFr
KHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBp
bnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZlcmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVk
IHRvCiAgICAgICAgIC8vIGRvIGFueXRoaW5nLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDE1MTM1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBAIGVudW0gQWNjZXNzVHlwZSB7CiAgICAgYWNj
ZXNzX3B1dF9ieV9pZF9nZW5lcmljLAogICAgIGFjY2Vzc19nZXRfYXJyYXlfbGVuZ3RoLAogICAg
IGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aCwKKyAgICBhY2Nlc3NfaW5fbGlzdAogfTsKIAogaW5s
aW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKQEAgLTkzLDYg
Kzk0LDE2IEBAIGlubGluZSBib29sIGlzUHV0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGEKICAgICB9
CiB9CiAKK2lubGluZSBib29sIGlzSW5BY2Nlc3MoQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQorewor
ICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAgIGNhc2UgYWNjZXNzX2luX2xpc3Q6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKIHN0cnVjdCBTdHJ1Y3R1cmVTdHViSW5mbyB7CiAgICAgU3RydWN0dXJlU3R1Yklu
Zm8oKQogICAgICAgICA6IGFjY2Vzc1R5cGUoYWNjZXNzX3Vuc2V0KQpAQCAtMTcwLDYgKzE4MSwx
MyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNj
ZXNzX3B1dF9ieV9pZF9saXN0OwogICAgICAgICB1LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0Owog
ICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJbkxpc3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisgICAgeworICAgICAgICBhY2Nlc3NUeXBlID0g
YWNjZXNzX2luX2xpc3Q7CisgICAgICAgIHUuaW5MaXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0Owor
ICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxpc3RTaXplOworICAgIH0KICAgICAgICAgCiAg
ICAgdm9pZCByZXNldCgpCiAgICAgewpAQCAtMjk2LDYgKzMxNCwxMCBAQCBzdHJ1Y3QgU3RydWN0
dXJlU3R1YkluZm8gewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgUG9seW1vcnBoaWNQ
dXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBwdXRCeUlkTGlzdDsKKyAgICAgICAgc3RydWN0
IHsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJl
TGlzdDsKKyAgICAgICAgICAgIGludCBsaXN0U2l6ZTsKKyAgICAgICAgfSBpbkxpc3Q7CiAgICAg
fSB1OwogCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBzdHViUm91dGluZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw2ICsxNTE2LDEyIEBAIGJvb2wgQWJzdHJhY3RT
dGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAgICAgICAgfQogICAgICAgICBjbG9iYmVyV29y
bGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKICAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdo
ZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhpc3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAg
ICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29k
ZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlVG9wKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNTAsNiArMzM1MCwxMiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChJZGVudGl0eSwgRWRnZShnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCksIE51bWJlclVzZSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RvX251bWJlcik7
CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX2luOiB7CisgICAgICAg
ICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKEluLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIGdl
dChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfaW4pOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBiZWNhdXNlIHRoZSBjYXBh
YmlsaXRpZXMgY2hlY2tlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0
LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ug
b3BfcHV0X3RvX2Jhc2U6CiAgICAgY2FzZSBvcF90eXBlb2Y6CiAgICAgY2FzZSBvcF90b19udW1i
ZXI6CisgICAgY2FzZSBvcF9pbjoKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVBbmRJbmxpbmU7
CiAgICAgICAgIAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTEzNTQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MjYsNiArODI2LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRVc2VLaW5kQW5k
VW5ib3hJZlByb2ZpdGFibGU8Q2VsbFVzZT4obm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluOiB7CisgICAg
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGF0IHNvbWUgcG9pbnQgaGF2ZSBhcnJheSBwcm9m
aWxpbmcgb24gb3BfaW4sIGluIHdoaWNoCisgICAgICAgICAgICAvLyBjYXNlIHdlIHdvdWxkIGJl
IGFibGUgdG8gdHVybiB0aGlzIGludG8gYSBraW5kIG9mIEdldEJ5VmFsLgorICAgICAgICAgICAg
CisgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8Q2VsbFVzZT4obm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAogICAgICAgICBj
YXNlIFBoYW50b206CiAgICAgICAgIGNhc2UgSWRlbnRpdHk6IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTEzNTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZl
ciYgbGlua0IKICAgICAgICAgY29kZU9yaWdpbnNbaV0gPSByZWNvcmQubV9jb2RlT3JpZ2luOwog
ICAgIH0KICAgICAKLSAgICBtX2NvZGVCbG9jay0+c2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5m
b3MobV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSk7CisgICAgbV9jb2RlQmxvY2stPnNldE51bWJl
ck9mU3RydWN0dXJlU3R1YkluZm9zKG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCkgKyBtX2lucy5z
aXplKCkpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3Byb3BlcnR5QWNjZXNzZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBtX2NvZGVC
bG9jay0+c3RydWN0dXJlU3R1YkluZm8oaSk7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2Fs
bFJldHVybkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1fcHJvcGVydHlBY2Nlc3Nl
c1tpXS5tX3Nsb3dQYXRoR2VuZXJhdG9yLT5jYWxsKCkpOwpAQCAtMjA1LDYgKzIwNSwyMCBAQCB2
b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtCCiAgICAgICAgIG1fcHJvcGVy
dHlBY2Nlc3Nlc1tpXS5tX3VzZWRSZWdpc3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNl
ZFJlZ2lzdGVycyk7CiAgICAgICAgIGluZm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQgPSBt
X3Byb3BlcnR5QWNjZXNzZXNbaV0ubV9yZWdpc3Rlck1vZGUgPT0gUHJvcGVydHlBY2Nlc3NSZWNv
cmQ6OlJlZ2lzdGVyc0ZsdXNoZWQ7CiAgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2lucy5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9
IG1fY29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgp
ICsgaSk7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGp1bXAgPSBsaW5rQnVmZmVyLmxvY2F0
aW9uT2YobV9pbnNbaV0ubV9qdW1wKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0
dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0ubV9zbG93UGF0aEdl
bmVyYXRvci0+Y2FsbCgpKTsKKyAgICAgICAgaW5mby5jb2RlT3JpZ2luID0gbV9pbnNbaV0ubV9j
b2RlT3JpZ2luOworICAgICAgICBpbmZvLmhvdFBhdGhCZWdpbiA9IGp1bXA7CisgICAgICAgIGlu
Zm8uY2FsbFJldHVybkxvY2F0aW9uID0gY2FsbFJldHVybkxvY2F0aW9uOworICAgICAgICBpbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlID0gZGlmZmVyZW5jZUJldHdlZW5Db2RlUHRy
KGNhbGxSZXR1cm5Mb2NhdGlvbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xv
d1BhdGhHZW5lcmF0b3ItPmxhYmVsKCkpKTsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcuYmFzZUdQ
UiA9IG1faW5zW2ldLm1fYmFzZUdQUjsKKyAgICAgICAgaW5mby5wYXRjaC5kZmcudmFsdWVHUFIg
PSBtX2luc1tpXS5tX3Jlc3VsdEdQUjsKKyAgICAgICAgbV9pbnNbaV0ubV91c2VkUmVnaXN0ZXJz
LmNvcHlJbmZvKGluZm8ucGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpOworICAgICAgICBpbmZvLnBh
dGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gZmFsc2U7CisgICAgfQorICAgIG1fY29kZUJsb2Nr
LT5zb3J0U3RydWN0dXJlU3R1YkluZm9zKCk7CiAgICAgCiAgICAgbV9jb2RlQmxvY2stPnNldE51
bWJlck9mQ2FsbExpbmtJbmZvcyhtX2pzQ2FsbHMuc2l6ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9qc0NhbGxzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiAxNTEzNTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzNSw2ICsyMzUsMjggQEAgc3RydWN0IFByb3BlcnR5QWNjZXNzUmVjb3JkIHsKICAgICBSZWdp
c3Rlck1vZGUgbV9yZWdpc3Rlck1vZGU7CiB9OwogCitzdHJ1Y3QgSW5SZWNvcmQgeworICAgIElu
UmVjb3JkKAorICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIGp1bXAsCisgICAgICAgIFNsb3dQYXRoR2VuZXJhdG9yKiBzbG93UGF0aEdl
bmVyYXRvciwgaW50OF90IGJhc2VHUFIsIGludDhfdCByZXN1bHRHUFIsCisgICAgICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQorICAgICAgICA6IG1fY29kZU9yaWdpbihjb2Rl
T3JpZ2luKQorICAgICAgICAsIG1fanVtcChqdW1wKQorICAgICAgICAsIG1fc2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGhHZW5lcmF0b3IpCisgICAgICAgICwgbV9iYXNlR1BSKGJhc2VHUFIpCisg
ICAgICAgICwgbV9yZXN1bHRHUFIocmVzdWx0R1BSKQorICAgICAgICAsIG1fdXNlZFJlZ2lzdGVy
cyh1c2VkUmVnaXN0ZXJzKQorICAgIHsKKyAgICB9CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2Nv
ZGVPcmlnaW47CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV9qdW1wOworICAg
IFNsb3dQYXRoR2VuZXJhdG9yKiBtX3Nsb3dQYXRoR2VuZXJhdG9yOworICAgIGludDhfdCBtX2Jh
c2VHUFI7CisgICAgaW50OF90IG1fcmVzdWx0R1BSOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJl
Z2lzdGVyczsKK307CisKIC8vID09PSBKSVRDb21waWxlciA9PT0KIC8vCiAvLyBERkc6OkpJVENv
bXBpbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIEpJVCBjb2RlIGZyb20gdGhlIGRh
dGFmbG93IGdyYXBoLgpAQCAtMzc2LDYgKzM5OCwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgICAg
ICBtX3Byb3BlcnR5QWNjZXNzZXMuYXBwZW5kKHJlY29yZCk7CiAgICAgfQorICAgIAorICAgIHZv
aWQgYWRkSW4oY29uc3QgSW5SZWNvcmQmIHJlY29yZCkKKyAgICB7CisgICAgICAgIG1faW5zLmFw
cGVuZChyZWNvcmQpOworICAgIH0KIAogICAgIHZvaWQgYWRkSlNDYWxsKENhbGwgZmFzdENhbGws
IENhbGwgc2xvd0NhbGwsIERhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrLCBDYWxsTGlua0luZm86
OkNhbGxUeXBlIGNhbGxUeXBlLCBHUFJSZWcgY2FsbGVlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiAgICAgewpAQCAtNDgxLDYgKzUwOCw3IEBAIHByaXZhdGU6CiAgICAgfTsKICAgICAKICAgICBW
ZWN0b3I8UHJvcGVydHlBY2Nlc3NSZWNvcmQsIDQ+IG1fcHJvcGVydHlBY2Nlc3NlczsKKyAgICBW
ZWN0b3I8SW5SZWNvcmQsIDQ+IG1faW5zOwogICAgIFZlY3RvcjxKU0NhbGxSZWNvcmQsIDQ+IG1f
anNDYWxsczsKICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gbV9leGl0Q29tcGls
YXRpb25JbmZvOwogICAgIFZlY3RvcjxWZWN0b3I8TGFiZWw+ID4gbV9leGl0U2l0ZUxhYmVsczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE1
MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDYgKzIyNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhUb1N0cmluZywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVNaWdodENsb2JiZXIpIFwKICAgICBtYWNybyhOZXdTdHJpbmdPYmplY3QsIE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKE1ha2VSb3BlLCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhJ
biwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29y
bGQpIFwKICAgICBcCiAgICAgLyogTm9kZXMgdXNlZCBmb3IgYWN0aXZhdGlvbnMuIEFjdGl2YXRp
b24gc3VwcG9ydCB3b3JrcyBieSBoYXZpbmcgaXQgYW5jaG9yZWQgYXQgKi9cCiAgICAgLyogZXBp
bGdvdWVzIHZpYSBUZWFyT2ZmQWN0aXZhdGlvbiwgYW5kIGFsbCBDcmVhdGVBY3RpdmF0aW9uIG5v
ZGVzIGtlcHQgYWxpdmUgYnkgKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE1MTM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJBcmd1bWVudHMuaCIKICNpbmNsdWRlICJCdXR0ZXJmbHlJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29tbW9uU2xvd1BhdGhzLmgiCiAj
aW5jbHVkZSAiQ29waWVkU3BhY2VJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgog
I2luY2x1ZGUgIkRGR1JlcGF0Y2guaCIKQEAgLTUzOSw2ICs1NDAsNTYgQEAgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKIH0KIAorSl9GVU5DVElPTl9XUkFQUEVSX1dJVEhfUkVUVVJOX0FERFJFU1NfRUNJ
KG9wZXJhdGlvbkluT3B0aW1pemUpOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVy
YXRpb25Jbk9wdGltaXplV2l0aFJldHVybkFkZHJlc3MoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwq
IGJhc2UsIFN0cmluZ0ltcGwqIGtleSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQor
eworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIAorICAgIGlmICghYmFzZS0+aXNPYmplY3QoKSkgeworICAg
ICAgICB2bS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhlYywgImluIiwg
YmFzZSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBleGVjLT5jb2RlQmxvY2soKS0+Z2V0U3R1Yklu
Zm8ocmV0dXJuQWRkcmVzcyk7CisgICAgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlID0gc3RhdGljX2Nh
c3Q8QWNjZXNzVHlwZT4oc3R1YkluZm8uYWNjZXNzVHlwZSk7CisKKyAgICBJZGVudGlmaWVyIGlk
ZW50KHZtLCBrZXkpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UpOworICAgIGJvb2wgcmVz
dWx0ID0gYXNPYmplY3QoYmFzZSktPmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xvdCk7
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlQoYWNjZXNzVHlwZSA9PSBzdHViSW5mby5hY2Nlc3NU
eXBlKTsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uc2VlbikKKyAgICAgICAgZGZnUmVwYXRjaElu
KGV4ZWMsIGJhc2UsIGlkZW50LCByZXN1bHQsIHNsb3QsIHN0dWJJbmZvKTsKKyAgICBlbHNlCisg
ICAgICAgIHN0dWJJbmZvLnNlZW4gPSB0cnVlOworICAgIAorICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKHJlc3VsdCkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBTdHJpbmdJbXBs
KiBrZXkpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisKKyAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsK
KyAgICAgICAgdm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJp
biIsIGJhc2UpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBJ
ZGVudGlmaWVyIGlkZW50KHZtLCBrZXkpOworICAgIHJldHVybiBhc09iamVjdChiYXNlKS0+aGFz
UHJvcGVydHkoZXhlYywgaWRlbnQpOworfQorCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlbmVyaWNJbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2Rl
ZEpTVmFsdWUga2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oQ29tbW9uU2xvd1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29k
ZShrZXkpLCBiYXNlKSkpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3Bl
cnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAg
Vk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQCBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0
cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5n
SW1wbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUqLCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0
cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJp
Y0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZhbHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5B
TDsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJ
T04gb3BlcmF0aW9uTm90aWZ5R2xvYmFsVmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCkgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDEwIEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFBy
ZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEluOgorICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9u
KFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgSWRlbnRp
dHk6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5jaGlsZDEo
KS0+cHJlZGljdGlvbigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBh
dGNoLmNwcAkocmV2aXNpb24gMTUxMzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExMSw2ICsxMTExLDEyMiBAQCB2b2lk
IGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgIGRmZ1JlcGF0Y2hD
YWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJv
cHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKK3N0YXRp
YyBib29sIHRyeVJlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFi
YXNlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICgh
c2xvdC5pc0NhY2hlYWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3Ry
dWN0dXJlKCk7CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBz
aXplX3QgY291bnQgPSBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMs
IGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5zbG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zm
c2V0SWdub3JlZCk7CisgICAgaWYgKGNvdW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0OworICAgIGludCBsaXN0SW5kZXg7CisgICAg
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJl
Z2luOworICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWw7CisgICAgCisgICAgaWYg
KHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsK
KyAgICAgICAgc3R1YkluZm8uaW5pdEluTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDAp
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoCisgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
bG93Q2FzZSk7CisgICAgICAgIGxpc3RJbmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVj
dHVyZUxpc3Q7CisgICAgICAgIGxpc3RJbmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXpl
OworICAgICAgICBzbG93Q2FzZUxhYmVsID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMp
OworICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgewor
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0
Y2guZGZnLmJhc2VHUFIpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8
R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5n
ZXRGcmVlR1BSKCk7CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7
CisgICAgICAgIAorICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBp
ZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BS
ID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVjdFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsK
KyAgICAgICAgICAgIHN0dWJKaXQucHVzaChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVk
VG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNlczsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChz
dHViSml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSkpOworICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0
dXJlID0gc3RydWN0dXJlOworICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBj
aGFpbi0+aGVhZCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSwgKytpdCkgeworICAgICAgICAgICAgSlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1
cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZvckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRT
dHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90
b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVjLT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQs
CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAg
IGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsK
KyNlbHNlCisgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgc3VjY2VzcywgZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0
b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3Vj
Y2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKnZtLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAg
IGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsK
KyAgICAgICAgCisgICAgICAgIHN0dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NU
VUIoCisgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgICAgICgiREZHIEluIChmb3Vu
ZCA9ICVzKSBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB3
YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwgdG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0
YSgpLAorICAgICAgICAgICAgICAgIHN1Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7
CisgICAgfQorICAgIAorICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIHRydWUpOworICAgIHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7CisgICAg
CisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAKKyAgICBy
ZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQor
Cit2b2lkIGRmZ1JlcGF0Y2hJbigKKyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHRy
eVJlcGF0Y2hJbihleGVjLCBiYXNlLCBpZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkluKTsKK30KKwogc3RhdGljIHZv
aWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxs
TGlua0luZm8mIGNhbGxMaW5rSW5mbywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewog
ICAgIGlmIChraW5kID09IENvZGVGb3JDYWxsKSB7CkBAIC0xMzA1LDYgKzE0MjEsMTEgQEAgdm9p
ZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYQogICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwogfQogCit2b2lkIGRmZ1Jlc2V0SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTUxMzU0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDExICs0MCwxMyBAQCB2b2lkIGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwg
SlNWCiB2b2lkIGRmZ0J1aWxkR2V0QnlJRFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8m
KTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRl
bnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0
S2luZCk7CiB2b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29u
c3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZv
JiwgUHV0S2luZCk7Cit2b2lkIGRmZ1JlcGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25z
dCBJZGVudGlmaWVyJiwgYm9vbCB3YXNGb3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnTGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8m
LCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiB2b2lkIGRmZ0xpbmtTbG93Rm9yKEV4ZWNTdGF0ZSos
IENhbGxMaW5rSW5mbyYsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogdm9pZCBkZmdMaW5rQ2xv
c3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJl
KiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOwogdm9pZCBkZmdSZXNl
dEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1Jl
c2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZGZn
UmVzZXRJbihSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwogCkBAIC02MSw2ICs2Myw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBp
bmxpbmUgTk9fUkVUVVJOIHZvaWQgZGZnUmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogaW5saW5l
IE5PX1JFVFVSTiB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJl
U3R1YkluZm8mKSB7IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19S
RVRVUk4gdm9pZCBkZmdSZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
IHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczOSw2
ICs0NzM5LDU0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAorICAgIGNhc2UgSW46IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc0NvbnN0YW50KG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpIHsKKyAgICAgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPQorICAgICAgICAgICAg
ICAgIGpzRHluYW1pY0Nhc3Q8SlNTdHJpbmcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLT50cnlHZXRW
YWx1ZUltcGwoKQorICAgICAgICAgICAgICAgICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkt
PmlzSWRlbnRpZmllcigpKSB7CisgICAgICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwor
CisgICAgICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBqdW1wID0gbV9q
aXQucGF0Y2hhYmxlSnVtcCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE93
blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENhbGwoCisgICAgICAg
ICAgICAgICAgICAgIGp1bXAubV9qdW1wLCB0aGlzLCBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1
bHRHUFIsIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgIHN0cmluZy0+dHJ5R2V0VmFsdWVJ
bXBsKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faml0LmFkZEluKElu
UmVjb3JkKAorICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbiwganVtcCwgc2xv
d1BhdGguZ2V0KCksIHNhZmVDYXN0PGludDhfdD4oYmFzZUdQUiksCisgICAgICAgICAgICAgICAg
ICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHJlc3VsdEdQUiksIHVzZWRSZWdpc3RlcnMoKSkpOworICAg
ICAgICAgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoLnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KAorICAgICAgICAgICAgICAgICAg
ICByZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIAor
ICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAg
a2V5LnVzZSgpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZW5lcmljSW4sIHJlc3VsdEdQUiwgYmFzZUdQUiwga2V5
R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRK
U0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICAgICAgbV9qaXQu
YWRkNjQoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVBZGRyZXNzKG5v
ZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKS0+YWRkcmVzcygpKSk7CiAgICAgICAgIGJyZWFrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03MjMsNyArNzIzLDkgQEAgcHVibGljOgogICAgIHZv
aWQgY2FjaGVkR2V0QnlJZChDb2RlT3JpZ2luLCBHUFJSZWcgYmFzZVRhZ0dQUk9yTm9uZSwgR1BS
UmVnIGJhc2VQYXlsb2FkR1BSLCBHUFJSZWcgcmVzdWx0VGFnR1BSLCBHUFJSZWcgcmVzdWx0UGF5
bG9hZEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGhUYXJnZXQgPSBKSVRDb21waWxlcjo6SnVtcCgpLCBTcGlsbFJlZ2lzdGVyc01vZGUgPSBO
ZWVkVG9TcGlsbCk7CiAgICAgdm9pZCBjYWNoZWRQdXRCeUlkKENvZGVPcmlnaW4sIEdQUlJlZyBi
YXNlUGF5bG9hZEdQUiwgR1BSUmVnIHZhbHVlVGFnR1BSLCBHUFJSZWcgdmFsdWVQYXlsb2FkR1BS
LCBFZGdlIHZhbHVlVXNlLCBHUFJSZWcgc2NyYXRjaEdQUiwgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciwgUHV0S2luZCwgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGhUYXJnZXQgPSBKSVRDb21w
aWxlcjo6SnVtcCgpKTsKICNlbmRpZgotCisgICAgCisgICAgdm9pZCBjYWNoZWRJbihOb2RlKiwg
R1BSUmVnIGJhc2VSZWcsIFN0cmluZ0ltcGwqIGlkZW50aWZpZXIsIEpJVENvbXBpbGVyOjpKdW1w
IHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CisgICAgCiAgICAgdm9pZCBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZU51bGwoRWRnZSBvcGVyYW5kLCBib29sIGlu
dmVydCA9IGZhbHNlKTsKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
KEVkZ2Ugb3BlcmFuZCwgTm9kZSogYnJhbmNoTm9kZSwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CiAg
ICAgYm9vbCBub25TcGVjdWxhdGl2ZUNvbXBhcmVOdWxsKE5vZGUqLCBFZGdlIG9wZXJhbmQsIGJv
b2wgaW52ZXJ0ID0gZmFsc2UpOwpAQCAtMTE3MCw3ICsxMTcyLDcgQEAgcHVibGljOgogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cihw
b2ludGVyKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0
UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9Ci0gICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0
LCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEsIGNvbnN0IFN0cmluZ0ltcGwqIHVpZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHVpZCkpOwog
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVy
YXRpb24sIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcAkocmV2aXNpb24gMTUxMzU0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNSwxMCArMjA1LDE4
IEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAgICB9IGVsc2Ug
aWYgKGlzQ2VsbCgpKSB7CiAgICAgICAgIGlmIChhc0NlbGwoKS0+aW5oZXJpdHMoJkpTU3RyaW5n
OjpzX2luZm8pKSB7CiAgICAgICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3Ry
aW5nKj4oYXNDZWxsKCkpOwotICAgICAgICAgICAgb3V0LnByaW50KCJTdHJpbmc6ICIpOworICAg
ICAgICAgICAgb3V0LnByaW50KCJTdHJpbmciKTsKICAgICAgICAgICAgIGlmIChzdHJpbmctPmlz
Um9wZSgpKQotICAgICAgICAgICAgICAgIG91dC5wcmludCgiKHJvcGUpICIpOwotICAgICAgICAg
ICAgb3V0LnByaW50KHN0cmluZy0+dHJ5R2V0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgKHJvcGUpIik7CisgICAgICAgICAgICBjb25zdCBTdHJpbmdJbXBsKiBpbXBsID0g
c3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKTsKKyAgICAgICAgICAgIGlmIChpbXBsKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGltcGwtPmlzQXRvbWljKCkpCisgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiIChhdG9taWMpIik7CisgICAgICAgICAgICAgICAgaWYgKGltcGwtPmlzSWRlbnRp
ZmllcigpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoaWRlbnRpZmllcikiKTsK
KyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICh1bnJlc29s
dmVkKSIpOworICAgICAgICAgICAgb3V0LnByaW50KCI6ICIsIGltcGwpOwogICAgICAgICB9IGVs
c2UgaWYgKGFzQ2VsbCgpLT5pbmhlcml0cygmU3RydWN0dXJlOjpzX2luZm8pKSB7CiAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGpzQ2FzdDxTdHJ1Y3R1cmUqPihhc0NlbGwoKSk7
CiAgICAgICAgICAgICBvdXQucHJpbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKEV4ZWNTdGF0ZSop
IGNvbnN0OwogICAgICAgICBjb25zdCBTdHJpbmcmIHRyeUdldFZhbHVlKCkgY29uc3Q7CisgICAg
ICAgIGNvbnN0IFN0cmluZ0ltcGwqIHRyeUdldFZhbHVlSW1wbCgpIGNvbnN0OwogICAgICAgICB1
bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVybiBtX2xlbmd0aDsgfQogCiAgICAgICAgIEpTVmFsdWUg
dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CkBA
IC0zNzgsNiArMzc5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gbV92YWx1
ZTsKICAgICB9CiAKKyAgICBpbmxpbmUgY29uc3QgU3RyaW5nSW1wbCogSlNTdHJpbmc6OnRyeUdl
dFZhbHVlSW1wbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZS5pbXBsKCk7
CisgICAgfQorCiAgICAgaW5saW5lIEpTU3RyaW5nKiBKU1N0cmluZzo6Z2V0SW5kZXgoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIHsKICAgICAgICAgQVNTRVJUKGNhbkdldEluZGV4
KGkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHJldmlzaW9uIDE1MTM1NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjEyLDcgKzIxMiw3IEBAIGlubGluZSBzaXplX3Qg
bm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3IKICAgICBKU0NlbGwqIGNlbGwgPSBiYXNlLmFzQ2Vs
bCgpOwogICAgIHNpemVfdCBjb3VudCA9IDA7CiAgICAgICAgIAotICAgIHdoaWxlIChzbG90QmFz
ZSAhPSBjZWxsKSB7CisgICAgd2hpbGUgKCFzbG90QmFzZSB8fCBzbG90QmFzZSAhPSBjZWxsKSB7
CiAgICAgICAgIGlmIChjZWxsLT5pc1Byb3h5KCkpCiAgICAgICAgICAgICByZXR1cm4gSW52YWxp
ZFByb3RvdHlwZUNoYWluOwogICAgICAgICAgICAgCkBAIC0yMjQsOCArMjI0LDExIEBAIGlubGlu
ZSBzaXplX3Qgbm9ybWFsaXplUHJvdG90eXBlQ2hhaW5Gb3IKICAgICAgICAgLy8gSWYgd2UgZGlk
bid0IGZpbmQgc2xvdEJhc2UgaW4gYmFzZSdzIHByb3RvdHlwZSBjaGFpbiwgdGhlbiBiYXNlCiAg
ICAgICAgIC8vIG11c3QgYmUgYSBwcm94eSBmb3IgYW5vdGhlciBvYmplY3QuCiAKLSAgICAgICAg
aWYgKHYuaXNOdWxsKCkpCisgICAgICAgIGlmICh2LmlzTnVsbCgpKSB7CisgICAgICAgICAgICBp
ZiAoIXNsb3RCYXNlKQorICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKICAgICAgICAgICAg
IHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47CisgICAgICAgIH0KIAogICAgICAgICBjZWxs
ID0gdi5hc0NlbGwoKTsKIApAQCAtMjQwLDcgKzI0Myw2IEBAIGlubGluZSBzaXplX3Qgbm9ybWFs
aXplUHJvdG90eXBlQ2hhaW5Gb3IKICAgICAgICAgKytjb3VudDsKICAgICB9CiAgICAgICAgIAot
ICAgIEFTU0VSVChjb3VudCk7CiAgICAgcmV0dXJuIGNvdW50OwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204361</attachid>
            <date>2013-06-11 14:39:08 -0700</date>
            <delta_ts>2013-06-11 18:07:02 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37413</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDcyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgyIEBA
CisyMDEzLTA2LTExICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBzdXBwb3J0IG9wX2luIGFuZCBpdCBzaG91bGQgdXNlIHBh
dGNoaW5nIHRvIG1ha2UgaXQgZmFzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE3Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBJbXBsZW1lbnQgb3BfaW4gaW4gdGhlIERGRyBhbmQgZ2l2
ZSBpdCBwYXRjaGluZy4gVGhlIGNvZGUgd2UgZ2VuZXJhdGUgaXMganVzdAorICAgICAgICBhIGp1
bXAgb24gdGhlIGhvdCBwYXRoLCBhbmQgdGhlIHNsb3cgcGF0aHMgZ2VuZXJhdGUgc3R1YnMgYW5k
IGxpbmsgdGhlIGp1bXAgdG8KKyAgICAgICAgdGhlbS4gSSBkaWRuJ3Qgd2FudCB0byBib3RoZXIg
d2l0aCBwYXRjaGluZyBzdHJ1Y3R1cmVzIGFuZCBsb2FkIG9mZnNldHMgYW5kCisgICAgICAgIHRo
ZSBsaWtlLCBhbHRob3VnaCBJIHByb2JhYmx5IGNvdWxkIGhhdmUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGlzIGEgZ2lub3Jtb3VzIHNwZWVkLXVwIG9uIG1pY3JvYmVuY2htYXJrcyBmb3IgImlu
Iiwgb2J2aW91c2x5LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpyZXNldFN0dWJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OnN0cnVjdHVyZVN0
dWJJbmZvTGVzc1RoYW4pOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
Ojpzb3J0U3RydWN0dXJlU3R1YkluZm9zKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2su
aDoKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAg
ICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaDoKKyAgICAgICAgKEpTQzo6aXNJbkFj
Y2Vzcyk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoU3RydWN0dXJlU3R1YkluZm8pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6aW5pdEluTGlzdCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAg
KiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5
TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmxpbmspOgorICAgICAgICAq
IGRmZy9ERkdKSVRDb21waWxlci5oOgorICAgICAgICAoSlNDOjpERkc6OkluUmVjb3JkOjpJblJl
Y29yZCk6CisgICAgICAgIChJblJlY29yZCk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSklU
Q29tcGlsZXIpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjphZGRJbik6CisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICog
ZGZnL0RGR1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjpERkc6OnRyeVJlcGF0Y2hJbik6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OmRmZ1JlcGF0Y2hJbik6CisgICAgICAg
IChKU0M6OkRGRzo6ZGZnUmVzZXRJbik6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guaDoKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVzZXRJbik6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUluKToKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBydW50aW1l
L0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpkdW1wKToKKyAgICAgICAg
KiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU1N0cmluZyk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjp0cnlHZXRWYWx1ZUltcGwpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6bm9ybWFsaXplUHJvdG90eXBlQ2hh
aW5Gb3JDaGFpbkFjY2Vzcyk6CisKIDIwMTMtMDYtMTAgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhu
ZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBpc0NvbnRyYXZlbmVkQnlTdHJ1Y3R1cmUgaXMg
YmFja3dhcmRzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw3ICsxMTQsNyBAQCB2b2lk
IENvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAgICAgb3V0LnByaW50KGluZmVy
cmVkTmFtZSgpLCAiIyIsIGhhc2goKSwgIjpbIiwgUmF3UG9pbnRlcih0aGlzKSwgIi0+IiwgUmF3
UG9pbnRlcihvd25lckV4ZWN1dGFibGUoKSksICIsICIsIGppdFR5cGUsIGNvZGVUeXBlKCkpOwog
ICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgb3V0LnByaW50KHNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKLSAgICBpZiAobV9zaG91bGRBbHdheXNCZUlubGluZWQpCisg
ICAgaWYgKHRoaXMtPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCAmJiBtX3Nob3Vs
ZEFsd2F5c0JlSW5saW5lZCkKICAgICAgICAgb3V0LnByaW50KCIgKFNBQkkpIik7CiAgICAgaWYg
KG93bmVyRXhlY3V0YWJsZSgpLT5uZXZlcklubGluZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAo
TmV2ZXJJbmxpbmUpIik7CkBAIC0yNDczLDE0ICsyNDczLDIwIEBAIHZvaWQgQ29kZUJsb2NrOjpy
ZXNldFN0dWJJbnRlcm5hbChSZXBhdGMKICAgICBjYXNlIEpJVENvZGU6OkJhc2VsaW5lSklUOgog
ICAgICAgICBpZiAoaXNHZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQogICAgICAgICAgICAgSklU
OjpyZXNldFBhdGNoR2V0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOwotICAgICAgICBl
bHNlCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNQdXRCeUlk
QWNjZXNzKGFjY2Vzc1R5cGUpKTsKICAgICAgICAgICAgIEpJVDo6cmVzZXRQYXRjaFB1dEJ5SWQo
cmVwYXRjaEJ1ZmZlciwgJnN0dWJJbmZvKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEpJVENvZGU6OkRGR0pJVDoKICAgICAgICAgaWYgKGlzR2V0QnlJZEFjY2VzcyhhY2Nl
c3NUeXBlKSkKICAgICAgICAgICAgIERGRzo6ZGZnUmVzZXRHZXRCeUlEKHJlcGF0Y2hCdWZmZXIs
IHN0dWJJbmZvKTsKLSAgICAgICAgZWxzZQorICAgICAgICBlbHNlIGlmIChpc1B1dEJ5SWRBY2Nl
c3MoYWNjZXNzVHlwZSkpCiAgICAgICAgICAgICBERkc6OmRmZ1Jlc2V0UHV0QnlJRChyZXBhdGNo
QnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNJbkFjY2VzcyhhY2Nlc3NUeXBlKSk7CisgICAgICAgICAgICBERkc6OmRmZ1Jlc2V0
SW4ocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0z
Mjc4LDYgKzMyODQsMTYgQEAgdm9pZCBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9s
ZAogfQogCiAjaWYgRU5BQkxFKEpJVCkKK3N0YXRpYyBib29sIHN0cnVjdHVyZVN0dWJJbmZvTGVz
c1RoYW4oY29uc3QgU3RydWN0dXJlU3R1YkluZm8mIGEsIGNvbnN0IFN0cnVjdHVyZVN0dWJJbmZv
JiBiKQoreworICAgIHJldHVybiBhLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpIDwgYi5jYWxsUmV0dXJuTG9jYXRpb24uZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwordm9p
ZCBDb2RlQmxvY2s6OnNvcnRTdHJ1Y3R1cmVTdHViSW5mb3MoKQoreworICAgIHN0ZDo6c29ydCht
X3N0cnVjdHVyZVN0dWJJbmZvcy5iZWdpbigpLCBtX3N0cnVjdHVyZVN0dWJJbmZvcy5lbmQoKSwg
c3RydWN0dXJlU3R1YkluZm9MZXNzVGhhbik7Cit9CisKIHVpbnQzMl90IENvZGVCbG9jazo6YWRq
dXN0ZWRFeGl0Q291bnRUaHJlc2hvbGQodWludDMyX3QgZGVzaXJlZFRocmVzaG9sZCkKIHsKICAg
ICBBU1NFUlQoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTUxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MDYsNiArNDA2LDcgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKEpJVCkKICAg
ICB2b2lkIHNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9zKHNpemVfdCBzaXplKSB7IG1fc3Ry
dWN0dXJlU3R1YkluZm9zLmdyb3coc2l6ZSk7IH0KKyAgICB2b2lkIHNvcnRTdHJ1Y3R1cmVTdHVi
SW5mb3MoKTsKICAgICBzaXplX3QgbnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MoKSBjb25zdCB7
IHJldHVybiBtX3N0cnVjdHVyZVN0dWJJbmZvcy5zaXplKCk7IH0KICAgICBTdHJ1Y3R1cmVTdHVi
SW5mbyYgc3RydWN0dXJlU3R1YkluZm8oaW50IGluZGV4KSB7IHJldHVybiBtX3N0cnVjdHVyZVN0
dWJJbmZvc1tpbmRleF07IH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE1MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDExIEBAIHZvaWQgU3RydWN0dXJlU3R1Yklu
Zm86OmRlcmVmKCkKICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfbGlzdDoKICAgICAgICAgZGVs
ZXRlIHUucHV0QnlJZExpc3QubGlzdDsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgYWNjZXNz
X2luX2xpc3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBkZWxl
dGUgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzOworICAgICAgICByZXR1cm47CisgICAgfQogICAgIGNh
c2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90
bzoKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CkBAIC0xMTEsNiArMTE2LDEyIEBA
IGJvb2wgU3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW4KICAgICAgICAgaWYgKCF1
LnB1dEJ5SWRMaXN0Lmxpc3QtPnZpc2l0V2VhaygpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBicmVhazsKKyAgICBjYXNlIGFjY2Vzc19pbl9saXN0OiB7CisgICAgICAgIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1cmVzID0gdS5p
bkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgaWYgKCFwb2x5bW9ycGhpY1N0cnVjdHVyZXMt
PnZpc2l0V2Vhayh1LmluTGlzdC5saXN0U2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICAvLyBUaGUgcmVz
dCBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGRvbid0IHJlcXVpcmUgcmVmZXJlbmNlcywgc28gdGhlcmUg
aXMgbm8gbmVlZCB0bwogICAgICAgICAvLyBkbyBhbnl0aGluZy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNyBAQCBlbnVtIEFjY2Vzc1R5cGUg
ewogICAgIGFjY2Vzc19wdXRfYnlfaWRfZ2VuZXJpYywKICAgICBhY2Nlc3NfZ2V0X2FycmF5X2xl
bmd0aCwKICAgICBhY2Nlc3NfZ2V0X3N0cmluZ19sZW5ndGgsCisgICAgYWNjZXNzX2luX2xpc3QK
IH07CiAKIGlubGluZSBib29sIGlzR2V0QnlJZEFjY2VzcyhBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUp
CkBAIC05Myw2ICs5NCwxNiBAQCBpbmxpbmUgYm9vbCBpc1B1dEJ5SWRBY2Nlc3MoQWNjZXNzVHlw
ZSBhCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBpc0luQWNjZXNzKEFjY2Vzc1R5cGUgYWNjZXNz
VHlwZSkKK3sKKyAgICBzd2l0Y2ggKGFjY2Vzc1R5cGUpIHsKKyAgICBjYXNlIGFjY2Vzc19pbl9s
aXN0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCiBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgIFN0cnVj
dHVyZVN0dWJJbmZvKCkKICAgICAgICAgOiBhY2Nlc3NUeXBlKGFjY2Vzc191bnNldCkKQEAgLTE3
MCw2ICsxODEsMTMgQEAgc3RydWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgYWNjZXNz
VHlwZSA9IGFjY2Vzc19wdXRfYnlfaWRfbGlzdDsKICAgICAgICAgdS5wdXRCeUlkTGlzdC5saXN0
ID0gbGlzdDsKICAgICB9CisgICAgCisgICAgdm9pZCBpbml0SW5MaXN0KFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogbGlzdCwgaW50IGxpc3RTaXplKQorICAgIHsKKyAgICAgICAgYWNj
ZXNzVHlwZSA9IGFjY2Vzc19pbl9saXN0OworICAgICAgICB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0
ID0gbGlzdDsKKyAgICAgICAgdS5pbkxpc3QubGlzdFNpemUgPSBsaXN0U2l6ZTsKKyAgICB9CiAg
ICAgICAgIAogICAgIHZvaWQgcmVzZXQoKQogICAgIHsKQEAgLTI5Niw2ICszMTQsMTAgQEAgc3Ry
dWN0IFN0cnVjdHVyZVN0dWJJbmZvIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIFBv
bHltb3JwaGljUHV0QnlJZExpc3QqIGxpc3Q7CiAgICAgICAgIH0gcHV0QnlJZExpc3Q7CisgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHN0cnVjdHVyZUxpc3Q7CisgICAgICAgICAgICBpbnQgbGlzdFNpemU7CisgICAgICAgIH0gaW5M
aXN0OwogICAgIH0gdTsKIAogICAgIFJlZlB0cjxKSVRTdHViUm91dGluZT4gc3R1YlJvdXRpbmU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5j
cHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MTYsNiArMTUxNiwxMyBAQCBib29s
IEFic3RyYWN0U3RhdGU6OmV4ZWN1dGVFZmZlY3RzKHVuc2lnCiAgICAgICAgIH0KICAgICAgICAg
Y2xvYmJlcldvcmxkKG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CiAgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBjYXNlIEluOgorICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGRl
dGVybWluZSB3aGVuIHRoZSBwcm9wZXJ0eSBkZWZpbml0ZWx5IGV4aXN0cyBiYXNlZCBvbiBhYnN0
cmFjdAorICAgICAgICAvLyB2YWx1ZSBpbmZvcm1hdGlvbi4KKyAgICAgICAgY2xvYmJlcldvcmxk
KG5vZGUtPmNvZGVPcmlnaW4sIGluZGV4SW5CbG9jayk7CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjQm9vbGVhbik7CisgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
Y2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZVRvcCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUwLDYgKzMzNTAsMTIgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoSWRlbnRpdHksIEVkZ2UoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQp
LCBOdW1iZXJVc2UpKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF90b19udW1iZXIpOwog
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBvcF9pbjogeworICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChJbiwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpKTsKKyAgICAgICAgICAgIE5FWFRfT1BD
T0RFKG9wX2luKTsKKyAgICAgICAgfQogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAv
LyBQYXJzZSBmYWlsZWQhIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gYmVjYXVzZSB0aGUgY2FwYWJp
bGl0aWVzIGNoZWNrZXIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3
IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9w
X3B1dF90b19iYXNlOgogICAgIGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3BfdG9fbnVtYmVy
OgorICAgIGNhc2Ugb3BfaW46CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwog
ICAgICAgICAKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODI2LDYgKzgyNiwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVu
Ym94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbjogeworICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhdCBzb21lIHBvaW50IGhhdmUgYXJyYXkgcHJvZmls
aW5nIG9uIG9wX2luLCBpbiB3aGljaAorICAgICAgICAgICAgLy8gY2FzZSB3ZSB3b3VsZCBiZSBh
YmxlIHRvIHR1cm4gdGhpcyBpbnRvIGEga2luZCBvZiBHZXRCeVZhbC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBQaGFudG9tOgogICAgICAgICBjYXNlIElkZW50aXR5OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXIm
IGxpbmtCCiAgICAgICAgIGNvZGVPcmlnaW5zW2ldID0gcmVjb3JkLm1fY29kZU9yaWdpbjsKICAg
ICB9CiAgICAgCi0gICAgbV9jb2RlQmxvY2stPnNldE51bWJlck9mU3RydWN0dXJlU3R1YkluZm9z
KG1fcHJvcGVydHlBY2Nlc3Nlcy5zaXplKCkpOworICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJP
ZlN0cnVjdHVyZVN0dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpICsgbV9pbnMuc2l6
ZSgpKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9wcm9wZXJ0eUFjY2Vzc2VzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBpbmZvID0gbV9jb2RlQmxv
Y2stPnN0cnVjdHVyZVN0dWJJbmZvKGkpOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxS
ZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3Byb3BlcnR5QWNjZXNzZXNb
aV0ubV9zbG93UGF0aEdlbmVyYXRvci0+Y2FsbCgpKTsKQEAgLTIwNSw2ICsyMDUsMjAgQEAgdm9p
ZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQgogICAgICAgICBtX3Byb3BlcnR5
QWNjZXNzZXNbaV0ubV91c2VkUmVnaXN0ZXJzLmNvcHlJbmZvKGluZm8ucGF0Y2guZGZnLnVzZWRS
ZWdpc3RlcnMpOwogICAgICAgICBpbmZvLnBhdGNoLmRmZy5yZWdpc3RlcnNGbHVzaGVkID0gbV9w
cm9wZXJ0eUFjY2Vzc2VzW2ldLm1fcmVnaXN0ZXJNb2RlID09IFByb3BlcnR5QWNjZXNzUmVjb3Jk
OjpSZWdpc3RlcnNGbHVzaGVkOwogICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9pbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIGluZm8gPSBt
X2NvZGVCbG9jay0+c3RydWN0dXJlU3R1YkluZm8obV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSAr
IGkpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBqdW1wID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKG1faW5zW2ldLm1fanVtcCk7CisgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVy
bkxvY2F0aW9uID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mKG1faW5zW2ldLm1fc2xvd1BhdGhHZW5l
cmF0b3ItPmNhbGwoKSk7CisgICAgICAgIGluZm8uY29kZU9yaWdpbiA9IG1faW5zW2ldLm1fY29k
ZU9yaWdpbjsKKyAgICAgICAgaW5mby5ob3RQYXRoQmVnaW4gPSBqdW1wOworICAgICAgICBpbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGNhbGxSZXR1cm5Mb2NhdGlvbjsKKyAgICAgICAgaW5mby5w
YXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSA9IGRpZmZlcmVuY2VCZXR3ZWVuQ29kZVB0cihj
YWxsUmV0dXJuTG9jYXRpb24sIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQ
YXRoR2VuZXJhdG9yLT5sYWJlbCgpKSk7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLmJhc2VHUFIg
PSBtX2luc1tpXS5tX2Jhc2VHUFI7CisgICAgICAgIGluZm8ucGF0Y2guZGZnLnZhbHVlR1BSID0g
bV9pbnNbaV0ubV9yZXN1bHRHUFI7CisgICAgICAgIG1faW5zW2ldLm1fdXNlZFJlZ2lzdGVycy5j
b3B5SW5mbyhpbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgaW5mby5wYXRj
aC5kZmcucmVnaXN0ZXJzRmx1c2hlZCA9IGZhbHNlOworICAgIH0KKyAgICBtX2NvZGVCbG9jay0+
c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpOwogICAgIAogICAgIG1fY29kZUJsb2NrLT5zZXROdW1i
ZXJPZkNhbGxMaW5rSW5mb3MobV9qc0NhbGxzLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fanNDYWxscy5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzUsNiArMjM1LDI4IEBAIHN0cnVjdCBQcm9wZXJ0eUFjY2Vzc1JlY29yZCB7CiAgICAgUmVnaXN0
ZXJNb2RlIG1fcmVnaXN0ZXJNb2RlOwogfTsKIAorc3RydWN0IEluUmVjb3JkIHsKKyAgICBJblJl
Y29yZCgKKyAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6UGF0
Y2hhYmxlSnVtcCBqdW1wLAorICAgICAgICBTbG93UGF0aEdlbmVyYXRvciogc2xvd1BhdGhHZW5l
cmF0b3IsIGludDhfdCBiYXNlR1BSLCBpbnQ4X3QgcmVzdWx0R1BSLAorICAgICAgICBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKKyAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9y
aWdpbikKKyAgICAgICAgLCBtX2p1bXAoanVtcCkKKyAgICAgICAgLCBtX3Nsb3dQYXRoR2VuZXJh
dG9yKHNsb3dQYXRoR2VuZXJhdG9yKQorICAgICAgICAsIG1fYmFzZUdQUihiYXNlR1BSKQorICAg
ICAgICAsIG1fcmVzdWx0R1BSKHJlc3VsdEdQUikKKyAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnMo
dXNlZFJlZ2lzdGVycykKKyAgICB7CisgICAgfQorICAgIAorICAgIENvZGVPcmlnaW4gbV9jb2Rl
T3JpZ2luOworICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIG1fanVtcDsKKyAgICBT
bG93UGF0aEdlbmVyYXRvciogbV9zbG93UGF0aEdlbmVyYXRvcjsKKyAgICBpbnQ4X3QgbV9iYXNl
R1BSOworICAgIGludDhfdCBtX3Jlc3VsdEdQUjsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdp
c3RlcnM7Cit9OworCiAvLyA9PT0gSklUQ29tcGlsZXIgPT09CiAvLwogLy8gREZHOjpKSVRDb21w
aWxlciBpcyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyBKSVQgY29kZSBmcm9tIHRoZSBkYXRh
ZmxvdyBncmFwaC4KQEAgLTM3Niw2ICszOTgsMTEgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
bV9wcm9wZXJ0eUFjY2Vzc2VzLmFwcGVuZChyZWNvcmQpOwogICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZEluKGNvbnN0IEluUmVjb3JkJiByZWNvcmQpCisgICAgeworICAgICAgICBtX2lucy5hcHBl
bmQocmVjb3JkKTsKKyAgICB9CiAKICAgICB2b2lkIGFkZEpTQ2FsbChDYWxsIGZhc3RDYWxsLCBD
YWxsIHNsb3dDYWxsLCBEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjaywgQ2FsbExpbmtJbmZvOjpD
YWxsVHlwZSBjYWxsVHlwZSwgR1BSUmVnIGNhbGxlZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQog
ICAgIHsKQEAgLTQ4MSw2ICs1MDgsNyBAQCBwcml2YXRlOgogICAgIH07CiAgICAgCiAgICAgVmVj
dG9yPFByb3BlcnR5QWNjZXNzUmVjb3JkLCA0PiBtX3Byb3BlcnR5QWNjZXNzZXM7CisgICAgVmVj
dG9yPEluUmVjb3JkLCA0PiBtX2luczsKICAgICBWZWN0b3I8SlNDYWxsUmVjb3JkLCA0PiBtX2pz
Q2FsbHM7CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG1fZXhpdENvbXBpbGF0
aW9uSW5mbzsKICAgICBWZWN0b3I8VmVjdG9yPExhYmVsPiA+IG1fZXhpdFNpdGVMYWJlbHM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNiw2ICsyMjYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgbWFjcm8oVG9TdHJpbmcsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlTWlnaHRDbG9iYmVyKSBcCiAgICAgbWFjcm8oTmV3U3RyaW5nT2JqZWN0LCBOb2RlUmVzdWx0
SlMpIFwKICAgICBtYWNybyhNYWtlUm9wZSwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSW4s
IE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KSBcCiAgICAgXAogICAgIC8qIE5vZGVzIHVzZWQgZm9yIGFjdGl2YXRpb25zLiBBY3RpdmF0aW9u
IHN1cHBvcnQgd29ya3MgYnkgaGF2aW5nIGl0IGFuY2hvcmVkIGF0ICovXAogICAgIC8qIGVwaWxn
b3VlcyB2aWEgVGVhck9mZkFjdGl2YXRpb24sIGFuZCBhbGwgQ3JlYXRlQWN0aXZhdGlvbiBub2Rl
cyBrZXB0IGFsaXZlIGJ5ICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgog
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvbW1vblNsb3dQYXRocy5oIgogI2lu
Y2x1ZGUgIkNvcGllZFNwYWNlSW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNp
bmNsdWRlICJERkdSZXBhdGNoLmgiCkBAIC01MzksNiArNTQwLDU2IEBAIEVuY29kZWRKU1ZhbHVl
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJl
c3VsdCk7CiB9CiAKK0pfRlVOQ1RJT05fV1JBUFBFUl9XSVRIX1JFVFVSTl9BRERSRVNTX0VDSShv
cGVyYXRpb25Jbk9wdGltaXplKTsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uSW5PcHRpbWl6ZVdpdGhSZXR1cm5BZGRyZXNzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBi
YXNlLCBTdHJpbmdJbXBsKiBrZXksIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKK3sK
KyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKHZtLCBleGVjKTsKKyAgICAKKyAgICBpZiAoIWJhc2UtPmlzT2JqZWN0KCkpIHsKKyAgICAg
ICAgdm0tPmV4Y2VwdGlvbiA9IGNyZWF0ZUludmFsaWRQYXJhbUVycm9yKGV4ZWMsICJpbiIsIGJh
c2UpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gZXhlYy0+Y29kZUJsb2NrKCktPmdldFN0dWJJbmZv
KHJldHVybkFkZHJlc3MpOworICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0
PEFjY2Vzc1R5cGU+KHN0dWJJbmZvLmFjY2Vzc1R5cGUpOworCisgICAgSWRlbnRpZmllciBpZGVu
dCh2bSwga2V5KTsKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlKTsKKyAgICBib29sIHJlc3Vs
dCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwor
ICAgIAorICAgIFJFTEVBU0VfQVNTRVJUKGFjY2Vzc1R5cGUgPT0gc3R1YkluZm8uYWNjZXNzVHlw
ZSk7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLnNlZW4pCisgICAgICAgIGRmZ1JlcGF0Y2hJbihl
eGVjLCBiYXNlLCBpZGVudCwgcmVzdWx0LCBzbG90LCBzdHViSW5mbyk7CisgICAgZWxzZQorICAg
ICAgICBzdHViSW5mby5zZWVuID0gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihyZXN1bHQpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25JbihFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgU3RyaW5nSW1wbCog
a2V5KQoreworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIodm0sIGV4ZWMpOworCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7Cisg
ICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVjLCAiaW4i
LCBiYXNlKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgSWRl
bnRpZmllciBpZGVudCh2bSwga2V5KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihhc09iamVjdChiYXNlKS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBiYXNlLCBFbmNvZGVkSlNWYWx1ZSBrZXkpCit7CisgICAgVk0qIHZtID0g
JmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7
CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihDb21tb25TbG93UGF0aHM6
Om9wSW4oZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSksIGJhc2UpKSk7Cit9CisKIEVuY29kZWRK
U1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogYmFzZSwgUHJvcGVydHlTbG90OjpHZXRWYWx1ZUZ1bmMgZnVuY3Rpb24s
IFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNTE0NDMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTM3LDYgKzEzNyw5IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdChFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpT
VmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Jbk9wdGltaXplKEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
SW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgU3RyaW5nSW1wbCopOworRW5jb2RlZEpTVmFsdWUgREZH
X09QRVJBVElPTiBvcGVyYXRpb25HZW5lcmljSW4oRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUpOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25DYWxsQ3Vz
dG9tR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5j
LCBTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElP
TiBvcGVyYXRpb25DYWxsR2V0dGVyKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopIFdURl9J
TlRFUk5BTDsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlHbG9iYWxWYXJXcml0
ZShXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4OSw2ICs0ODksMTAgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRTY29wZToKICAg
ICAgICAgICAgIGNoYW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW46CisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBJZGVudGl0eToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTExLDYgKzExMTEsMTIyIEBAIHZvaWQgZGZnQnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdGUq
IGV4ZWMKICAgICAgICAgZGZnUmVwYXRjaENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVHZW5lcmljUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKIH0KIAorc3RhdGljIGJvb2wgdHJ5UmVwYXRjaEluKAorICAgIEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3
YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBpZiAoIWJhc2UtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vz
c2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
d2FzRm91bmQpIHsKKyAgICAgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlLT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXRJZ25vcmVkOworICAgIHNpemVfdCBjb3VudCA9IG5vcm1hbGl6ZVByb3RvdHlw
ZUNoYWluRm9yQ2hhaW5BY2Nlc3MoZXhlYywgYmFzZSwgd2FzRm91bmQgPyBzbG90LnNsb3RCYXNl
KCkgOiBKU1ZhbHVlKCksIGlkZW50LCBvZmZzZXRJZ25vcmVkKTsKKyAgICBpZiAoY291bnQgPT0g
SW52YWxpZFByb3RvdHlwZUNoYWluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Q7
CisgICAgaW50IGxpc3RJbmRleDsKKyAgICAKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNz
TGFiZWwgPSBzdHViSW5mby5ob3RQYXRoQmVnaW47CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VMYWJlbDsKKyAgICAKKyAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3Nf
dW5zZXQpIHsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCgpOworICAgICAgICBzdHViSW5mby5pbml0SW5MaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMCk7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAgICAgICAgIHN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKTsKKyAgICAgICAgbGlzdEluZGV4ID0g
MDsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19pbl9saXN0KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gc3R1YkluZm8udS5pbkxpc3Quc3RydWN0dXJlTGlzdDsKKyAgICAgICAgbGlzdEluZGV4ID0g
c3R1YkluZm8udS5pbkxpc3QubGlzdFNpemU7CisgICAgICAgIHNsb3dDYXNlTGFiZWwgPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxp
c3RJbmRleCA9PSBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9IHN0cnVj
dHVyZS0+cHJvdG90eXBlQ2hhaW4oZXhlYyk7CisgICAgUmVmUHRyPEpJVFN0dWJSb3V0aW5lPiBz
dHViUm91dGluZTsKKyAgICAKKyAgICB7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gc3RhdGlj
X2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUik7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSBzdGF0aWNfY2FzdDxHUFJSZWc+KHN0dWJJbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUik7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gUmVnaXN0ZXJTZXQoc3R1YkluZm8u
cGF0Y2guZGZnLnVzZWRSZWdpc3RlcnMpLmdldEZyZWVHUFIoKTsKKyAgICAgICAgCisgICAgICAg
IENDYWxsSGVscGVycyBzdHViSml0KHZtKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgbmVlZFRv
UmVzdG9yZVNjcmF0Y2g7CisgICAgICAgIGlmIChzY3JhdGNoR1BSID09IEludmFsaWRHUFJSZWcp
IHsKKyAgICAgICAgICAgIHNjcmF0Y2hHUFIgPSBTcGVjdWxhdGl2ZUpJVDo6c2VsZWN0U2NyYXRj
aEdQUihiYXNlR1BSLCByZXN1bHRHUFIpOworICAgICAgICAgICAgc3R1YkppdC5wdXNoKHNjcmF0
Y2hHUFIpOworICAgICAgICAgICAgbmVlZFRvUmVzdG9yZVNjcmF0Y2ggPSB0cnVlOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzOworICAg
ICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKHN0dWJKaXQuYnJhbmNoUHRyKAorICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKSk7CisgICAgICAgIAorICAg
ICAgICBTdHJ1Y3R1cmUqIGN1cnJTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRl
QmFycmllcjxTdHJ1Y3R1cmU+KiBpdCA9IGNoYWluLT5oZWFkKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpLCArK2l0KSB7CisgICAgICAgICAgICBKU09iamVj
dCogcHJvdG90eXBlID0gYXNPYmplY3QoY3VyclN0cnVjdHVyZS0+cHJvdG90eXBlRm9yTG9va3Vw
KGV4ZWMpKTsKKyAgICAgICAgICAgIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjaygKKyAgICAg
ICAgICAgICAgICBwcm90b3R5cGUsIHByb3RvdHlwZS0+c3RydWN0dXJlKCksIGV4ZWMtPmNvZGVC
bG9jaygpLCBzdHViSW5mbywgc3R1YkppdCwKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBzdHViSml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHdhc0ZvdW5kKSkpLCByZXN1bHRHUFIpOworI2Vsc2UKKyAgICAgICAgc3R1YkppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIod2FzRm91bmQpLCByZXN1bHRHUFIpOworI2VuZGlm
CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzLCBmYWlsOwor
ICAgICAgICAKKyAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOworICAg
ICAgICAKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sICZzdHViSml0LCBleGVj
LT5jb2RlQmxvY2soKSk7CisKKyAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVy
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNj
ZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOworICAgICAgICAKKyAgICAgICAgc3R1YlJvdXRpbmUg
PSBGSU5BTElaRV9DT0RFX0ZPUl9ERkdfU1RVQigKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLAor
ICAgICAgICAgICAgKCJERkcgSW4gKGZvdW5kID0gJXMpIHN0dWIgZm9yICVzLCByZXR1cm4gcG9p
bnQgJXAiLAorICAgICAgICAgICAgICAgIHdhc0ZvdW5kID8gInllcyIgOiAibm8iLCB0b0NTdHJp
bmcoKmV4ZWMtPmNvZGVCbG9jaygpKS5kYXRhKCksCisgICAgICAgICAgICAgICAgc3VjY2Vzc0xh
YmVsLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKKyAgICB9CisgICAgCisgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCp2bSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgdHJ1ZSk7CisgICAgc3R1YkluZm8u
dS5pbkxpc3QubGlzdFNpemUrKzsKKyAgICAKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KDApLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS0+Y29k
ZSgpLmNvZGUoKSkpOworICAgIAorICAgIHJldHVybiBsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNf
TElTVF9DQUNIRV9TSVpFIC0gMSk7Cit9CisKK3ZvaWQgZGZnUmVwYXRjaEluKAorICAgIEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCB3
YXNGb3VuZCwKKyAgICBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZv
JiBzdHViSW5mbykKK3sKKyAgICBpZiAodHJ5UmVwYXRjaEluKGV4ZWMsIGJhc2UsIGlkZW50LCB3
YXNGb3VuZCwgc2xvdCwgc3R1YkluZm8pKQorICAgICAgICByZXR1cm47CisgICAgZGZnUmVwYXRj
aENhbGwoZXhlYy0+Y29kZUJsb2NrKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3Bl
cmF0aW9uSW4pOworfQorCiBzdGF0aWMgdm9pZCBsaW5rU2xvd0ZvcihSZXBhdGNoQnVmZmVyJiBy
ZXBhdGNoQnVmZmVyLCBWTSogdm0sIENhbGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNhbGwpIHsK
QEAgLTEzMDUsNiArMTQyMSwxMSBAQCB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiByZXBhCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBh
dGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKK3ZvaWQgZGZnUmVzZXRJbihSZXBh
dGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCit7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uaG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldCgwKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UmVwYXRjaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVw
YXRjaC5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1JlcGF0Y2guaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQwLDEzIEBAIHZvaWQgZGZnQnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdGUqLCBKU1YKIHZvaWQgZGZnQnVpbGRHZXRCeUlEUHJvdG9M
aXN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0
eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdSZXBhdGNoUHV0QnlJRChFeGVj
U3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVydHlTbG90
JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKIHZvaWQgZGZnQnVpbGRQdXRCeUlkTGlz
dChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHV0UHJvcGVy
dHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mLCBQdXRLaW5kKTsKK3ZvaWQgZGZnUmVwYXRjaElu
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIGNvbnN0IElkZW50aWZpZXImLCBib29sIHdhc0ZvdW5kLCBj
b25zdCBQcm9wZXJ0eVNsb3QmLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwogdm9pZCBkZmdMaW5rRm9y
KEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVCbG9jayosIEpTRnVuY3Rpb24qIGNhbGxl
ZSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIHZvaWQg
ZGZnTGlua1Nsb3dGb3IoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvJiwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7CiB2b2lkIGRmZ0xpbmtDbG9zdXJlQ2FsbChFeGVjU3RhdGUqLCBDYWxsTGlua0lu
Zm8mLCBDb2RlQmxvY2sqLCBTdHJ1Y3R1cmUqLCBFeGVjdXRhYmxlQmFzZSosIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cik7CiB2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0
dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVzZXRQdXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1
Y3R1cmVTdHViSW5mbyYpOwordm9pZCBkZmdSZXNldEluKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1
cmVTdHViSW5mbyYpOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKQEAgLTYxLDYgKzYz
LDcgQEAgbmFtZXNwYWNlIERGRyB7CiAKIGlubGluZSBOT19SRVRVUk4gdm9pZCBkZmdSZXNldEdl
dEJ5SUQoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CiBpbmxpbmUgTk9fUkVUVVJOIHZvaWQgZGZnUmVzZXRQdXRCeUlE
KFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQoraW5saW5lIE5PX1JFVFVSTiB2b2lkIGRmZ1Jlc2V0SW4oUmVwYXRjaEJ1
ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJikgeyBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODg5LDYgKzQ4ODksMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2UgTmV3RnVuY3Rpb25FeHBy
ZXNzaW9uOgogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpOwogICAg
ICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJbjoKKyAgICAgICAgY29tcGlsZUluKG5v
ZGUpOworICAgICAgICBicmVhazsKIAogICAgIGNhc2UgR2FyYmFnZVZhbHVlOgogICAgICAgICAv
LyBXZSBzaG91bGQgbmV2ZXIgZ2V0IHRvIHRoZSBwb2ludCBvZiBjb2RlIGVtaXNzaW9uIGZvciBh
IEdhcmJhZ2VWYWx1ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NzM5LDYgKzQ3MzksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgICAgICBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCisgICAgY2FzZSBJbjoKKyAgICAgICAgY29tcGlsZUluKG5vZGUpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgCiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKICAgICAg
ICAgbV9qaXQuYWRkNjQoVHJ1c3RlZEltbTMyKDEpLCBNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1dGVB
ZGRyZXNzKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKS0+YWRkcmVzcygpKSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzAsNiArOTMwLDU4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OndyaXRlQmFycmllcihKU0NlbGwKICNlbmRpZgogfQogCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4oTm9kZSogbm9kZSkKK3sKKyAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICBHUFJSZWcgYmFz
ZUdQUiA9IGJhc2UuZ3ByKCk7CisgICAgICAgIAorICAgIGlmIChpc0NvbnN0YW50KG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9CisgICAgICAgICAg
ICBqc0R5bmFtaWNDYXN0PEpTU3RyaW5nKj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUlt
cGwoKQorICAgICAgICAgICAgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNJZGVudGlm
aWVyKCkpIHsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgICAgICB1c2Uo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlBhdGNoYWJsZUp1bXAganVtcCA9IG1faml0LnBhdGNoYWJsZUp1bXAoKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1Bh
dGggPSBzbG93UGF0aENhbGwoCisgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsIHRoaXMsIG9w
ZXJhdGlvbkluT3B0aW1pemUsIHJlc3VsdEdQUiwgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICBz
dHJpbmctPnRyeUdldFZhbHVlSW1wbCgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1faml0LmFkZEluKEluUmVjb3JkKAorICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmlnaW4s
IGp1bXAsIHNsb3dQYXRoLmdldCgpLCBzYWZlQ2FzdDxpbnQ4X3Q+KGJhc2VHUFIpLAorICAgICAg
ICAgICAgICAgIHNhZmVDYXN0PGludDhfdD4ocmVzdWx0R1BSKSwgdXNlZFJlZ2lzdGVycygpKSk7
CisgICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aC5yZWxlYXNlKCkpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgYmFzZS51c2UoKTsKKyAgICAgICAgICAgICAg
ICAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICAgICAganNWYWx1ZVJlc3VsdCgKKyAgICAg
ICAgICAgICAgICByZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxk
cmVuQ2FsbGVkRXhwbGljaXRseSk7CisjZWxzZQorICAgICAgICAgICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisjZW5kaWYKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAgICAgCisgICAgSlNWYWx1
ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcga2V5R1BSID0g
a2V5LmdwcigpOworICAgICAgICAKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGJhc2UudXNlKCk7
CisgICAga2V5LnVzZSgpOworICAgICAgICAKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uR2VuZXJpY0luLCByZXN1bHRHUFIsIGJhc2VHUFIsIGtleUdQ
Uik7CisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xl
YW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
CiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFu
Y2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNzIzLDcgKzcyMyw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJP
ck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3Rl
cnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVl
UGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKLQorICAgIAorICAgIHZvaWQgY29tcGls
ZUluKE5vZGUqKTsKKyAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hO
b2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFy
ZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC0xMTcw
LDcgKzExNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1w
bCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNTE0
NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA1LDEwICsyMDUsMTggQEAgdm9pZCBKU1ZhbHVlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbgogICAgIH0gZWxzZSBpZiAoaXNDZWxsKCkpIHsKICAgICAgICAgaWYg
KGFzQ2VsbCgpLT5pbmhlcml0cygmSlNTdHJpbmc6OnNfaW5mbykpIHsKICAgICAgICAgICAgIEpT
U3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSk7Ci0gICAgICAgICAg
ICBvdXQucHJpbnQoIlN0cmluZzogIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIlN0cmluZyIp
OwogICAgICAgICAgICAgaWYgKHN0cmluZy0+aXNSb3BlKCkpCi0gICAgICAgICAgICAgICAgb3V0
LnByaW50KCIocm9wZSkgIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoc3RyaW5nLT50cnlHZXRW
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAocm9wZSkiKTsKKyAgICAgICAg
ICAgIGNvbnN0IFN0cmluZ0ltcGwqIGltcGwgPSBzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpOwor
ICAgICAgICAgICAgaWYgKGltcGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1wbC0+aXNBdG9t
aWMoKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGF0b21pYykiKTsKKyAgICAg
ICAgICAgICAgICBpZiAoaW1wbC0+aXNJZGVudGlmaWVyKCkpCisgICAgICAgICAgICAgICAgICAg
IG91dC5wcmludCgiIChpZGVudGlmaWVyKSIpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQpIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIjogIiwgaW1wbCk7CiAgICAgICAgIH0gZWxzZSBpZiAoYXNDZWxsKCktPmluaGVyaXRzKCZT
dHJ1Y3R1cmU6OnNfaW5mbykpIHsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
anNDYXN0PFN0cnVjdHVyZSo+KGFzQ2VsbCgpKTsKICAgICAgICAgICAgIG91dC5wcmludCgKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTUx
NDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgdHJ5R2V0VmFsdWUoKSBjb25zdDsKKyAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogdHJ5R2V0
VmFsdWVJbXBsKCkgY29uc3Q7CiAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0dXJuIG1f
bGVuZ3RoOyB9CiAKICAgICAgICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVm
ZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKQEAgLTM3OCw2ICszNzksMTEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHJldHVybiBtX3ZhbHVlOwogICAgIH0KIAorICAgIGlubGluZSBjb25z
dCBTdHJpbmdJbXBsKiBKU1N0cmluZzo6dHJ5R2V0VmFsdWVJbXBsKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZhbHVlLmltcGwoKTsKKyAgICB9CisKICAgICBpbmxpbmUgSlNTdHJp
bmcqIEpTU3RyaW5nOjpnZXRJbmRleChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGkpCiAgICAg
ewogICAgICAgICBBU1NFUlQoY2FuR2V0SW5kZXgoaSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTMsNyArMjEzLDcgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvcgog
ICAgIEpTQ2VsbCogY2VsbCA9IGJhc2UuYXNDZWxsKCk7CiAgICAgc2l6ZV90IGNvdW50ID0gMDsK
ICAgICAgICAgCi0gICAgd2hpbGUgKHNsb3RCYXNlICE9IGNlbGwpIHsKKyAgICB3aGlsZSAoIXNs
b3RCYXNlIHx8IHNsb3RCYXNlICE9IGNlbGwpIHsKICAgICAgICAgaWYgKGNlbGwtPmlzUHJveHko
KSkKICAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUHJvdG90eXBlQ2hhaW47CiAgICAgICAgICAg
ICAKQEAgLTIyNSw4ICsyMjUsMTEgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVD
aGFpbkZvcgogICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCBzbG90QmFzZSBpbiBiYXNlJ3Mg
cHJvdG90eXBlIGNoYWluLCB0aGVuIGJhc2UKICAgICAgICAgLy8gbXVzdCBiZSBhIHByb3h5IGZv
ciBhbm90aGVyIG9iamVjdC4KIAotICAgICAgICBpZiAodi5pc051bGwoKSkKKyAgICAgICAgaWYg
KHYuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIGlmICghc2xvdEJhc2UpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGNvdW50OwogICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5cGVDaGFp
bjsKKyAgICAgICAgfQogCiAgICAgICAgIGNlbGwgPSB2LmFzQ2VsbCgpOwogCkBAIC0yNDEsNyAr
MjQ0LDYgQEAgaW5saW5lIHNpemVfdCBub3JtYWxpemVQcm90b3R5cGVDaGFpbkZvcgogICAgICAg
ICArK2NvdW50OwogICAgIH0KICAgICAgICAgCi0gICAgQVNTRVJUKGNvdW50KTsKICAgICByZXR1
cm4gY291bnQ7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTE0NzIpCisrKyBTb3VyY2UvV1RGL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEzLTA2LTExICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjogREZHIHNo
b3VsZCBzdXBwb3J0IG9wX2luIGFuZCBpdCBzaG91bGQgdXNlIHBhdGNoaW5nIHRvIG1ha2UgaXQg
ZmFzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
Mzg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBOb3cgaWYgeW91IHBhc3MgYSBudWxsIFN0cmluZ0ltcGwqIHRoZW4gc29tZXRoaW5nIHdp
bGwgc3RpbGwgZ2V0IHByaW50ZWQgaW5zdGVhZAorICAgICAgICBvZiBjcmFzaGluZy4gSSBmaWd1
cmUgdGhhdCB0aGlzIGlzIGJyb2FkbHkgdXNlZnVsIGZvciBkZWJ1ZyBjb2RlLCBhbmQgSSBtYWtl
IHVzZQorICAgICAgICBvZiBpdCBpbiB0aGUgSlNDIHBvcnRpb24gb2YgdGhpcyBwYXRjaC4KKwor
ICAgICAgICAqIHd0Zi9QcmludFN0cmVhbS5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJu
YWwpOgorCiAyMDEzLTA2LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgZml4IGJ1aWxkLiBPbiBzb21lIGNvbXBpbGVycyB0aGUgYXV0b21h
dGljIGNvZXJjaW9uIGZyb20gV1RGOjpTdHJpbmcgdG8gTlNTdHJpbmcqCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9QcmludFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUHJp
bnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9QcmludFN0
cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIGNvbgogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nKQogeworICAgIGlmICghc3RyaW5nKQor
ICAgICAgICBvdXQucHJpbnQoIihudWxsIFN0cmluZ0ltcGwqKSIpOwogICAgIG91dC5wcmludChz
dHJpbmctPnV0ZjgoKSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204375</attachid>
            <date>2013-06-11 18:07:02 -0700</date>
            <delta_ts>2013-06-11 18:23:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51569</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wNi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc3VwcG9ydCBvcF9pbiBhbmQgaXQgc2hvdWxkIHVzZSBw
YXRjaGluZyB0byBtYWtlIGl0IGZhc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNzM4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IG9wX2luIGluIHRoZSBERkcgYW5kIGdp
dmUgaXQgcGF0Y2hpbmcuIFRoZSBjb2RlIHdlIGdlbmVyYXRlIGlzIGp1c3QKKyAgICAgICAgYSBq
dW1wIG9uIHRoZSBob3QgcGF0aCwgYW5kIHRoZSBzbG93IHBhdGhzIGdlbmVyYXRlIHN0dWJzIGFu
ZCBsaW5rIHRoZSBqdW1wIHRvCisgICAgICAgIHRoZW0uIEkgZGlkbid0IHdhbnQgdG8gYm90aGVy
IHdpdGggcGF0Y2hpbmcgc3RydWN0dXJlcyBhbmQgbG9hZCBvZmZzZXRzIGFuZAorICAgICAgICB0
aGUgbGlrZSwgYWx0aG91Z2ggSSBwcm9iYWJseSBjb3VsZCBoYXZlLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIGdpbm9ybW91cyBzcGVlZC11cCBvbiBtaWNyb2JlbmNobWFya3MgZm9yICJp
biIsIG9idmlvdXNseS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpzdHJ1Y3R1cmVT
dHViSW5mb0xlc3NUaGFuKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c29ydFN0cnVjdHVyZVN0dWJJbmZvcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OmlzSW5B
Y2Nlc3MpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFN0cnVjdHVyZVN0dWJJbmZvKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkxpc3QpOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkNDYWxsSGVscGVy
czo6c2V0dXBSZXN1bHRzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1
cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KToKKyAgICAgICAgKEpTVmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKU1ZhbHVlUmVnczo6SlNWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVSZWdzOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVTb3VyY2U6Om9w
ZXJhdG9yISk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5SZWNvcmQ6OkluUmVjb3JkKToKKyAgICAgICAgKElu
UmVjb3JkKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEluKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNl
dEluKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdSZXNldEluKToKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJh
dG9yOjp0ZWFyRG93bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE5vQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUlu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNh
bGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxs
UmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFs
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4pOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpleHRyYWN0UmVz
dWx0KToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFNldFJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnRhZ0dQUik6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmR1bXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRyeUdldFZhbHVlSW1wbCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpub3Jt
YWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKToKKwogMjAxMy0wNi0xMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIGlzQ29udHJhdmVu
ZWRCeVN0cnVjdHVyZSBpcyBiYWNrd2FyZHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDcgKzExNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAg
ICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaCgpLCAiOlsiLCBSYXdQb2ludGVy
KHRoaXMpLCAiLT4iLCBSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwgIiwgIiwgaml0VHlw
ZSwgY29kZVR5cGUoKSk7CiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAg
ICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOwotICAgIGlmIChtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCkKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQoIiAo
U0FCSSkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAg
ICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTI0NzMsMTQgKzI0NzMsMjAgQEAg
dm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogICAgIGNhc2UgSklUQ29k
ZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkp
CiAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHVi
SW5mbyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpOwogICAgICAgICAgICAgSklUOjpy
ZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOworICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNH
ZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQogICAgICAgICAgICAgREZHOjpkZmdSZXNldEdldEJ5
SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2Ug
aWYgKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKICAgICAgICAgICAgIERGRzo6ZGZnUmVz
ZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsKKyAgICAgICAg
ICAgIERGRzo6ZGZnUmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTMyNzgsNiArMzI4NCwxNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkCiB9CiAKICNpZiBFTkFCTEUoSklUKQorc3RhdGljIGJvb2wgc3Ry
dWN0dXJlU3R1YkluZm9MZXNzVGhhbihjb25zdCBTdHJ1Y3R1cmVTdHViSW5mbyYgYSwgY29uc3Qg
U3RydWN0dXJlU3R1YkluZm8mIGIpCit7CisgICAgcmV0dXJuIGEuY2FsbFJldHVybkxvY2F0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkgPCBiLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpOworfQorCit2b2lkIENvZGVCbG9jazo6c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpCit7
CisgICAgc3RkOjpzb3J0KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJl
U3R1YkluZm9zLmVuZCgpLCBzdHJ1Y3R1cmVTdHViSW5mb0xlc3NUaGFuKTsKK30KKwogdWludDMy
X3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVk
VGhyZXNob2xkKQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0MDYsNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6
ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgIHZvaWQg
c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpOwogICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9s
aXN0OgogICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0OwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3Q7CisgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3Byb3RvOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKQEAg
LTExMSw2ICsxMTYsMTIgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJl
bgogICAgICAgICBpZiAoIXUucHV0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2luX2xp
c3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBpZiAoIXBvbHlt
b3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZl
cmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgICAgIC8vIGRvIGFueXRoaW5nLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBA
IGVudW0gQWNjZXNzVHlwZSB7CiAgICAgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljLAogICAgIGFj
Y2Vzc19nZXRfYXJyYXlfbGVuZ3RoLAogICAgIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aCwKKyAg
ICBhY2Nlc3NfaW5fbGlzdAogfTsKIAogaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKQEAgLTkzLDYgKzk0LDE2IEBAIGlubGluZSBib29sIGlzUHV0QnlJ
ZEFjY2VzcyhBY2Nlc3NUeXBlIGEKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzSW5BY2Nlc3Mo
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQoreworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgYWNjZXNzX2luX2xpc3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgU3RydWN0dXJlU3R1YkluZm8oKQogICAgICAgICA6IGFjY2Vzc1R5cGUoYWNj
ZXNzX3Vuc2V0KQpAQCAtMTcwLDYgKzE4MSwxMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwogICAgICAgICB1
LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwogICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJbkxp
c3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisg
ICAgeworICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7CisgICAgICAgIHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0OworICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxp
c3RTaXplOworICAgIH0KICAgICAgICAgCiAgICAgdm9pZCByZXNldCgpCiAgICAgewpAQCAtMjk2
LDYgKzMxNCwxMCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBw
dXRCeUlkTGlzdDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsKKyAgICAgICAgICAgIGludCBsaXN0U2l6
ZTsKKyAgICAgICAgfSBpbkxpc3Q7CiAgICAgfSB1OwogCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw2
ICsxNTE2LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgfQogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIC8v
IEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhp
c3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAgICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlVG9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNTAsNiAr
MzM1MCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChJZGVudGl0eSwgRWRnZShnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCksIE51bWJlclVzZSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3RvX251bWJlcik7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9w
X2luOiB7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEluLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBi
ZWNhdXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NzYsNyArOTc2LDExIEBAIHB1YmxpYzoKICAgICAgICAgR1BSUmVnIHNyY0EgPSBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjsKICAgICAgICAgR1BSUmVnIHNyY0IgPSBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjI7CiAKLSAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKKyAgICAgICAgaWYgKGRlc3RB
ID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAg
ICAgZWxzZSBpZiAoZGVzdEIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1vdmUoc3Jj
QSwgZGVzdEEpOworICAgICAgICBlbHNlIGlmIChzcmNCICE9IGRlc3RBKSB7CiAgICAgICAgICAg
ICAvLyBIYW5kbGUgdGhlIGVhc3kgY2FzZXMgLSB0d28gc2ltcGxlIG1vdmVzLgogICAgICAgICAg
ICAgbW92ZShzcmNBLCBkZXN0QSk7CiAgICAgICAgICAgICBtb3ZlKHNyY0IsIGRlc3RCKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3B1dF90b19iYXNlOgogICAg
IGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfaW46
CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAgICAgICAKICAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI2LDYgKzgyNiwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENl
bGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbjogeworICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhdCBzb21lIHBvaW50IGhhdmUgYXJyYXkgcHJvZmlsaW5nIG9uIG9wX2luLCBpbiB3
aGljaAorICAgICAgICAgICAgLy8gY2FzZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIHR1cm4gdGhpcyBp
bnRvIGEga2luZCBvZiBHZXRCeVZhbC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0VXNl
S2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAg
ICBjYXNlIElkZW50aXR5OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQ
UkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUklu
Zm8uaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
UFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlUmVncyBwYXlsb2FkT25seShHUFJSZWcg
Z3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKGdwcik7CisgICAgfQorICAg
IAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQ
UlJlZzsgfQogICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQpA
QCAtMTM3LDEwICsxNDIsMTggQEAgcHVibGljOgogICAgICAgICA6IG1fdGFnR1BSKHRhZ0dQUikK
ICAgICAgICAgLCBtX3BheWxvYWRHUFIocGF5bG9hZEdQUikKICAgICB7Ci0gICAgICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3RhZ0dQUikgPT0gSW52YWxpZEdQUlJlZykgPT0gKHN0
YXRpY19jYXN0PEdQUlJlZz4ocGF5bG9hZEdQUikgPT0gSW52YWxpZEdQUlJlZykpOwogICAgIH0K
ICAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdQ
UlJlZz4obV90YWdHUFIpID09IEludmFsaWRHUFJSZWc7IH0KKyAgICBzdGF0aWMgSlNWYWx1ZVJl
Z3MgcGF5bG9hZE9ubHkoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
UmVncyhJbnZhbGlkR1BSUmVnLCBncHIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3Rh
Z0dQUikgPT0gSW52YWxpZEdQUlJlZworICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8R1BSUmVn
PihtX3BheWxvYWRHUFIpID09IEludmFsaWRHUFJSZWc7CisgICAgfQogICAgIAogICAgIEdQUlJl
ZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fdGFnR1BSKTsg
fQogICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BS
UmVnPihtX3BheWxvYWRHUFIpOyB9CkBAIC0xOTYsNyArMjA5LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fYmFzZU9yVGFnKSA9PSBJbnZhbGlkR1BS
UmVnICYmIHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkKSA9PSBJbnZhbGlkR1BSUmVnOyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdQUlJlZz4obV9iYXNlT3JUYWcpID09IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAg
ICYmIHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkKSA9PSBJbnZhbGlkR1BSUmVnOworICAg
IH0KICAgICAKICAgICBib29sIGlzQWRkcmVzcygpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgICAgICBjb2RlT3JpZ2luc1tpXSA9IHJlY29yZC5tX2NvZGVPcmln
aW47CiAgICAgfQogICAgIAotICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0
TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSArIG1f
aW5zLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nl
c3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CkBAIC0yMDUsNiArMjA1LDIw
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhpbmZvLnBhdGNoLmRm
Zy51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hl
ZCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3JlZ2lzdGVyTW9kZSA9PSBQcm9wZXJ0eUFjY2Vz
c1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZDsKICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fcHJvcGVydHlBY2Nlc3Nlcy5z
aXplKCkgKyBpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwganVtcCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQ
YXRoR2VuZXJhdG9yLT5jYWxsKCkpOworICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2luc1tp
XS5tX2NvZGVPcmlnaW47CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0ganVtcDsKKyAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0u
bV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5i
YXNlR1BSID0gbV9pbnNbaV0ubV9iYXNlR1BSOworICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUiA9IG1faW5zW2ldLm1fcmVzdWx0R1BSOworICAgICAgICBtX2luc1tpXS5tX3VzZWRSZWdp
c3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGlu
Zm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgbV9jb2Rl
QmxvY2stPnNvcnRTdHJ1Y3R1cmVTdHViSW5mb3MoKTsKICAgICAKICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXplKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDYgKzIzNSwyOCBAQCBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewogICAg
IFJlZ2lzdGVyTW9kZSBtX3JlZ2lzdGVyTW9kZTsKIH07CiAKK3N0cnVjdCBJblJlY29yZCB7Cisg
ICAgSW5SZWNvcmQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAganVtcCwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQ
YXRoR2VuZXJhdG9yLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHJlc3VsdEdQUiwKKyAgICAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCisgICAgICAgIDogbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICwgbV9qdW1wKGp1bXApCisgICAgICAgICwgbV9zbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aEdlbmVyYXRvcikKKyAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQ
UikKKyAgICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCisgICAgICAgICwgbV91c2VkUmVn
aXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX2p1bXA7
CisgICAgU2xvd1BhdGhHZW5lcmF0b3IqIG1fc2xvd1BhdGhHZW5lcmF0b3I7CisgICAgaW50OF90
IG1fYmFzZUdQUjsKKyAgICBpbnQ4X3QgbV9yZXN1bHRHUFI7CisgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOworfTsKKwogLy8gPT09IEpJVENvbXBpbGVyID09PQogLy8KIC8vIERGRzo6
SklUQ29tcGlsZXIgaXMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgSklUIGNvZGUgZnJvbSB0
aGUgZGF0YWZsb3cgZ3JhcGguCkBAIC0zNzYsNiArMzk4LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQocmVjb3JkKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBhZGRJbihjb25zdCBJblJlY29yZCYgcmVjb3JkKQorICAgIHsKKyAgICAgICAgbV9p
bnMuYXBwZW5kKHJlY29yZCk7CisgICAgfQogCiAgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0
Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5r
SW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICB7CkBAIC00ODEsNiArNTA4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIAog
ICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwor
ICAgIFZlY3RvcjxJblJlY29yZCwgND4gbV9pbnM7CiAgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwg
ND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBtX2V4aXRD
b21waWxhdGlvbkluZm87CiAgICAgVmVjdG9yPFZlY3RvcjxMYWJlbD4gPiBtX2V4aXRTaXRlTGFi
ZWxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKFRvU3RyaW5nLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9k
ZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1h
Y3JvKEluLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBOb2RlcyB1c2VkIGZvciBhY3RpdmF0aW9ucy4gQWN0
aXZhdGlvbiBzdXBwb3J0IHdvcmtzIGJ5IGhhdmluZyBpdCBhbmNob3JlZCBhdCAqL1wKICAgICAv
KiBlcGlsZ291ZXMgdmlhIFRlYXJPZmZBY3RpdmF0aW9uLCBhbmQgYWxsIENyZWF0ZUFjdGl2YXRp
b24gbm9kZXMga2VwdCBhbGl2ZSBieSAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21tb25TbG93UGF0aHMu
aCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgpAQCAtNTM5LDYgKzU0MCw1NiBAQCBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0kob3BlcmF0aW9uSW5PcHRpbWl6ZSk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkluT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7
CisgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVjLCAi
aW4iLCBiYXNlKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIGtleSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CisgICAgYm9v
bCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBz
bG90KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICBkZmdSZXBh
dGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8pOworICAgIGVs
c2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGlmICghYmFzZS0+aXNPYmplY3Qo
KSkgeworICAgICAgICB2bS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhl
YywgImluIiwgYmFzZSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xv
d1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1
bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExp
c3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlKTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5R2xvYmFs
VmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkgV1RGX0lOVEVSTkFMOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODksNiArNDg5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0U2Nv
cGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluOgorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTUxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTExMSw2ICsxMTExLDEyMiBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKK3N0YXRpYyBib29sIHRyeVJlcGF0Y2hJbigKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5z
bG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7CisgICAgaWYgKGNv
dW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0OworICAgIGludCBsaXN0SW5kZXg7CisgICAgCisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlTGFiZWw7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdElu
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOworICAgICAgICBzbG93Q2FzZUxhYmVs
ID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgICAgIGxpc3RJ
bmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJ
bmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93Q2FzZUxhYmVs
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAgIAor
ICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7CisgICAgICAgIAorICAgICAgICBib29s
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVj
dFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQucHVz
aChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNl
OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
czsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgICAg
ICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICAgICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
CisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1
YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHN0dWJKaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzcywg
ZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRj
aEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKKyAgICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHN1
Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAorICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgIHN0
dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIGRmZ1JlcGF0Y2hJbigKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBp
ZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRm
Z1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkluKTsKK30KKwogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7CkBAIC0xMzA1LDYgKzE0MjEsMTEgQEAgdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYgcmVwYQogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCit2b2lkIGRmZ1Jlc2V0
SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwxMyBAQCB2b2lk
IGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWCiB2b2lkIGRmZ0J1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGRmZ0J1aWxkUHV0
QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIGRmZ1Jl
cGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZn
TGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CiB2b2lkIGRmZ0xpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogdm9pZCBkZmdMaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIpOwogdm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZGZnUmVzZXRJbihSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkBAIC02
MSw2ICs2Myw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBpbmxpbmUgTk9fUkVUVVJOIHZvaWQgZGZn
UmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogaW5saW5lIE5PX1JFVFVSTiB2b2lkIGRmZ1Jlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk4gdm9pZCBkZmdSZXNldEluKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgewogICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVl
ZFRvU3BpbGwpCi0gICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChm
YWxzZSwgbV9wbGFucywgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCBleHRyYWN0UmVzdWx0KHJlc3VsdCkpOwogICAg
IH0KICAgICAKICAgICB2aXJ0dWFsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwoKSBjb25zdApA
QCAtMTMzLDcgKzEzMyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHRlYXJEb3duKFNwZWN1bGF0
aXZlSklUKiBqaXQpCiAgICAgewogICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3Bp
bGwpIHsKLSAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBp
Y2tDYW5UcmFtcGxlKG1fcmVzdWx0KTsKKyAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0g
U3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKGV4dHJhY3RSZXN1bHQobV9yZXN1bHQpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAg
ICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldLCBjYW5UcmFtcGxlKTsKICAg
ICAgICAgfQpAQCAtMTYzLDcgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGdlbmVyYXRl
SW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKICAgICB7CiAgICAgICAgIHRoaXMtPnNldFVw
KGppdCk7Ci0gICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMt
Pm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0KSk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwo
aml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIGV4dHJhY3RSZXN1bHQodGhpcy0+
bV9yZXN1bHQpKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CiAgICAgfQogfTsKQEAg
LTE4Nyw3ICsxODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNw
ZWN1bGF0aXZlSklUKiBqaXQpCiAgICAgewogICAgICAgICB0aGlzLT5zZXRVcChqaXQpOwotICAg
ICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9u
LCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEpKTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2Fs
bChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlz
LT5tX3Jlc3VsdCksIG1fYXJndW1lbnQxKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7
CiAgICAgfQogCkBAIC0yMTUsNyArMjE1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZ2VuZXJh
dGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0
VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhp
cy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50Mikp
OworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1
bmN0aW9uLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgbV9hcmd1bWVudDEsIG1fYXJn
dW1lbnQyKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CiAgICAgfQogCkBAIC0yNDcs
NyArMjQ3LDcgQEAgcHJvdGVjdGVkOiAgICAKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKICAg
ICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKICAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1
bWVudDEsIG1fYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIGV4
dHJhY3RSZXN1bHQodGhpcy0+bV9yZXN1bHQpLCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCiAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudDMpKTsKICAgICAgICAgdGhpcy0+dGVhckRvd24oaml0
KTsKICAgICB9CkBAIC0yODMsNyArMjgzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5z
ZXRVcChqaXQpOwogICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAogICAgICAgICAgICAgaml0LT5j
YWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1f
cmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgdGhpcy0+
bV9mdW5jdGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlzLT5tX3Jlc3VsdCksIG1fYXJndW1lbnQxLCBt
X2FyZ3VtZW50MiwKICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQpKTsK
ICAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKICAgICB9CkBAIC0zMjIsNyArMzIyLDcgQEAg
cHJvdGVjdGVkOiAgICAKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKICAgICAgICAgdGhpcy0+
cmVjb3JkQ2FsbCgKICAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAg
ICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJn
dW1lbnQyLAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIGV4dHJhY3RSZXN1bHQo
dGhpcy0+bV9yZXN1bHQpLCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCiAgICAgICAgICAgICAg
ICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0LCBtX2FyZ3VtZW50NSkpOwogICAgICAgICB0aGlz
LT50ZWFyRG93bihqaXQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTUxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg4OSw2ICs0ODg5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAg
ICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIGNvbXBpbGVJbihub2RlKTsKKyAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKICAgICAgICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGdldCB0byB0aGUgcG9pbnQgb2YgY29kZSBlbWlzc2lvbiBmb3IgYSBHYXJiYWdlVmFs
dWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczOSw2ICs0NzM5
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIGNvbXBpbGVJbihub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIG1faml0LmFk
ZDY0KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2Rl
LT5leGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSkpOwogICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDYgKzkzMCw2NSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAjZW5kaWYKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICAKKyAgICBpZiAoaXNDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKSB7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPQorICAgICAgICAgICAganNEeW5hbWlj
Q2FzdDxKU1N0cmluZyo+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OworICAgICAgICBpZiAoc3RyaW5nICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkKKyAgICAg
ICAgICAgICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzSWRlbnRpZmllcigpKSB7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIGp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkluT3B0aW1p
emUsCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlc3VsdEdQUiks
IGJhc2VHUFIsCisgICAgICAgICAgICAgICAgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5hZGRJbihJblJlY29yZCgKKyAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBqdW1wLCBzbG93UGF0aC5nZXQoKSwgc2FmZUNh
c3Q8aW50OF90PihiYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHJl
c3VsdEdQUiksIHVzZWRSZWdpc3RlcnMoKSkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJhc2UudXNlKCk7CisgICAgICAgICAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQoCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBub2RlLCBE
YXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworI2Vsc2UK
KyAgICAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IGtleS5qc1ZhbHVlUmVncygpOworICAgICAg
ICAKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGJhc2UudXNlKCk7CisgICAga2V5LnVzZSgpOwor
ICAgICAgICAKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24oCisgICAg
ICAgIG9wZXJhdGlvbkdlbmVyaWNJbiwgZXh0cmFjdFJlc3VsdChKU1ZhbHVlUmVnczo6cGF5bG9h
ZE9ubHkocmVzdWx0R1BSKSksCisgICAgICAgIGJhc2VHUFIsIHJlZ3MpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisjZWxzZQorICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworI2Vu
ZGlmCit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2Rl
KiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJ
bkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsMTQgQEAgY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAKIGVu
dW0gR2VuZXJhdGVkT3BlcmFuZFR5cGUgeyBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd24sIEdl
bmVyYXRlZE9wZXJhbmRJbnRlZ2VyLCBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlLCBHZW5lcmF0ZWRP
cGVyYW5kSlNWYWx1ZX07CiAKK2lubGluZSBHUFJSZWcgZXh0cmFjdFJlc3VsdChHUFJSZWcgcmVz
dWx0KSB7IHJldHVybiByZXN1bHQ7IH0KKyNpZiBVU0UoSlNWQUxVRTY0KQoraW5saW5lIEdQUlJl
ZyBleHRyYWN0UmVzdWx0KEpTVmFsdWVSZWdzIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0Lmdwcigp
OyB9CisjZWxzZQoraW5saW5lIEpTVmFsdWVSZWdzIGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3Mg
cmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0KKyNlbmRpZgoraW5saW5lIE5vUmVzdWx0VGFnIGV4
dHJhY3RSZXN1bHQoTm9SZXN1bHRUYWcpIHsgcmV0dXJuIE5vUmVzdWx0OyB9CisKIC8vID09PSBT
cGVjdWxhdGl2ZUpJVCA9PT0KIC8vCiAvLyBUaGUgU3BlY3VsYXRpdmVKSVQgaXMgdXNlZCB0byBn
ZW5lcmF0ZSBhIGZhc3QsIGJ1dCBwb3RlbnRpYWxseQpAQCAtNzIzLDcgKzczMSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJP
ck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3Rl
cnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVl
UGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKLQorICAgIAorICAgIHZvaWQgY29tcGls
ZUluKE5vZGUqKTsKKyAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hO
b2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFy
ZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC0xMTcw
LDcgKzExODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1w
bCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEyNzIsNiAr
MTI4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCB2b2lkKiBwb2ludGVyKQogICAgIHsKQEAgLTEzODksNyArMTQwNCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJp
bmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwpAQCAtMTQ5OSw2ICsxNTE0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5wYXlsb2Fk
R1BSKCksIGFyZzIudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdC5wYXlsb2FkR1BSKCksIHJlc3Vs
dC50YWdHUFIoKSk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTE2MjcsMTQg
KzE2NDcsMTYgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24s
IEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IGNhbGw7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtMTY1MiwxNSArMTY3NCwxOSBAQCBwdWJsaWM6CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBpbGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBs
KDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQ
UlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9q
aXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBs
KDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0Lmxv
YWREb3VibGUoSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZXN1bHQpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmFz
c2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgcmVzdWx0KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAj
ZWxpZiBDUFUoQVJNKQpAQCAtMTY2OCwyNiArMTY5NCwzMCBAQCBwdWJsaWM6CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBG
dW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUocmVzdWx0LCBGUFJJbmZvOjphcmd1bWVudEZQ
UjApOworICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKHJlc3VsdCwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRS
ZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsK
ICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rp
b24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHJlc3VsdCwgRlBSSW5mbzo6YXJndW1lbnRG
UFIwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShyZXN1bHQsIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CiAgICAgICAg
IHJldHVybiBjYWxsOwogICAgIH0KICNlbHNlCi0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1
bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBG
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3Qg
RnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAg
ICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogI2VuZGlmIC8vIENQVShBUk1fSEFSREZQKQpAQCAtMTY5NSwx
MyArMTcyNSwxNSBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQ
UlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVE
b3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9qaXQu
bW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQogI2VuZGlmCkBAIC0yMzcxLDcgKzI0MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbGwo
KTsKICAgICAgICAgQVNTRVJUKCFtX2lzRG91YmxlKTsKICAgICAgICAgcmV0dXJuIG1fcmVnaXN0
ZXIucGFpci50YWdHUFI7Ci0gICAgfQorICAgIH0gCiAKICAgICBHUFJSZWcgcGF5bG9hZEdQUigp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTAgKzIwNSwxOCBAQCB2b2lk
IEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgfSBlbHNlIGlmIChpc0Nl
bGwoKSkgewogICAgICAgICBpZiAoYXNDZWxsKCktPmluaGVyaXRzKCZKU1N0cmluZzo6c19pbmZv
KSkgewogICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGFz
Q2VsbCgpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiU3RyaW5nOiAiKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiU3RyaW5nIik7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5pc1JvcGUoKSkK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIihyb3BlKSAiKTsKLSAgICAgICAgICAgIG91dC5w
cmludChzdHJpbmctPnRyeUdldFZhbHVlKCkpOworICAgICAgICAgICAgICAgIG91dC5wcmludCgi
IChyb3BlKSIpOworICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+
dHJ5R2V0VmFsdWVJbXBsKCk7CisgICAgICAgICAgICBpZiAoaW1wbCkgeworICAgICAgICAgICAg
ICAgIGlmIChpbXBsLT5pc0F0b21pYygpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAoYXRvbWljKSIpOworICAgICAgICAgICAgICAgIGlmIChpbXBsLT5pc0lkZW50aWZpZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGlkZW50aWZpZXIpIik7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAodW5yZXNvbHZlZCkiKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiOiAiLCBpbXBsKTsKICAgICAgICAgfSBlbHNlIGlmIChh
c0NlbGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6c19pbmZvKSkgewogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpOwogICAgICAg
ICAgICAgb3V0LnByaW50KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgY29uc3QgU3RyaW5nJiB0cnlHZXRWYWx1ZSgpIGNvbnN0OworICAgICAgICBjb25z
dCBTdHJpbmdJbXBsKiB0cnlHZXRWYWx1ZUltcGwoKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwpAQCAtMzc4LDYg
KzM3OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAg
fQogCisgICAgaW5saW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZUlt
cGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUuaW1wbCgpOworICAgIH0K
KwogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluRm9yCiAgICAgSlNDZWxsKiBjZWxsID0gYmFzZS5hc0NlbGwoKTsKICAg
ICBzaXplX3QgY291bnQgPSAwOwogICAgICAgICAKLSAgICB3aGlsZSAoc2xvdEJhc2UgIT0gY2Vs
bCkgeworICAgIHdoaWxlICghc2xvdEJhc2UgfHwgc2xvdEJhc2UgIT0gY2VsbCkgewogICAgICAg
ICBpZiAoY2VsbC0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5
cGVDaGFpbjsKICAgICAgICAgICAgIApAQCAtMjI1LDggKzIyNSwxMSBAQCBpbmxpbmUgc2l6ZV90
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yCiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5k
IHNsb3RCYXNlIGluIGJhc2UncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gYmFzZQogICAgICAgICAv
LyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgogCi0gICAgICAgIGlmICh2Lmlz
TnVsbCgpKQorICAgICAgICBpZiAodi5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFzbG90
QmFzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgICAgICAgICByZXR1cm4g
SW52YWxpZFByb3RvdHlwZUNoYWluOworICAgICAgICB9CiAKICAgICAgICAgY2VsbCA9IHYuYXND
ZWxsKCk7CiAKQEAgLTI0MSw3ICsyNDQsNiBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluRm9yCiAgICAgICAgICsrY291bnQ7CiAgICAgfQogICAgICAgICAKLSAgICBBU1NF
UlQoY291bnQpOwogICAgIHJldHVybiBjb3VudDsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MTQ3
MikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTMtMDYtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHN1cHBvcnQgb3BfaW4gYW5kIGl0IHNob3VsZCB1c2Ug
cGF0Y2hpbmcgdG8gbWFrZSBpdCBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTczODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIE5vdyBpZiB5b3UgcGFzcyBhIG51bGwgU3RyaW5nSW1w
bCogdGhlbiBzb21ldGhpbmcgd2lsbCBzdGlsbCBnZXQgcHJpbnRlZCBpbnN0ZWFkCisgICAgICAg
IG9mIGNyYXNoaW5nLiBJIGZpZ3VyZSB0aGF0IHRoaXMgaXMgYnJvYWRseSB1c2VmdWwgZm9yIGRl
YnVnIGNvZGUsIGFuZCBJIG1ha2UgdXNlCisgICAgICAgIG9mIGl0IGluIHRoZSBKU0MgcG9ydGlv
biBvZiB0aGlzIHBhdGNoLgorCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmNwcDoKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisKIDIwMTMtMDYtMDkgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQuIE9uIHNvbWUg
Y29tcGlsZXJzIHRoZSBhdXRvbWF0aWMgY29lcmNpb24gZnJvbSBXVEY6OlN0cmluZyB0byBOU1N0
cmluZyoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
OCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uCiAKIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcpCiB7
CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIG91dC5wcmludCgiKG51bGwgU3RyaW5nSW1wbCop
Iik7CiAgICAgb3V0LnByaW50KHN0cmluZy0+dXRmOCgpKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204376</attachid>
            <date>2013-06-11 18:23:32 -0700</date>
            <delta_ts>2013-06-12 13:16:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>60457</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNDc5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wNi0xMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgc3VwcG9ydCBvcF9pbiBhbmQgaXQgc2hvdWxkIHVzZSBw
YXRjaGluZyB0byBtYWtlIGl0IGZhc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExNzM4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IG9wX2luIGluIHRoZSBERkcgYW5kIGdp
dmUgaXQgcGF0Y2hpbmcuIFRoZSBjb2RlIHdlIGdlbmVyYXRlIGlzIGp1c3QKKyAgICAgICAgYSBq
dW1wIG9uIHRoZSBob3QgcGF0aCwgYW5kIHRoZSBzbG93IHBhdGhzIGdlbmVyYXRlIHN0dWJzIGFu
ZCBsaW5rIHRoZSBqdW1wIHRvCisgICAgICAgIHRoZW0uIEkgZGlkbid0IHdhbnQgdG8gYm90aGVy
IHdpdGggcGF0Y2hpbmcgc3RydWN0dXJlcyBhbmQgbG9hZCBvZmZzZXRzIGFuZAorICAgICAgICB0
aGUgbGlrZSwgYWx0aG91Z2ggSSBwcm9iYWJseSBjb3VsZCBoYXZlLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpcyBhIGdpbm9ybW91cyBzcGVlZC11cCBvbiBtaWNyb2JlbmNobWFya3MgZm9yICJp
biIsIG9idmlvdXNseS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZSk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6cmVzZXRTdHViSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpzdHJ1Y3R1cmVT
dHViSW5mb0xlc3NUaGFuKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6c29ydFN0cnVjdHVyZVN0dWJJbmZvcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2Nr
Lmg6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmRlcmVmKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OnZpc2l0V2Vha1JlZmVyZW5jZXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgIChKU0M6OmlzSW5B
Y2Nlc3MpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKFN0cnVjdHVyZVN0dWJJbmZvKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU3R1YkluZm86OmluaXRJbkxpc3QpOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAg
ICogZGZnL0RGR0NDYWxsSGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkNDYWxsSGVscGVy
czo6c2V0dXBSZXN1bHRzKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdGaXh1
cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgor
ICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZVJl
Z3M6OnBheWxvYWRPbmx5KToKKyAgICAgICAgKEpTVmFsdWVSZWdzKToKKyAgICAgICAgKEpTQzo6
REZHOjpKU1ZhbHVlUmVnczo6SlNWYWx1ZVJlZ3MpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFs
dWVSZWdzOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkpTVmFsdWVTb3VyY2U6Om9w
ZXJhdG9yISk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpKSVRDb21waWxlcjo6bGluayk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVy
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6SW5SZWNvcmQ6OkluUmVjb3JkKToKKyAgICAgICAgKElu
UmVjb3JkKToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChKSVRDb21waWxlcik6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmFkZEluKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5
cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgor
ICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6dHJ5UmVwYXRjaEluKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6ZGZnUmVwYXRjaEluKToKKyAgICAgICAgKEpTQzo6REZHOjpkZmdSZXNl
dEluKToKKyAgICAgICAgKiBkZmcvREZHUmVwYXRjaC5oOgorICAgICAgICAoREZHKToKKyAgICAg
ICAgKEpTQzo6REZHOjpkZmdSZXNldEluKToKKyAgICAgICAgKiBkZmcvREZHU2xvd1BhdGhHZW5l
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsU2xvd1BhdGhHZW5lcmF0b3I6OkNhbGxT
bG93UGF0aEdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFNsb3dQYXRoR2VuZXJh
dG9yOjp0ZWFyRG93bik6CisgICAgICAgIChKU0M6OkRGRzo6Q2FsbFJlc3VsdEFuZE5vQXJndW1l
bnRzU2xvd1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpE
Rkc6OkNhbGxSZXN1bHRBbmRPbmVBcmd1bWVudFNsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUlu
dGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kVHdvQXJndW1lbnRzU2xv
d1BhdGhHZW5lcmF0b3I6OmdlbmVyYXRlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OkNh
bGxSZXN1bHRBbmRUaHJlZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxsUmVzdWx0QW5kRm91ckFyZ3VtZW50c1Nsb3dQ
YXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpDYWxs
UmVzdWx0QW5kRml2ZUFyZ3VtZW50c1Nsb3dQYXRoR2VuZXJhdG9yOjpnZW5lcmF0ZUludGVybmFs
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW4pOgorICAgICAgICAoREZHKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpleHRyYWN0UmVz
dWx0KToKKyAgICAgICAgKERGRyk6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNhbGxPcGVyYXRpb24pOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjphcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVz
dWx0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6YXBwZW5kQ2FsbFNldFJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6SlNWYWx1ZU9wZXJhbmQ6OnRhZ0dQUik6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpTVmFsdWU6
OmR1bXApOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRyeUdldFZhbHVlSW1wbCk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpub3Jt
YWxpemVQcm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKToKKwogMjAxMy0wNi0xMCAgTWFyayBI
YWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIGlzQ29udHJhdmVu
ZWRCeVN0cnVjdHVyZSBpcyBiYWNrd2FyZHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDcgKzExNCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXNzdW1pbmdKSVRUeXBlKFByaW4KICAg
ICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwgaGFzaCgpLCAiOlsiLCBSYXdQb2ludGVy
KHRoaXMpLCAiLT4iLCBSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwgIiwgIiwgaml0VHlw
ZSwgY29kZVR5cGUoKSk7CiAgICAgaWYgKGNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlKQogICAg
ICAgICBvdXQucHJpbnQoc3BlY2lhbGl6YXRpb25LaW5kKCkpOwotICAgIGlmIChtX3Nob3VsZEFs
d2F5c0JlSW5saW5lZCkKKyAgICBpZiAodGhpcy0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUICYmIG1fc2hvdWxkQWx3YXlzQmVJbmxpbmVkKQogICAgICAgICBvdXQucHJpbnQoIiAo
U0FCSSkiKTsKICAgICBpZiAob3duZXJFeGVjdXRhYmxlKCktPm5ldmVySW5saW5lKCkpCiAgICAg
ICAgIG91dC5wcmludCgiIChOZXZlcklubGluZSkiKTsKQEAgLTI0NzMsMTQgKzI0NzMsMjAgQEAg
dm9pZCBDb2RlQmxvY2s6OnJlc2V0U3R1YkludGVybmFsKFJlcGF0YwogICAgIGNhc2UgSklUQ29k
ZTo6QmFzZWxpbmVKSVQ6CiAgICAgICAgIGlmIChpc0dldEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkp
CiAgICAgICAgICAgICBKSVQ6OnJlc2V0UGF0Y2hHZXRCeUlkKHJlcGF0Y2hCdWZmZXIsICZzdHVi
SW5mbyk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc1B1dEJ5SWRBY2Nlc3MoYWNjZXNzVHlwZSkpOwogICAgICAgICAgICAgSklUOjpy
ZXNldFBhdGNoUHV0QnlJZChyZXBhdGNoQnVmZmVyLCAmc3R1YkluZm8pOworICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgogICAgICAgICBpZiAoaXNH
ZXRCeUlkQWNjZXNzKGFjY2Vzc1R5cGUpKQogICAgICAgICAgICAgREZHOjpkZmdSZXNldEdldEJ5
SUQocmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8pOwotICAgICAgICBlbHNlCisgICAgICAgIGVsc2Ug
aWYgKGlzUHV0QnlJZEFjY2VzcyhhY2Nlc3NUeXBlKSkKICAgICAgICAgICAgIERGRzo6ZGZnUmVz
ZXRQdXRCeUlEKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0luQWNjZXNzKGFjY2Vzc1R5cGUpKTsKKyAgICAgICAg
ICAgIERGRzo6ZGZnUmVzZXRJbihyZXBhdGNoQnVmZmVyLCBzdHViSW5mbyk7CisgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTMyNzgsNiArMzI4NCwxNiBAQCB2b2lkIENvZGVCbG9jazo6c2V0T3B0
aW1pemF0aW9uVGhyZXNob2xkCiB9CiAKICNpZiBFTkFCTEUoSklUKQorc3RhdGljIGJvb2wgc3Ry
dWN0dXJlU3R1YkluZm9MZXNzVGhhbihjb25zdCBTdHJ1Y3R1cmVTdHViSW5mbyYgYSwgY29uc3Qg
U3RydWN0dXJlU3R1YkluZm8mIGIpCit7CisgICAgcmV0dXJuIGEuY2FsbFJldHVybkxvY2F0aW9u
LmV4ZWN1dGFibGVBZGRyZXNzKCkgPCBiLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRk
cmVzcygpOworfQorCit2b2lkIENvZGVCbG9jazo6c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpCit7
CisgICAgc3RkOjpzb3J0KG1fc3RydWN0dXJlU3R1YkluZm9zLmJlZ2luKCksIG1fc3RydWN0dXJl
U3R1YkluZm9zLmVuZCgpLCBzdHJ1Y3R1cmVTdHViSW5mb0xlc3NUaGFuKTsKK30KKwogdWludDMy
X3QgQ29kZUJsb2NrOjphZGp1c3RlZEV4aXRDb3VudFRocmVzaG9sZCh1aW50MzJfdCBkZXNpcmVk
VGhyZXNob2xkKQogewogICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlw
ZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwNiw2ICs0MDYsNyBAQCBwdWJsaWM6CiAKICNp
ZiBFTkFCTEUoSklUKQogICAgIHZvaWQgc2V0TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3Moc2l6
ZV90IHNpemUpIHsgbV9zdHJ1Y3R1cmVTdHViSW5mb3MuZ3JvdyhzaXplKTsgfQorICAgIHZvaWQg
c29ydFN0cnVjdHVyZVN0dWJJbmZvcygpOwogICAgIHNpemVfdCBudW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcygpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zLnNpemUoKTsgfQog
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHJ1Y3R1cmVTdHViSW5mbyhpbnQgaW5kZXgpIHsgcmV0
dXJuIG1fc3RydWN0dXJlU3R1YkluZm9zW2luZGV4XTsgfQogICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0
cnVjdHVyZVN0dWJJbmZvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgdm9p
ZCBTdHJ1Y3R1cmVTdHViSW5mbzo6ZGVyZWYoKQogICAgIGNhc2UgYWNjZXNzX3B1dF9ieV9pZF9s
aXN0OgogICAgICAgICBkZWxldGUgdS5wdXRCeUlkTGlzdC5saXN0OwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBhY2Nlc3NfaW5fbGlzdDogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QqIHBvbHltb3JwaGljU3RydWN0dXJlcyA9IHUuaW5MaXN0LnN0cnVjdHVyZUxp
c3Q7CisgICAgICAgIGRlbGV0ZSBwb2x5bW9ycGhpY1N0cnVjdHVyZXM7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6CiAgICAgY2FzZSBhY2Nl
c3NfZ2V0X2J5X2lkX3Byb3RvOgogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKQEAg
LTExMSw2ICsxMTYsMTIgQEAgYm9vbCBTdHJ1Y3R1cmVTdHViSW5mbzo6dmlzaXRXZWFrUmVmZXJl
bgogICAgICAgICBpZiAoIXUucHV0QnlJZExpc3QubGlzdC0+dmlzaXRXZWFrKCkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgYWNjZXNzX2luX2xp
c3Q6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMgPSB1LmluTGlzdC5zdHJ1Y3R1cmVMaXN0OworICAgICAgICBpZiAoIXBvbHlt
b3JwaGljU3RydWN0dXJlcy0+dmlzaXRXZWFrKHUuaW5MaXN0Lmxpc3RTaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIC8vIFRoZSByZXN0IG9mIHRoZSBpbnN0cnVjdGlvbnMgZG9uJ3QgcmVxdWlyZSByZWZl
cmVuY2VzLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgICAgIC8vIGRvIGFueXRoaW5nLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw3IEBA
IGVudW0gQWNjZXNzVHlwZSB7CiAgICAgYWNjZXNzX3B1dF9ieV9pZF9nZW5lcmljLAogICAgIGFj
Y2Vzc19nZXRfYXJyYXlfbGVuZ3RoLAogICAgIGFjY2Vzc19nZXRfc3RyaW5nX2xlbmd0aCwKKyAg
ICBhY2Nlc3NfaW5fbGlzdAogfTsKIAogaW5saW5lIGJvb2wgaXNHZXRCeUlkQWNjZXNzKEFjY2Vz
c1R5cGUgYWNjZXNzVHlwZSkKQEAgLTkzLDYgKzk0LDE2IEBAIGlubGluZSBib29sIGlzUHV0QnlJ
ZEFjY2VzcyhBY2Nlc3NUeXBlIGEKICAgICB9CiB9CiAKK2lubGluZSBib29sIGlzSW5BY2Nlc3Mo
QWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQoreworICAgIHN3aXRjaCAoYWNjZXNzVHlwZSkgeworICAg
IGNhc2UgYWNjZXNzX2luX2xpc3Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIHN0cnVjdCBTdHJ1Y3R1cmVTdHVi
SW5mbyB7CiAgICAgU3RydWN0dXJlU3R1YkluZm8oKQogICAgICAgICA6IGFjY2Vzc1R5cGUoYWNj
ZXNzX3Vuc2V0KQpAQCAtMTcwLDYgKzE4MSwxMyBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8g
ewogICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX3B1dF9ieV9pZF9saXN0OwogICAgICAgICB1
LnB1dEJ5SWRMaXN0Lmxpc3QgPSBsaXN0OwogICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRJbkxp
c3QoUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBsaXN0LCBpbnQgbGlzdFNpemUpCisg
ICAgeworICAgICAgICBhY2Nlc3NUeXBlID0gYWNjZXNzX2luX2xpc3Q7CisgICAgICAgIHUuaW5M
aXN0LnN0cnVjdHVyZUxpc3QgPSBsaXN0OworICAgICAgICB1LmluTGlzdC5saXN0U2l6ZSA9IGxp
c3RTaXplOworICAgIH0KICAgICAgICAgCiAgICAgdm9pZCByZXNldCgpCiAgICAgewpAQCAtMjk2
LDYgKzMxNCwxMCBAQCBzdHJ1Y3QgU3RydWN0dXJlU3R1YkluZm8gewogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgUG9seW1vcnBoaWNQdXRCeUlkTGlzdCogbGlzdDsKICAgICAgICAgfSBw
dXRCeUlkTGlzdDsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogc3RydWN0dXJlTGlzdDsKKyAgICAgICAgICAgIGludCBsaXN0U2l6
ZTsKKyAgICAgICAgfSBpbkxpc3Q7CiAgICAgfSB1OwogCiAgICAgUmVmUHRyPEpJVFN0dWJSb3V0
aW5lPiBzdHViUm91dGluZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUxNiw2
ICsxNTE2LDEzIEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZUVmZmVjdHModW5zaWcKICAg
ICAgICAgfQogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJs
b2NrKTsKICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIC8v
IEZJWE1FOiBXZSBjYW4gZGV0ZXJtaW5lIHdoZW4gdGhlIHByb3BlcnR5IGRlZmluaXRlbHkgZXhp
c3RzIGJhc2VkIG9uIGFic3RyYWN0CisgICAgICAgIC8vIHZhbHVlIGluZm9ybWF0aW9uLgorICAg
ICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwgaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlVG9wKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzNTAsNiAr
MzM1MCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgYWRkVG9HcmFwaChJZGVudGl0eSwgRWRnZShnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCksIE51bWJlclVzZSkpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3RvX251bWJlcik7CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9w
X2luOiB7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwK
KyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEluLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaW4pOworICAgICAgICB9CiAKICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgIC8vIFBhcnNlIGZhaWxlZCEgVGhpcyBzaG91bGQgbm90IGhhcHBlbiBi
ZWNhdXNlIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tlcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC05
NzYsNyArOTc2LDExIEBAIHB1YmxpYzoKICAgICAgICAgR1BSUmVnIHNyY0EgPSBHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUjsKICAgICAgICAgR1BSUmVnIHNyY0IgPSBHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUjI7CiAKLSAgICAgICAgaWYgKHNyY0IgIT0gZGVzdEEpIHsKKyAgICAgICAgaWYgKGRlc3RB
ID09IEludmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtb3ZlKHNyY0IsIGRlc3RCKTsKKyAgICAg
ICAgZWxzZSBpZiAoZGVzdEIgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAgIG1vdmUoc3Jj
QSwgZGVzdEEpOworICAgICAgICBlbHNlIGlmIChzcmNCICE9IGRlc3RBKSB7CiAgICAgICAgICAg
ICAvLyBIYW5kbGUgdGhlIGVhc3kgY2FzZXMgLSB0d28gc2ltcGxlIG1vdmVzLgogICAgICAgICAg
ICAgbW92ZShzcmNBLCBkZXN0QSk7CiAgICAgICAgICAgICBtb3ZlKHNyY0IsIGRlc3RCKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJl
dmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDYgKzIwNCw3IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3B1dF90b19iYXNlOgogICAg
IGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfaW46
CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogICAgICAgICAKICAgICBjYXNl
IG9wX2NhbGxfdmFyYXJnczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI2LDYgKzgyNiwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgc2V0VXNlS2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENl
bGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSBJbjogeworICAgICAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBhdCBzb21lIHBvaW50IGhhdmUgYXJyYXkgcHJvZmlsaW5nIG9uIG9wX2luLCBpbiB3
aGljaAorICAgICAgICAgICAgLy8gY2FzZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIHR1cm4gdGhpcyBp
bnRvIGEga2luZCBvZiBHZXRCeVZhbC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0VXNl
S2luZEFuZFVuYm94SWZQcm9maXRhYmxlPENlbGxVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAg
ICBjYXNlIElkZW50aXR5OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQ
UkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dQUklu
Zm8uaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
UFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICB7
CiAgICAgfQogICAgIAorICAgIHN0YXRpYyBKU1ZhbHVlUmVncyBwYXlsb2FkT25seShHUFJSZWcg
Z3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVSZWdzKGdwcik7CisgICAgfQorICAg
IAogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52YWxpZEdQ
UlJlZzsgfQogICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dwcjsgfQpA
QCAtMTM3LDEwICsxNDIsMTggQEAgcHVibGljOgogICAgICAgICA6IG1fdGFnR1BSKHRhZ0dQUikK
ICAgICAgICAgLCBtX3BheWxvYWRHUFIocGF5bG9hZEdQUikKICAgICB7Ci0gICAgICAgIEFTU0VS
VCgoc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3RhZ0dQUikgPT0gSW52YWxpZEdQUlJlZykgPT0gKHN0
YXRpY19jYXN0PEdQUlJlZz4ocGF5bG9hZEdQUikgPT0gSW52YWxpZEdQUlJlZykpOwogICAgIH0K
ICAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEdQ
UlJlZz4obV90YWdHUFIpID09IEludmFsaWRHUFJSZWc7IH0KKyAgICBzdGF0aWMgSlNWYWx1ZVJl
Z3MgcGF5bG9hZE9ubHkoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBKU1ZhbHVl
UmVncyhJbnZhbGlkR1BSUmVnLCBncHIpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPihtX3Rh
Z0dQUikgPT0gSW52YWxpZEdQUlJlZworICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8R1BSUmVn
PihtX3BheWxvYWRHUFIpID09IEludmFsaWRHUFJSZWc7CisgICAgfQogICAgIAogICAgIEdQUlJl
ZyB0YWdHUFIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fdGFnR1BSKTsg
fQogICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8R1BS
UmVnPihtX3BheWxvYWRHUFIpOyB9CkBAIC0xOTYsNyArMjA5LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KG1fYmFzZU9yVGFnKSA9PSBJbnZhbGlkR1BS
UmVnICYmIHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkKSA9PSBJbnZhbGlkR1BSUmVnOyB9
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdQUlJlZz4obV9iYXNlT3JUYWcpID09IEludmFsaWRHUFJSZWcKKyAgICAgICAgICAg
ICYmIHN0YXRpY19jYXN0PEdQUlJlZz4obV9wYXlsb2FkKSA9PSBJbnZhbGlkR1BSUmVnOworICAg
IH0KICAgICAKICAgICBib29sIGlzQWRkcmVzcygpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MTQ0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5r
QnVmZmVyJiBsaW5rQgogICAgICAgICBjb2RlT3JpZ2luc1tpXSA9IHJlY29yZC5tX2NvZGVPcmln
aW47CiAgICAgfQogICAgIAotICAgIG1fY29kZUJsb2NrLT5zZXROdW1iZXJPZlN0cnVjdHVyZVN0
dWJJbmZvcyhtX3Byb3BlcnR5QWNjZXNzZXMuc2l6ZSgpKTsKKyAgICBtX2NvZGVCbG9jay0+c2V0
TnVtYmVyT2ZTdHJ1Y3R1cmVTdHViSW5mb3MobV9wcm9wZXJ0eUFjY2Vzc2VzLnNpemUoKSArIG1f
aW5zLnNpemUoKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcHJvcGVydHlBY2Nl
c3Nlcy5zaXplKCk7ICsraSkgewogICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgaW5mbyA9IG1f
Y29kZUJsb2NrLT5zdHJ1Y3R1cmVTdHViSW5mbyhpKTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2Fs
bCBjYWxsUmV0dXJuTG9jYXRpb24gPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9wcm9wZXJ0eUFj
Y2Vzc2VzW2ldLm1fc2xvd1BhdGhHZW5lcmF0b3ItPmNhbGwoKSk7CkBAIC0yMDUsNiArMjA1LDIw
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmxpbmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgbV9w
cm9wZXJ0eUFjY2Vzc2VzW2ldLm1fdXNlZFJlZ2lzdGVycy5jb3B5SW5mbyhpbmZvLnBhdGNoLmRm
Zy51c2VkUmVnaXN0ZXJzKTsKICAgICAgICAgaW5mby5wYXRjaC5kZmcucmVnaXN0ZXJzRmx1c2hl
ZCA9IG1fcHJvcGVydHlBY2Nlc3Nlc1tpXS5tX3JlZ2lzdGVyTW9kZSA9PSBQcm9wZXJ0eUFjY2Vz
c1JlY29yZDo6UmVnaXN0ZXJzRmx1c2hlZDsKICAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1faW5zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBp
bmZvID0gbV9jb2RlQmxvY2stPnN0cnVjdHVyZVN0dWJJbmZvKG1fcHJvcGVydHlBY2Nlc3Nlcy5z
aXplKCkgKyBpKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwganVtcCA9IGxpbmtCdWZmZXIu
bG9jYXRpb25PZihtX2luc1tpXS5tX2p1bXApOworICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNh
bGxSZXR1cm5Mb2NhdGlvbiA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2luc1tpXS5tX3Nsb3dQ
YXRoR2VuZXJhdG9yLT5jYWxsKCkpOworICAgICAgICBpbmZvLmNvZGVPcmlnaW4gPSBtX2luc1tp
XS5tX2NvZGVPcmlnaW47CisgICAgICAgIGluZm8uaG90UGF0aEJlZ2luID0ganVtcDsKKyAgICAg
ICAgaW5mby5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsUmV0dXJuTG9jYXRpb247CisgICAgICAg
IGluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UgPSBkaWZmZXJlbmNlQmV0d2VlbkNv
ZGVQdHIoY2FsbFJldHVybkxvY2F0aW9uLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV9pbnNbaV0u
bV9zbG93UGF0aEdlbmVyYXRvci0+bGFiZWwoKSkpOworICAgICAgICBpbmZvLnBhdGNoLmRmZy5i
YXNlR1BSID0gbV9pbnNbaV0ubV9iYXNlR1BSOworICAgICAgICBpbmZvLnBhdGNoLmRmZy52YWx1
ZUdQUiA9IG1faW5zW2ldLm1fcmVzdWx0R1BSOworICAgICAgICBtX2luc1tpXS5tX3VzZWRSZWdp
c3RlcnMuY29weUluZm8oaW5mby5wYXRjaC5kZmcudXNlZFJlZ2lzdGVycyk7CisgICAgICAgIGlu
Zm8ucGF0Y2guZGZnLnJlZ2lzdGVyc0ZsdXNoZWQgPSBmYWxzZTsKKyAgICB9CisgICAgbV9jb2Rl
QmxvY2stPnNvcnRTdHJ1Y3R1cmVTdHViSW5mb3MoKTsKICAgICAKICAgICBtX2NvZGVCbG9jay0+
c2V0TnVtYmVyT2ZDYWxsTGlua0luZm9zKG1fanNDYWxscy5zaXplKCkpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2pzQ2FsbHMuc2l6ZSgpOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDE1MTQ0MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjM1LDYgKzIzNSwyOCBAQCBzdHJ1Y3QgUHJvcGVydHlBY2Nlc3NSZWNvcmQgewogICAg
IFJlZ2lzdGVyTW9kZSBtX3JlZ2lzdGVyTW9kZTsKIH07CiAKK3N0cnVjdCBJblJlY29yZCB7Cisg
ICAgSW5SZWNvcmQoCisgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJs
ZXI6OlBhdGNoYWJsZUp1bXAganVtcCwKKyAgICAgICAgU2xvd1BhdGhHZW5lcmF0b3IqIHNsb3dQ
YXRoR2VuZXJhdG9yLCBpbnQ4X3QgYmFzZUdQUiwgaW50OF90IHJlc3VsdEdQUiwKKyAgICAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCisgICAgICAgIDogbV9jb2RlT3JpZ2lu
KGNvZGVPcmlnaW4pCisgICAgICAgICwgbV9qdW1wKGp1bXApCisgICAgICAgICwgbV9zbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aEdlbmVyYXRvcikKKyAgICAgICAgLCBtX2Jhc2VHUFIoYmFzZUdQ
UikKKyAgICAgICAgLCBtX3Jlc3VsdEdQUihyZXN1bHRHUFIpCisgICAgICAgICwgbV91c2VkUmVn
aXN0ZXJzKHVzZWRSZWdpc3RlcnMpCisgICAgeworICAgIH0KKyAgICAKKyAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbjsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX2p1bXA7
CisgICAgU2xvd1BhdGhHZW5lcmF0b3IqIG1fc2xvd1BhdGhHZW5lcmF0b3I7CisgICAgaW50OF90
IG1fYmFzZUdQUjsKKyAgICBpbnQ4X3QgbV9yZXN1bHRHUFI7CisgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOworfTsKKwogLy8gPT09IEpJVENvbXBpbGVyID09PQogLy8KIC8vIERGRzo6
SklUQ29tcGlsZXIgaXMgcmVzcG9uc2libGUgZm9yIGdlbmVyYXRpbmcgSklUIGNvZGUgZnJvbSB0
aGUgZGF0YWZsb3cgZ3JhcGguCkBAIC0zNzYsNiArMzk4LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIG1fcHJvcGVydHlBY2Nlc3Nlcy5hcHBlbmQocmVjb3JkKTsKICAgICB9CisgICAgCisg
ICAgdm9pZCBhZGRJbihjb25zdCBJblJlY29yZCYgcmVjb3JkKQorICAgIHsKKyAgICAgICAgbV9p
bnMuYXBwZW5kKHJlY29yZCk7CisgICAgfQogCiAgICAgdm9pZCBhZGRKU0NhbGwoQ2FsbCBmYXN0
Q2FsbCwgQ2FsbCBzbG93Q2FsbCwgRGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2ssIENhbGxMaW5r
SW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGUsIEdQUlJlZyBjYWxsZWUsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKICAgICB7CkBAIC00ODEsNiArNTA4LDcgQEAgcHJpdmF0ZToKICAgICB9OwogICAgIAog
ICAgIFZlY3RvcjxQcm9wZXJ0eUFjY2Vzc1JlY29yZCwgND4gbV9wcm9wZXJ0eUFjY2Vzc2VzOwor
ICAgIFZlY3RvcjxJblJlY29yZCwgND4gbV9pbnM7CiAgICAgVmVjdG9yPEpTQ2FsbFJlY29yZCwg
ND4gbV9qc0NhbGxzOwogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBtX2V4aXRD
b21waWxhdGlvbkluZm87CiAgICAgVmVjdG9yPFZlY3RvcjxMYWJlbD4gPiBtX2V4aXRTaXRlTGFi
ZWxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjYsNiArMjI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIG1hY3JvKFRvU3RyaW5nLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAogICAgIG1hY3JvKE5ld1N0cmluZ09iamVjdCwgTm9k
ZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oTWFrZVJvcGUsIE5vZGVSZXN1bHRKUykgXAorICAgIG1h
Y3JvKEluLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJl
cnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBOb2RlcyB1c2VkIGZvciBhY3RpdmF0aW9ucy4gQWN0
aXZhdGlvbiBzdXBwb3J0IHdvcmtzIGJ5IGhhdmluZyBpdCBhbmNob3JlZCBhdCAqL1wKICAgICAv
KiBlcGlsZ291ZXMgdmlhIFRlYXJPZmZBY3RpdmF0aW9uLCBhbmQgYWxsIENyZWF0ZUFjdGl2YXRp
b24gbm9kZXMga2VwdCBhbGl2ZSBieSAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiAr
MjksNyBAQAogI2luY2x1ZGUgIkFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21tb25TbG93UGF0aHMu
aCIKICNpbmNsdWRlICJDb3BpZWRTcGFjZUlubGluZXMuaCIKICNpbmNsdWRlICJERkdPU1JFeGl0
LmgiCiAjaW5jbHVkZSAiREZHUmVwYXRjaC5oIgpAQCAtNTM5LDYgKzU0MCw1NiBAQCBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwogfQogCitKX0ZVTkNUSU9OX1dSQVBQRVJfV0lUSF9SRVRVUk5fQUREUkVT
U19FQ0kob3BlcmF0aW9uSW5PcHRpbWl6ZSk7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkluT3B0aW1pemVXaXRoUmV0dXJuQWRkcmVzcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogYmFzZSwgU3RyaW5nSW1wbCoga2V5LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCit7CisgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgCisgICAgaWYgKCFiYXNlLT5pc09iamVjdCgpKSB7
CisgICAgICAgIHZtLT5leGNlcHRpb24gPSBjcmVhdGVJbnZhbGlkUGFyYW1FcnJvcihleGVjLCAi
aW4iLCBiYXNlKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAor
ICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9IGV4ZWMtPmNvZGVCbG9jaygpLT5nZXRT
dHViSW5mbyhyZXR1cm5BZGRyZXNzKTsKKyAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0
aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby5hY2Nlc3NUeXBlKTsKKworICAgIElkZW50aWZp
ZXIgaWRlbnQodm0sIGtleSk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZSk7CisgICAgYm9v
bCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBz
bG90KTsKKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVChhY2Nlc3NUeXBlID09IHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpOworICAgIAorICAgIGlmIChzdHViSW5mby5zZWVuKQorICAgICAgICBkZmdSZXBh
dGNoSW4oZXhlYywgYmFzZSwgaWRlbnQsIHJlc3VsdCwgc2xvdCwgc3R1YkluZm8pOworICAgIGVs
c2UKKyAgICAgICAgc3R1YkluZm8uc2VlbiA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4ocmVzdWx0KSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uSW4oRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFN0cmlu
Z0ltcGwqIGtleSkKK3sKKyAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKworICAgIGlmICghYmFzZS0+aXNPYmplY3Qo
KSkgeworICAgICAgICB2bS0+ZXhjZXB0aW9uID0gY3JlYXRlSW52YWxpZFBhcmFtRXJyb3IoZXhl
YywgImluIiwgYmFzZSk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIElkZW50aWZpZXIgaWRlbnQodm0sIGtleSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdlbmVyaWNJbihFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZN
KiB2bSA9ICZleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0s
IGV4ZWMpOworCisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oQ29tbW9uU2xv
d1BhdGhzOjpvcEluKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBiYXNlKSkpOworfQorCiBF
bmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxDdXN0b21HZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5U2xvdDo6R2V0VmFsdWVGdW5jIGZ1
bmN0aW9uLCBTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFU
SU9OIG9wZXJhdGlvbkdlCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdl
dEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJO
QUw7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExp
c3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7
CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZShF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKK0Vu
Y29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uSW5PcHRpbWl6ZShFeGVjU3RhdGUq
LCBKU0NlbGwqLCBTdHJpbmdJbXBsKik7CitFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkluKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIFN0cmluZ0ltcGwqKTsKK0VuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uR2VuZXJpY0luKEV4ZWNTdGF0ZSosIEpTQ2VsbCos
IEVuY29kZWRKU1ZhbHVlKTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEN1c3RvbUdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBQcm9wZXJ0eVNsb3Q6OkdldFZh
bHVlRnVuYywgU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIERGR19P
UEVSQVRJT04gb3BlcmF0aW9uQ2FsbEdldHRlcihFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
KSBXVEZfSU5URVJOQUw7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5R2xvYmFs
VmFyV3JpdGUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkgV1RGX0lOVEVSTkFMOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00ODksNiArNDg5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0U2Nv
cGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0NlbGxPdGhlcik7
CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluOgorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgSWRlbnRpdHk6CiAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTUxNDQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTExMSw2ICsxMTExLDEyMiBAQCB2b2lkIGRmZ0J1aWxkUHV0QnlJZExpc3QoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgIGRmZ1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlR2VuZXJpY1B1dEJ5SWRGdW5j
dGlvbihzbG90LCBwdXRLaW5kKSk7CiB9CiAKK3N0YXRpYyBib29sIHRyeVJlcGF0Y2hJbigKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKCFiYXNlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVy
dHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKHdhc0ZvdW5kKSB7CisgICAgICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOworICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZS0+c3RydWN0dXJlKCk7CisgICAgCisgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0SWdub3JlZDsKKyAgICBzaXplX3QgY291bnQgPSBub3JtYWxpemVQ
cm90b3R5cGVDaGFpbkZvckNoYWluQWNjZXNzKGV4ZWMsIGJhc2UsIHdhc0ZvdW5kID8gc2xvdC5z
bG90QmFzZSgpIDogSlNWYWx1ZSgpLCBpZGVudCwgb2Zmc2V0SWdub3JlZCk7CisgICAgaWYgKGNv
dW50ID09IEludmFsaWRQcm90b3R5cGVDaGFpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0OworICAgIGludCBsaXN0SW5kZXg7CisgICAgCisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsID0gc3R1YkluZm8uaG90UGF0aEJlZ2luOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlTGFiZWw7CisgICAgCisgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0g
YWNjZXNzX3Vuc2V0KSB7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgc3R1YkluZm8uaW5pdElu
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDApOworICAgICAgICBzbG93Q2FzZUxhYmVs
ID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAg
ICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSk7CisgICAgICAgIGxpc3RJ
bmRleCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8u
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfaW5fbGlzdCk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IHN0dWJJbmZvLnUuaW5MaXN0LnN0cnVjdHVyZUxpc3Q7CisgICAgICAgIGxpc3RJ
bmRleCA9IHN0dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplOworICAgICAgICBzbG93Q2FzZUxhYmVs
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChsaXN0SW5kZXggPT0gUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4g
PSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOworICAgIFJlZlB0cjxKSVRTdHViUm91
dGluZT4gc3R1YlJvdXRpbmU7CisgICAgCisgICAgeworICAgICAgICBHUFJSZWcgYmFzZUdQUiA9
IHN0YXRpY19jYXN0PEdQUlJlZz4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gc3RhdGljX2Nhc3Q8R1BSUmVnPihzdHViSW5mby5wYXRjaC5k
ZmcudmFsdWVHUFIpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IFJlZ2lzdGVyU2V0KHN0
dWJJbmZvLnBhdGNoLmRmZy51c2VkUmVnaXN0ZXJzKS5nZXRGcmVlR1BSKCk7CisgICAgICAgIAor
ICAgICAgICBDQ2FsbEhlbHBlcnMgc3R1YkppdCh2bSk7CisgICAgICAgIAorICAgICAgICBib29s
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoOworICAgICAgICBpZiAoc2NyYXRjaEdQUiA9PSBJbnZhbGlk
R1BSUmVnKSB7CisgICAgICAgICAgICBzY3JhdGNoR1BSID0gU3BlY3VsYXRpdmVKSVQ6OnNlbGVj
dFNjcmF0Y2hHUFIoYmFzZUdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIHN0dWJKaXQucHVz
aChzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIG5lZWRUb1Jlc3RvcmVTY3JhdGNoID0gdHJ1ZTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZWVkVG9SZXN0b3JlU2NyYXRjaCA9IGZhbHNl
OworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGZhaWx1cmVDYXNl
czsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChzdHViSml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSkpOworICAgICAg
ICAKKyAgICAgICAgU3RydWN0dXJlKiBjdXJyU3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAg
ICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiogaXQgPSBjaGFpbi0+aGVhZCgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSwgKytpdCkgeworICAgICAgICAgICAg
SlNPYmplY3QqIHByb3RvdHlwZSA9IGFzT2JqZWN0KGN1cnJTdHJ1Y3R1cmUtPnByb3RvdHlwZUZv
ckxvb2t1cChleGVjKSk7CisgICAgICAgICAgICBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2so
CisgICAgICAgICAgICAgICAgcHJvdG90eXBlLCBwcm90b3R5cGUtPnN0cnVjdHVyZSgpLCBleGVj
LT5jb2RlQmxvY2soKSwgc3R1YkluZm8sIHN0dWJKaXQsCisgICAgICAgICAgICAgICAgZmFpbHVy
ZUNhc2VzLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgc3R1
YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih3YXNGb3VuZCkpKSwgcmVzdWx0R1BSKTsKKyNlbHNlCisgICAgICAgIHN0dWJKaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHdhc0ZvdW5kKSwgcmVzdWx0R1BSKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vzcywg
ZmFpbDsKKyAgICAgICAgCisgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKKyAgICAgICAgCisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKnZtLCAmc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCkpOworCisgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRj
aEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKKyAgICAgICAgCisgICAgICAgIHN0dWJS
b3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfREZHX1NUVUIoCisgICAgICAgICAgICBwYXRjaEJ1
ZmZlciwKKyAgICAgICAgICAgICgiREZHIEluIChmb3VuZCA9ICVzKSBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwIiwKKyAgICAgICAgICAgICAgICB3YXNGb3VuZCA/ICJ5ZXMiIDogIm5vIiwg
dG9DU3RyaW5nKCpleGVjLT5jb2RlQmxvY2soKSkuZGF0YSgpLAorICAgICAgICAgICAgICAgIHN1
Y2Nlc3NMYWJlbC5leGVjdXRhYmxlQWRkcmVzcygpKSk7CisgICAgfQorICAgIAorICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqdm0sIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHRydWUpOworICAgIHN0
dWJJbmZvLnUuaW5MaXN0Lmxpc3RTaXplKys7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8u
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldCgwKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gbGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpOworfQorCit2b2lkIGRmZ1JlcGF0Y2hJbigKKyAg
ICBFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGJvb2wgd2FzRm91bmQsCisgICAgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCit7CisgICAgaWYgKHRyeVJlcGF0Y2hJbihleGVjLCBiYXNlLCBp
ZGVudCwgd2FzRm91bmQsIHNsb3QsIHN0dWJJbmZvKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRm
Z1JlcGF0Y2hDYWxsKGV4ZWMtPmNvZGVCbG9jaygpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24sIG9wZXJhdGlvbkluKTsKK30KKwogc3RhdGljIHZvaWQgbGlua1Nsb3dGb3IoUmVwYXRjaEJ1
ZmZlciYgcmVwYXRjaEJ1ZmZlciwgVk0qIHZtLCBDYWxsTGlua0luZm8mIGNhbGxMaW5rSW5mbywg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIGlmIChraW5kID09IENvZGVGb3JD
YWxsKSB7CkBAIC0xMzA1LDYgKzE0MjEsMTEgQEAgdm9pZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRj
aEJ1ZmZlciYgcmVwYQogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCit2b2lkIGRmZ1Jlc2V0
SW4oUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvKQoreworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQoMCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1JlcGF0Y2guaAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdSZXBhdGNoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDExICs0MCwxMyBAQCB2b2lk
IGRmZ0J1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXRlKiwgSlNWCiB2b2lkIGRmZ0J1aWxkR2V0QnlJ
RFByb3RvTGlzdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3Qg
UHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZnUmVwYXRjaFB1dEJ5
SUQoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7CiB2b2lkIGRmZ0J1aWxkUHV0
QnlJZExpc3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFB1
dFByb3BlcnR5U2xvdCYsIFN0cnVjdHVyZVN0dWJJbmZvJiwgUHV0S2luZCk7Cit2b2lkIGRmZ1Jl
cGF0Y2hJbihFeGVjU3RhdGUqLCBKU0NlbGwqLCBjb25zdCBJZGVudGlmaWVyJiwgYm9vbCB3YXNG
b3VuZCwgY29uc3QgUHJvcGVydHlTbG90JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKIHZvaWQgZGZn
TGlua0ZvcihFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8mLCBDb2RlQmxvY2sqLCBKU0Z1bmN0aW9u
KiBjYWxsZWUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7
CiB2b2lkIGRmZ0xpbmtTbG93Rm9yKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyYsIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogdm9pZCBkZmdMaW5rQ2xvc3VyZUNhbGwoRXhlY1N0YXRlKiwgQ2Fs
bExpbmtJbmZvJiwgQ29kZUJsb2NrKiwgU3RydWN0dXJlKiwgRXhlY3V0YWJsZUJhc2UqLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIpOwogdm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYs
IFN0cnVjdHVyZVN0dWJJbmZvJik7CiB2b2lkIGRmZ1Jlc2V0UHV0QnlJRChSZXBhdGNoQnVmZmVy
JiwgU3RydWN0dXJlU3R1YkluZm8mKTsKK3ZvaWQgZGZnUmVzZXRJbihSZXBhdGNoQnVmZmVyJiwg
U3RydWN0dXJlU3R1YkluZm8mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkBAIC02
MSw2ICs2Myw3IEBAIG5hbWVzcGFjZSBERkcgewogCiBpbmxpbmUgTk9fUkVUVVJOIHZvaWQgZGZn
UmVzZXRHZXRCeUlEKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogaW5saW5lIE5PX1JFVFVSTiB2b2lkIGRmZ1Jlc2V0
UHV0QnlJRChSZXBhdGNoQnVmZmVyJiwgU3RydWN0dXJlU3R1YkluZm8mKSB7IFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KK2lubGluZSBOT19SRVRVUk4gdm9pZCBkZmdSZXNldEluKFJl
cGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpIHsgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsgfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nsb3dQYXRoR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2xvd1BhdGhHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX3Jlc3VsdChyZXN1bHQpCiAgICAgewogICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVl
ZFRvU3BpbGwpCi0gICAgICAgICAgICBqaXQtPnNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzSW1wbChm
YWxzZSwgbV9wbGFucywgcmVzdWx0KTsKKyAgICAgICAgICAgIGppdC0+c2lsZW50U3BpbGxBbGxS
ZWdpc3RlcnNJbXBsKGZhbHNlLCBtX3BsYW5zLCBleHRyYWN0UmVzdWx0KHJlc3VsdCkpOwogICAg
IH0KICAgICAKICAgICB2aXJ0dWFsIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwoKSBjb25zdApA
QCAtMTMzLDcgKzEzMyw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIHRlYXJEb3duKFNwZWN1bGF0
aXZlSklUKiBqaXQpCiAgICAgewogICAgICAgICBpZiAobV9zcGlsbE1vZGUgPT0gTmVlZFRvU3Bp
bGwpIHsKLSAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0gU3BlY3VsYXRpdmVKSVQ6OnBp
Y2tDYW5UcmFtcGxlKG1fcmVzdWx0KTsKKyAgICAgICAgICAgIEdQUlJlZyBjYW5UcmFtcGxlID0g
U3BlY3VsYXRpdmVKSVQ6OnBpY2tDYW5UcmFtcGxlKGV4dHJhY3RSZXN1bHQobV9yZXN1bHQpKTsK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcGxhbnMuc2l6ZSgpOyBpLS07KQogICAg
ICAgICAgICAgICAgIGppdC0+c2lsZW50RmlsbChtX3BsYW5zW2ldLCBjYW5UcmFtcGxlKTsKICAg
ICAgICAgfQpAQCAtMTYzLDcgKzE2Myw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGdlbmVyYXRl
SW50ZXJuYWwoU3BlY3VsYXRpdmVKSVQqIGppdCkKICAgICB7CiAgICAgICAgIHRoaXMtPnNldFVw
KGppdCk7Ci0gICAgICAgIHRoaXMtPnJlY29yZENhbGwoaml0LT5jYWxsT3BlcmF0aW9uKHRoaXMt
Pm1fZnVuY3Rpb24sIHRoaXMtPm1fcmVzdWx0KSk7CisgICAgICAgIHRoaXMtPnJlY29yZENhbGwo
aml0LT5jYWxsT3BlcmF0aW9uKHRoaXMtPm1fZnVuY3Rpb24sIGV4dHJhY3RSZXN1bHQodGhpcy0+
bV9yZXN1bHQpKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CiAgICAgfQogfTsKQEAg
LTE4Nyw3ICsxODcsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBnZW5lcmF0ZUludGVybmFsKFNw
ZWN1bGF0aXZlSklUKiBqaXQpCiAgICAgewogICAgICAgICB0aGlzLT5zZXRVcChqaXQpOwotICAg
ICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1bmN0aW9u
LCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEpKTsKKyAgICAgICAgdGhpcy0+cmVjb3JkQ2Fs
bChqaXQtPmNhbGxPcGVyYXRpb24odGhpcy0+bV9mdW5jdGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlz
LT5tX3Jlc3VsdCksIG1fYXJndW1lbnQxKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7
CiAgICAgfQogCkBAIC0yMTUsNyArMjE1LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZ2VuZXJh
dGVJbnRlcm5hbChTcGVjdWxhdGl2ZUpJVCogaml0KQogICAgIHsKICAgICAgICAgdGhpcy0+c2V0
VXAoaml0KTsKLSAgICAgICAgdGhpcy0+cmVjb3JkQ2FsbChqaXQtPmNhbGxPcGVyYXRpb24odGhp
cy0+bV9mdW5jdGlvbiwgdGhpcy0+bV9yZXN1bHQsIG1fYXJndW1lbnQxLCBtX2FyZ3VtZW50Mikp
OworICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKGppdC0+Y2FsbE9wZXJhdGlvbih0aGlzLT5tX2Z1
bmN0aW9uLCBleHRyYWN0UmVzdWx0KHRoaXMtPm1fcmVzdWx0KSwgbV9hcmd1bWVudDEsIG1fYXJn
dW1lbnQyKSk7CiAgICAgICAgIHRoaXMtPnRlYXJEb3duKGppdCk7CiAgICAgfQogCkBAIC0yNDcs
NyArMjQ3LDcgQEAgcHJvdGVjdGVkOiAgICAKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKICAg
ICAgICAgdGhpcy0+cmVjb3JkQ2FsbCgKICAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1
bWVudDEsIG1fYXJndW1lbnQyLAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIGV4
dHJhY3RSZXN1bHQodGhpcy0+bV9yZXN1bHQpLCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCiAg
ICAgICAgICAgICAgICAgbV9hcmd1bWVudDMpKTsKICAgICAgICAgdGhpcy0+dGVhckRvd24oaml0
KTsKICAgICB9CkBAIC0yODMsNyArMjgzLDcgQEAgcHJvdGVjdGVkOgogICAgICAgICB0aGlzLT5z
ZXRVcChqaXQpOwogICAgICAgICB0aGlzLT5yZWNvcmRDYWxsKAogICAgICAgICAgICAgaml0LT5j
YWxsT3BlcmF0aW9uKAotICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIHRoaXMtPm1f
cmVzdWx0LCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCisgICAgICAgICAgICAgICAgdGhpcy0+
bV9mdW5jdGlvbiwgZXh0cmFjdFJlc3VsdCh0aGlzLT5tX3Jlc3VsdCksIG1fYXJndW1lbnQxLCBt
X2FyZ3VtZW50MiwKICAgICAgICAgICAgICAgICBtX2FyZ3VtZW50MywgbV9hcmd1bWVudDQpKTsK
ICAgICAgICAgdGhpcy0+dGVhckRvd24oaml0KTsKICAgICB9CkBAIC0zMjIsNyArMzIyLDcgQEAg
cHJvdGVjdGVkOiAgICAKICAgICAgICAgdGhpcy0+c2V0VXAoaml0KTsKICAgICAgICAgdGhpcy0+
cmVjb3JkQ2FsbCgKICAgICAgICAgICAgIGppdC0+Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgICAg
ICAgICB0aGlzLT5tX2Z1bmN0aW9uLCB0aGlzLT5tX3Jlc3VsdCwgbV9hcmd1bWVudDEsIG1fYXJn
dW1lbnQyLAorICAgICAgICAgICAgICAgIHRoaXMtPm1fZnVuY3Rpb24sIGV4dHJhY3RSZXN1bHQo
dGhpcy0+bV9yZXN1bHQpLCBtX2FyZ3VtZW50MSwgbV9hcmd1bWVudDIsCiAgICAgICAgICAgICAg
ICAgbV9hcmd1bWVudDMsIG1fYXJndW1lbnQ0LCBtX2FyZ3VtZW50NSkpOwogICAgICAgICB0aGlz
LT50ZWFyRG93bihqaXQpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTUxNDQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDg4OSw2ICs0ODg5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIE5ld0Z1bmN0aW9uRXhwcmVzc2lvbjoKICAg
ICAgICAgY29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIGNvbXBpbGVJbihub2RlKTsKKyAgICAg
ICAgYnJlYWs7CiAKICAgICBjYXNlIEdhcmJhZ2VWYWx1ZToKICAgICAgICAgLy8gV2Ugc2hvdWxk
IG5ldmVyIGdldCB0byB0aGUgcG9pbnQgb2YgY29kZSBlbWlzc2lvbiBmb3IgYSBHYXJiYWdlVmFs
dWUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTUxNDQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDczOSw2ICs0NzM5
LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
Y29tcGlsZU5ld0Z1bmN0aW9uRXhwcmVzc2lvbihub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAorICAgIGNhc2UgSW46CisgICAgICAgIGNvbXBpbGVJbihub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgICAgIG1faml0LmFk
ZDY0KFRydXN0ZWRJbW0zMigxKSwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhub2Rl
LT5leGVjdXRpb25Db3VudGVyKCktPmFkZHJlc3MoKSkpOwogICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDYgKzkzMCw2NSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjp3cml0ZUJhcnJpZXIoSlNDZWxsCiAjZW5kaWYKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluKE5vZGUqIG5vZGUpCit7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOworICAgICAgICAKKyAgICBpZiAoaXNDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKSB7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPQorICAgICAgICAgICAganNEeW5hbWlj
Q2FzdDxKU1N0cmluZyo+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OworICAgICAgICBpZiAoc3RyaW5nICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkKKyAgICAg
ICAgICAgICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzSWRlbnRpZmllcigpKSB7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICAgICAgdXNlKG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpQYXRj
aGFibGVKdW1wIGp1bXAgPSBtX2ppdC5wYXRjaGFibGVKdW1wKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIE93blB0cjxTbG93UGF0aEdlbmVyYXRvcj4gc2xvd1BhdGggPSBzbG93UGF0aENh
bGwoCisgICAgICAgICAgICAgICAganVtcC5tX2p1bXAsIHRoaXMsIG9wZXJhdGlvbkluT3B0aW1p
emUsCisgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlc3VsdEdQUiks
IGJhc2VHUFIsCisgICAgICAgICAgICAgICAgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ppdC5hZGRJbihJblJlY29yZCgKKyAgICAg
ICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLCBqdW1wLCBzbG93UGF0aC5nZXQoKSwgc2FmZUNh
c3Q8aW50OF90PihiYXNlR1BSKSwKKyAgICAgICAgICAgICAgICBzYWZlQ2FzdDxpbnQ4X3Q+KHJl
c3VsdEdQUiksIHVzZWRSZWdpc3RlcnMoKSkpOworICAgICAgICAgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3Ioc2xvd1BhdGgucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGJhc2UudXNlKCk7CisgICAgICAgICAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgICAgIGpzVmFsdWVSZXN1bHQoCisgICAgICAgICAgICAgICAgcmVzdWx0R1BSLCBub2RlLCBE
YXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworI2Vsc2UK
KyAgICAgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNh
bGxlZEV4cGxpY2l0bHkpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgSlNWYWx1ZVJlZ3MgcmVncyA9IGtleS5qc1ZhbHVlUmVncygpOworICAgICAg
ICAKKyAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisgICAgICAgIAorICAgIGJhc2UudXNlKCk7CisgICAga2V5LnVzZSgpOwor
ICAgICAgICAKKyAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIGNhbGxPcGVyYXRpb24oCisgICAg
ICAgIG9wZXJhdGlvbkdlbmVyaWNJbiwgZXh0cmFjdFJlc3VsdChKU1ZhbHVlUmVnczo6cGF5bG9h
ZE9ubHkocmVzdWx0R1BSKSksCisgICAgICAgIGJhc2VHUFIsIHJlZ3MpOworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jv
b2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisjZWxzZQorICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworI2Vu
ZGlmCit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlQ29tcGFyZShOb2Rl
KiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBTX0RGR09w
ZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJ
bkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTUsNiArNTUsMTQgQEAgY2xhc3MgU3BlY3VsYXRlQm9vbGVhbk9wZXJhbmQ7CiAKIGVu
dW0gR2VuZXJhdGVkT3BlcmFuZFR5cGUgeyBHZW5lcmF0ZWRPcGVyYW5kVHlwZVVua25vd24sIEdl
bmVyYXRlZE9wZXJhbmRJbnRlZ2VyLCBHZW5lcmF0ZWRPcGVyYW5kRG91YmxlLCBHZW5lcmF0ZWRP
cGVyYW5kSlNWYWx1ZX07CiAKK2lubGluZSBHUFJSZWcgZXh0cmFjdFJlc3VsdChHUFJSZWcgcmVz
dWx0KSB7IHJldHVybiByZXN1bHQ7IH0KKyNpZiBVU0UoSlNWQUxVRTY0KQoraW5saW5lIEdQUlJl
ZyBleHRyYWN0UmVzdWx0KEpTVmFsdWVSZWdzIHJlc3VsdCkgeyByZXR1cm4gcmVzdWx0Lmdwcigp
OyB9CisjZWxzZQoraW5saW5lIEpTVmFsdWVSZWdzIGV4dHJhY3RSZXN1bHQoSlNWYWx1ZVJlZ3Mg
cmVzdWx0KSB7IHJldHVybiByZXN1bHQ7IH0KKyNlbmRpZgoraW5saW5lIE5vUmVzdWx0VGFnIGV4
dHJhY3RSZXN1bHQoTm9SZXN1bHRUYWcpIHsgcmV0dXJuIE5vUmVzdWx0OyB9CisKIC8vID09PSBT
cGVjdWxhdGl2ZUpJVCA9PT0KIC8vCiAvLyBUaGUgU3BlY3VsYXRpdmVKSVQgaXMgdXNlZCB0byBn
ZW5lcmF0ZSBhIGZhc3QsIGJ1dCBwb3RlbnRpYWxseQpAQCAtNzIzLDcgKzczMSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGNhY2hlZEdldEJ5SWQoQ29kZU9yaWdpbiwgR1BSUmVnIGJhc2VUYWdHUFJP
ck5vbmUsIEdQUlJlZyBiYXNlUGF5bG9hZEdQUiwgR1BSUmVnIHJlc3VsdFRhZ0dQUiwgR1BSUmVn
IHJlc3VsdFBheWxvYWRHUFIsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoVGFyZ2V0ID0gSklUQ29tcGlsZXI6Okp1bXAoKSwgU3BpbGxSZWdpc3Rl
cnNNb2RlID0gTmVlZFRvU3BpbGwpOwogICAgIHZvaWQgY2FjaGVkUHV0QnlJZChDb2RlT3JpZ2lu
LCBHUFJSZWcgYmFzZVBheWxvYWRHUFIsIEdQUlJlZyB2YWx1ZVRhZ0dQUiwgR1BSUmVnIHZhbHVl
UGF5bG9hZEdQUiwgRWRnZSB2YWx1ZVVzZSwgR1BSUmVnIHNjcmF0Y2hHUFIsIHVuc2lnbmVkIGlk
ZW50aWZpZXJOdW1iZXIsIFB1dEtpbmQsIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoVGFyZ2V0
ID0gSklUQ29tcGlsZXI6Okp1bXAoKSk7CiAjZW5kaWYKLQorICAgIAorICAgIHZvaWQgY29tcGls
ZUluKE5vZGUqKTsKKyAgICAKICAgICB2b2lkIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21w
YXJlTnVsbChFZGdlIG9wZXJhbmQsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOwogICAgIHZvaWQgbm9u
U3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoRWRnZSBvcGVyYW5kLCBOb2RlKiBicmFuY2hO
b2RlLCBib29sIGludmVydCA9IGZhbHNlKTsKICAgICBib29sIG5vblNwZWN1bGF0aXZlQ29tcGFy
ZU51bGwoTm9kZSosIEVkZ2Ugb3BlcmFuZCwgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CkBAIC0xMTcw
LDcgKzExODAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tUHRyKHBvaW50ZXIpKTsKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9u
X0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBTdHJpbmdJbXBsKiB1
aWQpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9F
Q0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgY29uc3QgU3RyaW5nSW1w
bCogdWlkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzEsIFRydXN0ZWRJbW1QdHIodWlkKSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKQEAgLTEyNzIsNiAr
MTI4MiwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNT
dGF0ZShhcmcxLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyKQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIuZ3ByKCkpOworICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRp
b24sIHJlc3VsdCk7CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihWX0RGR09wZXJhdGlvbl9FSlBQIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcy
LCB2b2lkKiBwb2ludGVyKQogICAgIHsKQEAgLTEzODksNyArMTQwNCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnLCBhcmcyKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwogICAgIH0KLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpf
REZHT3BlcmF0aW9uX0VDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHRUYWcsIEdQUlJlZyByZXN1
bHRQYXlsb2FkLCBHUFJSZWcgYXJnMSwgU3RyaW5nSW1wbCogdWlkKQorICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRUNJIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBjb25zdCBTdHJp
bmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgVHJ1c3RlZEltbVB0cih1aWQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2FkLCBy
ZXN1bHRUYWcpOwpAQCAtMTQ5OSw2ICsxNTE0LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsK
ICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHRQYXlsb2FkLCByZXN1bHRUYWcpOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfREZHT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIpCisgICAgeworICAg
ICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5wYXlsb2Fk
R1BSKCksIGFyZzIudGFnR1BSKCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNl
cHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdC5wYXlsb2FkR1BSKCksIHJlc3Vs
dC50YWdHUFIoKSk7CisgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Sl9ERkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJl
c3VsdFBheWxvYWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKICAgICB7CiAgICAgICAgIG1f
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKQEAgLTE2MjcsMTQg
KzE2NDcsMTYgQEAgcHVibGljOgogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxXaXRo
RXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5tb3ZlKEdQ
UkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgSklUQ29tcGls
ZXI6OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24s
IEdQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBwcmVwYXJlRm9yRXh0ZXJuYWxDYWxsKCk7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0
aW9uKTsKLSAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJu
IGNhbGw7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGwoY29uc3QgRnVu
Y3Rpb25QdHImIGZ1bmN0aW9uKQpAQCAtMTY1MiwxNSArMTY3NCwxOSBAQCBwdWJsaWM6CiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChj
b25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhm
dW5jdGlvbik7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBpbGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0LmxvYWREb3VibGUoSklUQ29t
cGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0
ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBs
KDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVzdWx0KTsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgYXBwZW5kQ2FsbFNldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQ
UlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gbV9q
aXQuYXBwZW5kQ2FsbChmdW5jdGlvbik7Ci0gICAgICAgIG1faml0LmFzc2VtYmxlcigpLmZzdHBs
KDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIG1faml0Lmxv
YWREb3VibGUoSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZXN1bHQpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpIHsKKyAgICAgICAgICAgIG1faml0LmFz
c2VtYmxlcigpLmZzdHBsKDAsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlciwgcmVzdWx0KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAj
ZWxpZiBDUFUoQVJNKQpAQCAtMTY2OCwyNiArMTY5NCwzMCBAQCBwdWJsaWM6CiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBG
dW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQUlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlv
bik7Ci0gICAgICAgIG1faml0Lm1vdmVEb3VibGUocmVzdWx0LCBGUFJJbmZvOjphcmd1bWVudEZQ
UjApOworICAgICAgICBpZiAocmVzdWx0ICE9IEludmFsaWRGUFJSZWcpCisgICAgICAgICAgICBt
X2ppdC5tb3ZlRG91YmxlKHJlc3VsdCwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRS
ZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsK
ICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rp
b24pOwotICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHJlc3VsdCwgRlBSSW5mbzo6YXJndW1lbnRG
UFIwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAg
bV9qaXQubW92ZURvdWJsZShyZXN1bHQsIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CiAgICAgICAg
IHJldHVybiBjYWxsOwogICAgIH0KICNlbHNlCi0gICAgICAgIEpJVENvbXBpbGVyOjpDYWxsIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1
bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQoY29uc3QgRnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBG
UFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbCA9IGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soZnVuY3Rpb24pOwotICAgICAgICBtX2ppdC5hc3Nl
bWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSMik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxpZEZQUlJlZykKKyAg
ICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAgICAgcmV0dXJuIGNhbGw7
CiAgICAgfQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGFwcGVuZENhbGxTZXRSZXN1bHQoY29uc3Qg
RnVuY3Rpb25QdHImIGZ1bmN0aW9uLCBGUFJSZWcgcmVzdWx0KQogICAgIHsKICAgICAgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbCA9IG1faml0LmFwcGVuZENhbGwoZnVuY3Rpb24pOwotICAgICAg
ICBtX2ppdC5hc3NlbWJsZXIoKS52bW92KHJlc3VsdCwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIs
IEdQUkluZm86OnJldHVyblZhbHVlR1BSMik7CisgICAgICAgIGlmIChyZXN1bHQgIT0gSW52YWxp
ZEZQUlJlZykKKyAgICAgICAgICAgIG1faml0LmFzc2VtYmxlcigpLnZtb3YocmVzdWx0LCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIyKTsKICAgICAgICAg
cmV0dXJuIGNhbGw7CiAgICAgfQogI2VuZGlmIC8vIENQVShBUk1fSEFSREZQKQpAQCAtMTY5NSwx
MyArMTcyNSwxNSBAQCBwdWJsaWM6CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgYXBwZW5kQ2FsbFdp
dGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChjb25zdCBGdW5jdGlvblB0ciYgZnVuY3Rpb24sIEZQ
UlJlZyByZXN1bHQpCiAgICAgewogICAgICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsID0gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhmdW5jdGlvbik7Ci0gICAgICAgIG1faml0Lm1vdmVE
b3VibGUoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gSW52YWxpZEZQUlJlZykKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5m
bzo6cmV0dXJuVmFsdWVGUFIsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBhcHBlbmRDYWxsU2V0UmVzdWx0KGNvbnN0IEZ1bmN0aW9u
UHRyJiBmdW5jdGlvbiwgRlBSUmVnIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGwgPSBtX2ppdC5hcHBlbmRDYWxsKGZ1bmN0aW9uKTsKLSAgICAgICAgbV9qaXQu
bW92ZURvdWJsZShGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKKyAgICAgICAgaWYg
KHJlc3VsdCAhPSBJbnZhbGlkRlBSUmVnKQorICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUiwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIGNhbGw7CiAg
ICAgfQogI2VuZGlmCkBAIC0yMzcxLDcgKzI0MDMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGZpbGwo
KTsKICAgICAgICAgQVNTRVJUKCFtX2lzRG91YmxlKTsKICAgICAgICAgcmV0dXJuIG1fcmVnaXN0
ZXIucGFpci50YWdHUFI7Ci0gICAgfQorICAgIH0gCiAKICAgICBHUFJSZWcgcGF5bG9hZEdQUigp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsMTAgKzIwNSwxOCBAQCB2b2lk
IEpTVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uCiAgICAgfSBlbHNlIGlmIChpc0Nl
bGwoKSkgewogICAgICAgICBpZiAoYXNDZWxsKCktPmluaGVyaXRzKCZKU1N0cmluZzo6c19pbmZv
KSkgewogICAgICAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGFz
Q2VsbCgpKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiU3RyaW5nOiAiKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiU3RyaW5nIik7CiAgICAgICAgICAgICBpZiAoc3RyaW5nLT5pc1JvcGUoKSkK
LSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIihyb3BlKSAiKTsKLSAgICAgICAgICAgIG91dC5w
cmludChzdHJpbmctPnRyeUdldFZhbHVlKCkpOworICAgICAgICAgICAgICAgIG91dC5wcmludCgi
IChyb3BlKSIpOworICAgICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCogaW1wbCA9IHN0cmluZy0+
dHJ5R2V0VmFsdWVJbXBsKCk7CisgICAgICAgICAgICBpZiAoaW1wbCkgeworICAgICAgICAgICAg
ICAgIGlmIChpbXBsLT5pc0F0b21pYygpKQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IiAoYXRvbWljKSIpOworICAgICAgICAgICAgICAgIGlmIChpbXBsLT5pc0lkZW50aWZpZXIoKSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKGlkZW50aWZpZXIpIik7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAodW5yZXNvbHZlZCkiKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiOiAiLCBpbXBsKTsKICAgICAgICAgfSBlbHNlIGlmIChh
c0NlbGwoKS0+aW5oZXJpdHMoJlN0cnVjdHVyZTo6c19pbmZvKSkgewogICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0Nhc3Q8U3RydWN0dXJlKj4oYXNDZWxsKCkpOwogICAgICAg
ICAgICAgb3V0LnByaW50KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
dHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0
cmluZy5oCShyZXZpc2lvbiAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZShFeGVjU3RhdGUqKSBjb25zdDsK
ICAgICAgICAgY29uc3QgU3RyaW5nJiB0cnlHZXRWYWx1ZSgpIGNvbnN0OworICAgICAgICBjb25z
dCBTdHJpbmdJbXBsKiB0cnlHZXRWYWx1ZUltcGwoKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgICAgICBKU1ZhbHVlIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwpAQCAtMzc4LDYg
KzM3OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAg
fQogCisgICAgaW5saW5lIGNvbnN0IFN0cmluZ0ltcGwqIEpTU3RyaW5nOjp0cnlHZXRWYWx1ZUlt
cGwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUuaW1wbCgpOworICAgIH0K
KwogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lv
biAxNTE0NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIxMyw3ICsyMTMsNyBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6
ZVByb3RvdHlwZUNoYWluRm9yCiAgICAgSlNDZWxsKiBjZWxsID0gYmFzZS5hc0NlbGwoKTsKICAg
ICBzaXplX3QgY291bnQgPSAwOwogICAgICAgICAKLSAgICB3aGlsZSAoc2xvdEJhc2UgIT0gY2Vs
bCkgeworICAgIHdoaWxlICghc2xvdEJhc2UgfHwgc2xvdEJhc2UgIT0gY2VsbCkgewogICAgICAg
ICBpZiAoY2VsbC0+aXNQcm94eSgpKQogICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQcm90b3R5
cGVDaGFpbjsKICAgICAgICAgICAgIApAQCAtMjI1LDggKzIyNSwxMSBAQCBpbmxpbmUgc2l6ZV90
IG5vcm1hbGl6ZVByb3RvdHlwZUNoYWluRm9yCiAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmaW5k
IHNsb3RCYXNlIGluIGJhc2UncyBwcm90b3R5cGUgY2hhaW4sIHRoZW4gYmFzZQogICAgICAgICAv
LyBtdXN0IGJlIGEgcHJveHkgZm9yIGFub3RoZXIgb2JqZWN0LgogCi0gICAgICAgIGlmICh2Lmlz
TnVsbCgpKQorICAgICAgICBpZiAodi5pc051bGwoKSkgeworICAgICAgICAgICAgaWYgKCFzbG90
QmFzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7CiAgICAgICAgICAgICByZXR1cm4g
SW52YWxpZFByb3RvdHlwZUNoYWluOworICAgICAgICB9CiAKICAgICAgICAgY2VsbCA9IHYuYXND
ZWxsKCk7CiAKQEAgLTI0MSw3ICsyNDQsNiBAQCBpbmxpbmUgc2l6ZV90IG5vcm1hbGl6ZVByb3Rv
dHlwZUNoYWluRm9yCiAgICAgICAgICsrY291bnQ7CiAgICAgfQogICAgICAgICAKLSAgICBBU1NF
UlQoY291bnQpOwogICAgIHJldHVybiBjb3VudDsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MTQ3
MikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTMtMDYtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHN1cHBvcnQgb3BfaW4gYW5kIGl0IHNob3VsZCB1c2Ug
cGF0Y2hpbmcgdG8gbWFrZSBpdCBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTczODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIE5vdyBpZiB5b3UgcGFzcyBhIG51bGwgU3RyaW5nSW1w
bCogdGhlbiBzb21ldGhpbmcgd2lsbCBzdGlsbCBnZXQgcHJpbnRlZCBpbnN0ZWFkCisgICAgICAg
IG9mIGNyYXNoaW5nLiBJIGZpZ3VyZSB0aGF0IHRoaXMgaXMgYnJvYWRseSB1c2VmdWwgZm9yIGRl
YnVnIGNvZGUsIGFuZCBJIG1ha2UgdXNlCisgICAgICAgIG9mIGl0IGluIHRoZSBKU0MgcG9ydGlv
biBvZiB0aGlzIHBhdGNoLgorCisgICAgICAgICogd3RmL1ByaW50U3RyZWFtLmNwcDoKKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisKIDIwMTMtMDYtMDkgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBmaXggYnVpbGQuIE9uIHNvbWUg
Y29tcGlsZXJzIHRoZSBhdXRvbWF0aWMgY29lcmNpb24gZnJvbSBXVEY6OlN0cmluZyB0byBOU1N0
cmluZyoKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9QcmludFN0cmVhbS5jcHAJKHJldmlzaW9uIDE1MTQ0MykKKysrIFNv
dXJjZS9XVEYvd3RmL1ByaW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQs
OCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgY29uCiAKIHZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcpCiB7
CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIG91dC5wcmludCgiKG51bGwgU3RyaW5nSW1wbCop
Iik7CiAgICAgb3V0LnByaW50KHN0cmluZy0+dXRmOCgpKTsKIH0KIApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTUxNDgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzMgQEAKKzIwMTMtMDYtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHN1cHBvcnQgb3BfaW4gYW5kIGl0IHNo
b3VsZCB1c2UgcGF0Y2hpbmcgdG8gbWFrZSBpdCBmYXN0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTczODUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRlc3QgY292ZXJhZ2UgZm9yIG9wX2lu
IHBlcmZvcm1hbmNlLgorCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2luLWZvdXItY2FzZXMt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvaW4tZm91ci1j
YXNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvaW4tb25lLWNhc2Ut
ZmFsc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3MvaW4t
b25lLWNhc2UtZmFsc2UuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL2lu
LW9uZS1jYXNlLXRydWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jl
Z3Jlc3MvaW4tb25lLWNhc2UtdHJ1ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jl
Z3Jlc3MvaW4tdHdvLWNhc2VzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9q
cy9yZWdyZXNzL2luLXR3by1jYXNlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luLWZvdXItY2FzZXMuanM6IEFkZGVkLgorICAgICAgICAoZm9v
KToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbi1vbmUtY2FzZS1mYWxzZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luLW9uZS1jYXNl
LXRydWUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAg
ICogZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbi10d28tY2FzZXMuanM6IEFkZGVkLgor
ICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTMtMDYtMDkgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSB0cnVuayByMTQ2NjUzLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLWZvdXItY2FzZXMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9pbi1mb3VyLWNhc2Vz
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9pbi1mb3VyLWNhc2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL2luLWZvdXItY2FzZXMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9pbi1mb3VyLWNhc2VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL2luLWZvdXItY2FzZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvcmVncmVzcy9pbi1mb3VyLWNhc2VzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luLWZvdXItY2Fz
ZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdy
ZXNzL2luLW9uZS1jYXNlLWZhbHNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvaW4tb25lLWNhc2UtZmFsc2UtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLW9uZS1jYXNlLWZhbHNl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lu
LW9uZS1jYXNlLWZhbHNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvaW4tb25lLWNh
c2UtZmFsc2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
aW4tb25lLWNhc2UtZmFsc2UuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9pbi1vbmUtY2FzZS1mYWxzZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbi1vbmUtY2Fz
ZS1mYWxzZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pz
L3JlZ3Jlc3MvaW4tb25lLWNhc2UtdHJ1ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLW9uZS1jYXNlLXRydWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLW9uZS1jYXNlLXRy
dWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mv
aW4tb25lLWNhc2UtdHJ1ZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLW9uZS1j
YXNlLXRydWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
aW4tb25lLWNhc2UtdHJ1ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZWdyZXNzL2luLW9uZS1jYXNlLXRydWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW4tb25lLWNhc2Ut
dHJ1ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jl
Z3Jlc3MvaW4tdHdvLWNhc2VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL3JlZ3Jlc3MvaW4tdHdvLWNhc2VzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9pbi10d28tY2FzZXMtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW4tdHdvLWNhc2VzCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3MvaW4tdHdvLWNhc2VzLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLXR3by1jYXNlcy5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL2luLXR3by1jYXNlcy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9pbi10d28tY2FzZXMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbi1mb3VyLWNhc2VzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
aW4tZm91ci1jYXNlcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvaW4tZm91ci1jYXNlcy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyMSBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgcmVzdWx0IDw8PSAxOwor
ICAgICAgICByZXN1bHQgXj0gImZvbyIgaW4gYVtpXTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHZhciBhcnJheSA9IFt7Zm9vOjQyfSwge2Jh
cjo0Mn0sIHtmdXp6OjQxLCBmb286NDN9LCB7YmF6OiA0N31dOworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAgICAgICByZXN1bHQg
Kz0gZm9vKGFycmF5KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gYmFy
KCk7CitpZiAocmVzdWx0ICE9IDEwMDAwMDAwKQorICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2luLW9uZS1jYXNlLWZhbHNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvaW4tb25lLWNhc2UtZmFsc2UuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luLW9uZS1jYXNlLWZh
bHNlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACitmdW5jdGlvbiBmb28oYSkgewor
ICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7ICsr
aSkgeworICAgICAgICByZXN1bHQgPDw9IDE7CisgICAgICAgIHJlc3VsdCBePSAiZm9vIiBpbiBh
W2ldOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlvbiBiYXIoKSB7Cisg
ICAgdmFyIGFycmF5ID0gW3tiYXI6NDJ9LCB7YmFyOjQyfV07CisgICAgdmFyIHJlc3VsdCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgICAgIHJlc3VsdCAr
PSBmb28oYXJyYXkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBiYXIo
KTsKK2lmIChyZXN1bHQgIT0gMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbi1vbmUt
Y2FzZS10cnVlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvaW4tb25lLWNhc2UtdHJ1ZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW4tb25lLWNhc2UtdHJ1ZS5qcwkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgcmVzdWx0IDw8PSAxOworICAgICAgICByZXN1bHQgXj0gImZvbyIgaW4gYVtpXTsKKyAgICB9
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHZhciBhcnJh
eSA9IFt7Zm9vOjQyfSwge2Zvbzo0Mn1dOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gZm9vKGFycmF5
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVzdWx0ID0gYmFyKCk7CitpZiAocmVz
dWx0ICE9IDMwMDAwMDApCisgICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW4tdHdvLWNhc2Vz
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvaW4tdHdvLWNhc2VzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9pbi10d28tY2FzZXMuanMJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjEgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHJlc3VsdCA8PD0gMTsK
KyAgICAgICAgcmVzdWx0IF49ICJmb28iIGluIGFbaV07CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICB2YXIgYXJyYXkgPSBbe2Zvbzo0Mn0sIHti
YXI6NDJ9XTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IGZvbyhhcnJheSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSAyMDAwMDAwKQor
ICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCg==
</data>
<flag name="review"
          id="225840"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>