<?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>183863</bug_id>
          
          <creation_ts>2018-03-21 12:20:56 -0700</creation_ts>
          <short_desc>ScopedArguments should do poisoning and index masking</short_desc>
          <delta_ts>2018-03-21 19:17:19 -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>WebKit 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>InRadar</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>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1408122</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 12:20:56 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408123</commentid>
    <comment_count>1</comment_count>
      <attachid>336220</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 12:23:23 -0700</bug_when>
    <thetext>Created attachment 336220
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408169</commentid>
    <comment_count>2</comment_count>
      <attachid>336234</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 14:21:54 -0700</bug_when>
    <thetext>Created attachment 336234
it might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408171</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 14:24:01 -0700</bug_when>
    <thetext>Attachment 336234 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ScopedArguments.cpp:151:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408189</commentid>
    <comment_count>4</comment_count>
      <attachid>336238</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 15:00:50 -0700</bug_when>
    <thetext>Created attachment 336238
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408191</commentid>
    <comment_count>5</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 15:04:52 -0700</bug_when>
    <thetext>Attachment 336238 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ScopedArguments.cpp:151:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408200</commentid>
    <comment_count>6</comment_count>
      <attachid>336240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 15:29:06 -0700</bug_when>
    <thetext>Created attachment 336240
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408201</commentid>
    <comment_count>7</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 15:31:49 -0700</bug_when>
    <thetext>Attachment 336240 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ScopedArguments.cpp:151:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408202</commentid>
    <comment_count>8</comment_count>
      <attachid>336234</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-21 15:32:04 -0700</bug_when>
    <thetext>Comment on attachment 336234
it might be done

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

r=me with issues addressed.

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:407
&gt; +        jit.loadPtr(
&gt; +            CCallHelpers::Address(baseGPR, DirectArguments::offsetOfStorage()),

Shouldn&apos;t this be ScopedArguments::offsetOfStorage()?

&gt; Source/JavaScriptCore/runtime/ScopedArguments.h:184
&gt; +        static_assert(sizeof(StorageHeader) &lt;= sizeof(WriteBarrier&lt;Unknown&gt;), &quot;StorageHeader needs to be no bigger than a JSValue&quot;);
&gt; +        return *bitwise_cast&lt;StorageHeader*&gt;(storage - 1);

You could have introduced a static method:
    static size_t storageHeaderSizeInJSValueCount() { return WTF::roundUpToMultipleOf&lt;sizeof(WriteBarrier&lt;Unknown&gt;)&gt;(sizeof(StorageHeader)) / sizeof(WriteBarrier&lt;Unknown&gt;); }

... and use that instead assuming the StorageHeader takes 1 JSValue.  With that you can get rid of this assertion and make it such that we can add new fields to StorageHeader without breaking any code.  That said, we can always defer this till we need it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408203</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 15:34:55 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Comment on attachment 336234 [details]
&gt; it might be done
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336234&amp;action=review
&gt; 
&gt; r=me with issues addressed.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:407
&gt; &gt; +        jit.loadPtr(
&gt; &gt; +            CCallHelpers::Address(baseGPR, DirectArguments::offsetOfStorage()),
&gt; 
&gt; Shouldn&apos;t this be ScopedArguments::offsetOfStorage()?
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ScopedArguments.h:184
&gt; &gt; +        static_assert(sizeof(StorageHeader) &lt;= sizeof(WriteBarrier&lt;Unknown&gt;), &quot;StorageHeader needs to be no bigger than a JSValue&quot;);
&gt; &gt; +        return *bitwise_cast&lt;StorageHeader*&gt;(storage - 1);
&gt; 
&gt; You could have introduced a static method:
&gt;     static size_t storageHeaderSizeInJSValueCount() { return
&gt; WTF::
&gt; roundUpToMultipleOf&lt;sizeof(WriteBarrier&lt;Unknown&gt;)&gt;(sizeof(StorageHeader)) /
&gt; sizeof(WriteBarrier&lt;Unknown&gt;); }
&gt; 
&gt; ... and use that instead assuming the StorageHeader takes 1 JSValue.  With
&gt; that you can get rid of this assertion and make it such that we can add new
&gt; fields to StorageHeader without breaking any code.  That said, we can always
&gt; defer this till we need it in the future.

Lots of code assumes that StorageHeader is smaller than JSValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408204</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 15:35:06 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; Comment on attachment 336234 [details]
&gt; it might be done
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=336234&amp;action=review
&gt; 
&gt; r=me with issues addressed.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:407
&gt; &gt; +        jit.loadPtr(
&gt; &gt; +            CCallHelpers::Address(baseGPR, DirectArguments::offsetOfStorage()),
&gt; 
&gt; Shouldn&apos;t this be ScopedArguments::offsetOfStorage()?

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/ScopedArguments.h:184
&gt; &gt; +        static_assert(sizeof(StorageHeader) &lt;= sizeof(WriteBarrier&lt;Unknown&gt;), &quot;StorageHeader needs to be no bigger than a JSValue&quot;);
&gt; &gt; +        return *bitwise_cast&lt;StorageHeader*&gt;(storage - 1);
&gt; 
&gt; You could have introduced a static method:
&gt;     static size_t storageHeaderSizeInJSValueCount() { return
&gt; WTF::
&gt; roundUpToMultipleOf&lt;sizeof(WriteBarrier&lt;Unknown&gt;)&gt;(sizeof(StorageHeader)) /
&gt; sizeof(WriteBarrier&lt;Unknown&gt;); }
&gt; 
&gt; ... and use that instead assuming the StorageHeader takes 1 JSValue.  With
&gt; that you can get rid of this assertion and make it such that we can add new
&gt; fields to StorageHeader without breaking any code.  That said, we can always
&gt; defer this till we need it in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408210</commentid>
    <comment_count>11</comment_count>
      <attachid>336242</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 15:41:51 -0700</bug_when>
    <thetext>Created attachment 336242
patch for landing

Addressed Mark&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408212</commentid>
    <comment_count>12</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 15:51:53 -0700</bug_when>
    <thetext>Attachment 336242 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ScopedArguments.cpp:151:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408236</commentid>
    <comment_count>13</comment_count>
      <attachid>336242</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 17:09:46 -0700</bug_when>
    <thetext>Comment on attachment 336242
patch for landing

Attachment 336242 did not pass jsc-ews (mac):
Output: http://webkit-queues.webkit.org/results/7057246

New failing tests:
microbenchmarks/scoped-arguments-possibly-overridden-length.js.dfg-eager
microbenchmarks/scoped-arguments-possibly-overridden-length.js.dfg-maximal-flush-validate-no-cjit
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-eager-no-cjit
microbenchmarks/scoped-arguments-possibly-overridden-length.js.no-cjit-validate-phases
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-eager
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-no-cjit-small-pool
microbenchmarks/scoped-arguments-possibly-overridden-length.js.dfg-eager-no-cjit-validate
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-eager-no-cjit-b3o1
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-no-cjit-no-put-stack-validate
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-no-cjit-b3o1
microbenchmarks/scoped-arguments-possibly-overridden-length.js.no-ftl
microbenchmarks/scoped-arguments-possibly-overridden-length.js.no-llint
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-no-cjit-no-inline-validate
microbenchmarks/scoped-arguments-possibly-overridden-length.js.default
microbenchmarks/scoped-arguments-possibly-overridden-length.js.ftl-no-cjit-validate-sampling-profiler
microbenchmarks/scoped-arguments-possibly-overridden-length.js.no-cjit-collect-continuously</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408259</commentid>
    <comment_count>14</comment_count>
      <attachid>336254</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 18:38:43 -0700</bug_when>
    <thetext>Created attachment 336254
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408261</commentid>
    <comment_count>15</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-03-21 18:40:50 -0700</bug_when>
    <thetext>Attachment 336254 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ScopedArguments.cpp:151:  Please replace ASSERT_WITH_SECURITY_IMPLICATION() with RELEASE_ASSERT_WITH_SECURITY_IMPLICATION().  [security/assertion] [5]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408277</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-03-21 19:16:04 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/229842/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1408278</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-21 19:17:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/38734279&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336220</attachid>
            <date>2018-03-21 12:23:23 -0700</date>
            <delta_ts>2018-03-21 14:21:54 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23521</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI5ODE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBA
CisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGluZGV4IG1hc2tpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4Mzg2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBvdXRsaW5lcyB0aGUgU2NvcGVkQXJndW1lbnRzIG92ZXJmbG93IHN0b3JhZ2UgYW5kIGFkZHMg
cG9pc29uaW5nLgorCisgICAgICAgICogYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHA6CisgICAgICAg
IChKU0M6OkFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblNjb3BlZEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRBcnJheUxlbmd0aCk6CisgICAgICAgICogZnRsL0ZUTEFi
c3RyYWN0SGVhcFJlcG9zaXRvcnkuaDoKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNw
cDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdldEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUdl
dEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZXRCeVZhbCk6CisgICAgICAgICogcnVudGlt
ZS9KU0NQb2lzb24uaDoKKyAgICAgICAgKiBydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHA6Cisg
ICAgICAgIChKU0M6OlNjb3BlZEFyZ3VtZW50czo6U2NvcGVkQXJndW1lbnRzKToKKyAgICAgICAg
KEpTQzo6U2NvcGVkQXJndW1lbnRzOjpjcmVhdGVVbmluaXRpYWxpemVkKToKKyAgICAgICAgKEpT
Qzo6U2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5oOgorCiAyMDE4LTAzLTIxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UgQ29kZUJsb2NrOjppbnN0cnVjdGlvbnMoKVtdIGFuZCBDb2Rl
QmxvY2s6OmJ5dGVjb2RlT2Zmc2V0KCkgaW5zdGVhZCBvZiBkb2luZyBvd24gcG9pbnRlciBtYXRo
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNlLmNw
cAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Fj
Y2Vzc0Nhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDMsMTIgKzQwMywxNiBAQCB2b2lkIEFj
Y2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBl
KSkpOwogCisgICAgICAgIGppdC5sb2FkUHRyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKGJhc2VHUFIsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpLAorICAg
ICAgICAgICAgdmFsdWVSZWdzLnBheWxvYWRHUFIoKSk7CisgICAgICAgIGppdC54b3JQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKICAgICAgICAgZmFsbFRocm91Z2guYXBwZW5kKAogICAg
ICAgICAgICAgaml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
Tm9uWmVybywKLSAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSkpOwogICAgICAg
ICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIs
IFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mVG90YWxMZW5ndGgoKSksCiAgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5bG9h
ZEdQUigpKTsKICAgICAgICAgaml0LmJveEludDMyKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHZh
bHVlUmVncyk7CiAgICAgICAgIHN0YXRlLnN1Y2NlZWQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMjk4MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjQ4OCw2ICs2NDg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TYwogI2VuZGlmCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBpbmRl
eE1hc2sodGhpcyk7CiAgICAgCiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwpAQCAtNjUwMCwxOSArNjUwMSwy
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjCiAjZW5kaWYKICAg
ICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gc2NyYXRjaDIuZ3ByKCk7CisgICAgR1BSUmVnIGluZGV4TWFza1JlZyA9IGluZGV4TWFz
ay5ncHIoKTsKICAgICAKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsK
ICAgICAKICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShtX2dyYXBoLnZh
ckFyZ0NoaWxkKG5vZGUsIDApKSkpOwogICAgIAorICAgIG1faml0LmxvYWRQdHIoCisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZTdG9yYWdlKCkpLCByZXN1bHRSZWcpOworICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCByZXN1bHRSZWcpOworICAgIAorICAgIG1f
aml0LmxvYWQzMigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2UoKSksCisgICAgICAg
IHNjcmF0Y2hSZWcpOworICAgIAogICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgIEV4b3Rp
Y09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0ciwKLSAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0
eVJlZywKLSAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSkpOworICAgICAgICBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaFJl
ZykpOworICAgIAorICAgIG1faml0LmVtaXRQcmVwYXJlUHJlY2lzZUluZGV4TWFzazMyKHByb3Bl
cnR5UmVnLCBzY3JhdGNoUmVnLCBpbmRleE1hc2tSZWcpOwogICAgIAogICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZz
ZXRPZlRhYmxlKCkpLCBzY3JhdGNoUmVnKTsKKyAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbVB0
cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgbV9qaXQu
bG9hZDMyKAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoUmVnLCBTY29w
ZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSksIHNjcmF0Y2gyUmVnKTsKICAgICAK
QEAgLTY1NDcsMTMgKzY1NTgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fz
c2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZs
b3dTdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3JhdGNoMlJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdzKTsKICAgICBz
cGVjdWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0
ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywgcmVzdWx0UmVn
KTsKKyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCkBAIC02
NjUwLDggKzY2NjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2Uo
KSksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAgICAgIFRydXN0
ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAg
ICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5
KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZM
ZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY3MCwxNCArNjY4
MSwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAg
IAogICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVh
ZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9m
U3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1Q
dHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwg
SlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAg
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92
ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3NJblN0
b3JhZ2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZUb3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3Ro
SW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50MzJSZXN1bHQo
cmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNp
b24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBAIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2VuX1BhY2tldF9z
Y29wZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSBcCiAg
ICAgbWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1RfT0ZGU0VUT0Yo
U2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8oU2hhZG93Q2hp
Y2tlbl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46
OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3Zl
cnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSBc
CisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGluZ3MsIFNjb3Bl
ZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBcCisgICAgbWFj
cm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFyZ3VtZW50czo6
b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1l
bnRzX3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpIFwKICAgICBt
YWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29w
ZSgpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0
aCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAgICBtYWNybyhT
Y29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZz
ZXRPZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3Ro
LCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKFN0
cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0xMzgsNyArMTM5
LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTTGV4aWNh
bEVudmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFy
aWFibGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXpl
b2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmli
ZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8
SlNTdHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2Us
IFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCAw
LCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVy
X2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0
ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6
ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgyLDEwICszNjgy
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVk
QXJndW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQuYml0WG9y
KAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihT
Y29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoCiAg
ICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAg
ICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVu
dHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwotICAgICAgICAg
ICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNj
b3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFpl
cm8zMihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50
c19TdG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfU3RvcmFn
ZV90b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1
ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwogICAgICAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUs
IDEpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5s
b2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOworICAgICAgICAg
ICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdEludFB0cihTY29w
ZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKICAgICAgICAgICAgICAgICBFeG90aWNPYmplY3RNb2RlLCBub1ZhbHVlKCksIG51
bGxwdHIsCiAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAogICAgICAgICAgICAg
ICAgICAgICBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDMyTm9uTmVnYXRp
dmUoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdG90YWxMZW5ndGgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKHN0b3JhZ2UsIG1faGVhcHMuU2Nv
cGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgpKSk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRB
cmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAgdGFibGUgPSBtX291dC5iaXRYb3IodGFibGUs
IG1fb3V0LmNvbnN0SW50UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRh
YmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbWVkQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBA
IC0zOTIwLDcgKzM5MjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
b3ZlcmZsb3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBh
ZGRyZXNzID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVk
QXJndW1lbnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBz
LlNjb3BlZEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAg
ICAgbV9vdXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAg
ICAgICAgICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAg
ICAgICAgICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRy
LCBtX291dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzYsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
Ci0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92
ZXJmbG93UmVzdWx0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAg
ICAgICByZXN1bHQgPSBwcmVjaXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5n
dGgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDIy
OTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDUxLDkgKzE0NTEsMTIgQEAgSklUOjpKdW1wTGlzdCBKSVQ6
OmVtaXRTY29wZWRBcmd1bWVudHNHZQogCiAgICAgbG9hZDgoQWRkcmVzcyhiYXNlLCBKU0NlbGw6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgc2NyYXRjaCk7CiAgICAgYmFkVHlwZSA9IHBhdGNoYWJs
ZUJyYW5jaDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoU2NvcGVkQXJndW1lbnRz
VHlwZSkpOwotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9w
ZXJ0eSwgQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGgo
KSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOm9mZnNldE9m
U3RvcmFnZSgpKSwgcmVzdWx0LnBheWxvYWRHUFIoKSk7CisgICAgeG9yUHRyKFRydXN0ZWRJbW1Q
dHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdC5wYXlsb2FkR1BSKCkpOwor
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoQWJvdmVPckVxdWFsLCBwcm9wZXJ0eSwgQWRk
cmVzcyhyZXN1bHQucGF5bG9hZEdQUigpLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxM
ZW5ndGhJblN0b3JhZ2UoKSkpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2Nv
cGVkQXJndW1lbnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1
c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAg
bG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVu
Z3RoKCkpLCBzY3JhdGNoMik7CiAgICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92
ZU9yRXF1YWwsIHByb3BlcnR5LCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2Us
IFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOwpAQCAtMTQ2NSwx
MCArMTQ2OCwxNyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50c0dlCiAg
ICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVydHksIHNjcmF0Y2gy
KTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBz
Y3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxvd1N0b3JhZ2VPZmZz
ZXQoKSksIHJlc3VsdCk7CisgICAgbW92ZShyZXN1bHQucGF5bG9hZEdQUigpLCBzY3JhdGNoKTsK
KyAgICBsb2FkVmFsdWUoQmFzZUluZGV4KHNjcmF0Y2gsIHNjcmF0Y2gyLCBUaW1lc0VpZ2h0KSwg
cmVzdWx0KTsKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmRW1wdHkocmVzdWx0KSk7CiAg
ICAgZG9uZS5saW5rKHRoaXMpOwogICAgIAorICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29w
ZWRBcmd1bWVudHM6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1
c3RlZEltbVB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CisgICAg
bG9hZDMyKEFkZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVu
Z3RoSW5TdG9yYWdlKCkpLCBzY3JhdGNoKTsKKyAgICBlbWl0UHJlcGFyZVByZWNpc2VJbmRleE1h
c2szMihwcm9wZXJ0eSwgc2NyYXRjaCwgc2NyYXRjaDIpOworICAgIGFuZFB0cihzY3JhdGNoMiwg
cmVzdWx0LnBheWxvYWRHUFIoKSk7CisgICAgCiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9pc29uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDUG9pc29uLmgJKHJldmlzaW9u
IDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHYoSlNX
ZWJBc3NlbWJseU1vZHVsZSkgXAogICAgIHYoSlNXZWJBc3NlbWJseVRhYmxlKSBcCiAgICAgdihO
YXRpdmVDb2RlKSBcCisgICAgdihTY29wZWRBcmd1bWVudHMpIFwKICAgICB2KFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZSkgXAogICAgIHYoVW5saW5rZWRTb3VyY2VDb2RlKSBcCiAgICAgdihXZWJB
c3NlbWJseUZ1bmN0aW9uQmFzZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2NvcGVkQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTM1LDExICszNSwxMSBAQCBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElC
TEUoCiAKIGNvbnN0IENsYXNzSW5mbyBTY29wZWRBcmd1bWVudHM6OnNfaW5mbyA9IHsgIkFyZ3Vt
ZW50cyIsICZCYXNlOjpzX2luZm8sIG51bGxwdHIsIG51bGxwdHIsIENSRUFURV9NRVRIT0RfVEFC
TEUoU2NvcGVkQXJndW1lbnRzKSB9OwogCi1TY29wZWRBcmd1bWVudHM6OlNjb3BlZEFyZ3VtZW50
cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25lZCB0b3RhbExlbmd0aCkKK1Nj
b3BlZEFyZ3VtZW50czo6U2NvcGVkQXJndW1lbnRzKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSkKICAgICA6IEdlbmVyaWNBcmd1bWVu
dHModm0sIHN0cnVjdHVyZSkKLSAgICAsIG1fb3ZlcnJvZGVUaGluZ3MoZmFsc2UpCi0gICAgLCBt
X3RvdGFsTGVuZ3RoKHRvdGFsTGVuZ3RoKQorICAgICwgbV9zdG9yYWdlKHN0b3JhZ2UpCiB7Cisg
ICAgQVNTRVJUKCFzdG9yYWdlLT5vdmVycm9kZVRoaW5ncyk7CiB9CiAKIHZvaWQgU2NvcGVkQXJn
dW1lbnRzOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVk
QXJndW1lbnRzVGFibGUqIHRhYmxlLCBKU0xleGljYWxFbnZpcm9ubWVudCogc2NvcGUpCkBAIC01
NywxMCArNTcsMTcgQEAgU2NvcGVkQXJndW1lbnRzKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZQog
ICAgICAgICBvdmVyZmxvd0xlbmd0aCA9IHRvdGFsTGVuZ3RoIC0gdGFibGUtPmxlbmd0aCgpOwog
ICAgIGVsc2UKICAgICAgICAgb3ZlcmZsb3dMZW5ndGggPSAwOworICAgIAorICAgIHZvaWQqIHJh
d1N0b3JhZ2VQdHIgPSB2bS5qc1ZhbHVlR2lnYWNhZ2VBdXhpbGlhcnlTcGFjZS5hbGxvY2F0ZU5v
blZpcnR1YWwoCisgICAgICAgIHZtLCBzdG9yYWdlU2l6ZShvdmVyZmxvd0xlbmd0aCksIG51bGxw
dHIsIEFsbG9jYXRpb25GYWlsdXJlTW9kZTo6QXNzZXJ0KTsKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UgPSBzdGF0aWNfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPihyYXdT
dG9yYWdlUHRyKSArIDE7CisgICAgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5vdmVycm9kZVRoaW5n
cyA9IGZhbHNlOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGggPSB0b3Rh
bExlbmd0aDsKKyAgICAKICAgICBTY29wZWRBcmd1bWVudHMqIHJlc3VsdCA9IG5ldyAoCiAgICAg
ICAgIE5vdE51bGwsCiAgICAgICAgIGFsbG9jYXRlQ2VsbDxTY29wZWRBcmd1bWVudHM+KHZtLmhl
YXAsIGFsbG9jYXRpb25TaXplKG92ZXJmbG93TGVuZ3RoKSkpCi0gICAgICAgIFNjb3BlZEFyZ3Vt
ZW50cyh2bSwgc3RydWN0dXJlLCB0b3RhbExlbmd0aCk7CisgICAgICAgIFNjb3BlZEFyZ3VtZW50
cyh2bSwgc3RydWN0dXJlLCBzdG9yYWdlKTsKICAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZt
LCBjYWxsZWUsIHRhYmxlLCBzY29wZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEwNyw2
ICsxMTQsOCBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV9zY29wZSk7CiAgICAgCisgICAgdmlzaXRvci5tYXJrQXV4aWxpYXJ5KCZ0
aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkpOworICAgIAogICAgIGlmICh0aGlzT2JqZWN0LT5t
X3RvdGFsTGVuZ3RoID4gdGhpc09iamVjdC0+bV90YWJsZS0+bGVuZ3RoKCkpIHsKICAgICAgICAg
dmlzaXRvci5hcHBlbmRWYWx1ZXMoCiAgICAgICAgICAgICB0aGlzT2JqZWN0LT5vdmVyZmxvd1N0
b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0aCAtIHRoaXNPYmplY3QtPm1fdGFibGUt
Pmxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nj
b3BlZEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDcgKzM4
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBsb29rdXBzLgogY2xhc3MgU2NvcGVkQXJndW1lbnRz
IGZpbmFsIDogcHVibGljIEdlbmVyaWNBcmd1bWVudHM8U2NvcGVkQXJndW1lbnRzPiB7CiBwcml2
YXRlOgotICAgIFNjb3BlZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIHVuc2lnbmVkIHRvdGFs
TGVuZ3RoKTsKKyAgICBTY29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qIHN0b3JhZ2UpOwogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0Z1
bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50c1RhYmxlKiwgSlNMZXhpY2FsRW52aXJvbm1l
bnQqKTsKIAogcHVibGljOgpAQCAtNjcsNyArNjcsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdWlu
dDMyX3QgaW50ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG90
YWxMZW5ndGg7CisgICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKCkudG90YWxMZW5ndGg7CiAg
ICAgfQogICAgIAogICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CkBA
IC04MCwxMiArODAsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVu
dCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKGkgPj0gbV90b3RhbExlbmd0
aCkKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9y
YWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5n
dGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVu
Z3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCiAg
ICAgICAgICAgICByZXR1cm4gISFtX3RhYmxlLT5nZXQoaSk7Ci0gICAgICAgIHJldHVybiAhIW92
ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAh
IXN0b3JhZ2VbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKICAgICB9CiAKICAgICBib29sIGlzTWFw
cGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAtOTYsMjAgKzk3LDI0IEBAIHB1
YmxpYzoKICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1
bWVudChpKSk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSA9IG92ZXJm
bG93U3RvcmFnZSgpOworICAgICAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IHN0b3JhZ2VIZWFk
ZXIoc3RvcmFnZSkudG90YWxMZW5ndGg7CiAgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0g
bV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgpOwot
ICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsK
KyAgICAgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIHRvdGFsTGVuZ3RoLCAm
bV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpKS0+Z2V0KCk7CisgICAgICAgIHJl
dHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIHRvdGFsTGVuZ3RoLCBzdG9yYWdlICsgKGkgLSBu
YW1lZExlbmd0aCkpLT5nZXQoKTsKICAgICB9CiAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShW
TSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gc3RvcmFnZUhlYWRlcihzdG9yYWdlKS50b3RhbExl
bmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsK
ICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKLSAgICAgICAgICAgIG1fc2NvcGUtPnZhcmlh
YmxlQXQobV90YWJsZS0+Z2V0KGkpKS5zZXQodm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKKyAg
ICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsICZtX3Njb3BlLT52
YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkpLT5zZXQodm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVk
TGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1h
c2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3JhZ2UgKyAoaSAtIG5hbWVkTGVuZ3RoKSktPnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAogICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYg
Y2FsbGVlKCkKQEAgLTE0MywzMiArMTQ4LDU1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUg
cHJvdG90eXBlKTsKICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVU
aGluZ3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJy
b2RlVGhpbmdzKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlN0b3JhZ2UoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU2NvcGVkQXJndWVtbnRzLCBtX3N0b3JhZ2UpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKFN0b3JhZ2VIZWFkZXIsIG92ZXJyb2RlVGhpbmdzKTsgfQorICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTdG9yYWdlSGVhZGVyLCB0b3RhbExlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mVGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1l
bnRzLCBtX3RhYmxlKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZSgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fc2NvcGUpOyB9CiAgICAg
Ci0gICAgc3RhdGljIHNpemVfdCBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKQorICAgIHN0YXRpYyBz
aXplX3QgYWxsb2NhdGlvblNpemUoc2l6ZV90IGlubGluZVNpemUpCiAgICAgewotICAgICAgICBy
ZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pPihzaXplb2YoU2NvcGVkQXJndW1lbnRzKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFp
bmxpbmVTaXplKTsKKyAgICAgICAgcmV0dXJuIHNpemVvZihTY29wZWRBcmd1bWVudHMpOwogICAg
IH0KICAgICAKLSAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90
PiBvdmVyZmxvd0FyZ3VtZW50c0xlbmd0aCkKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXpl
KENoZWNrZWQ8c2l6ZV90PiBjYXBhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3ZlcmZs
b3dTdG9yYWdlT2Zmc2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIG92ZXJm
bG93QXJndW1lbnRzTGVuZ3RoKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSAqIChjYXBhY2l0eSArIHN0YXRpY19jYXN0PHNpemVfdD4o
MSkpKS51bnNhZmVHZXQoKTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3Jh
Z2VIZWFkZXJTaXplKCkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0K
KyAgICAKIHByaXZhdGU6CisgICAgc3RydWN0IFN0b3JhZ2VIZWFkZXIgeworICAgICAgICB1bnNp
Z25lZCB0b3RhbExlbmd0aDsKKyAgICAgICAgYm9vbCBvdmVycm9kZVRoaW5nczsgLy8gVHJ1ZSBp
ZiBsZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGluIHRo
ZSBvYmplY3QuCisgICAgfTsKKyAgICAKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG92ZXJm
bG93U3RvcmFnZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdy
aXRlQmFycmllcjxVbmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvdmVyZmxv
d1N0b3JhZ2VPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0b3JhZ2UuZ2V0KCkudW5wb2lz
b25lZCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RvcmFnZUhlYWRlciYgc3RvcmFnZUhl
YWRlcihXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UpCisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihTdG9yYWdlSGVhZGVyKSA8PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVu
a25vd24+KSwgIlN0b3JhZ2VIZWFkZXIgbmVlZHMgdG8gYmUgbm8gYmlnZ2VyIHRoYW4gYSBKU1Zh
bHVlIik7CisgICAgICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFN0b3JhZ2VIZWFkZXIqPihzdG9y
YWdlIC0gMSk7CisgICAgfQorICAgIAorICAgIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VIZWFkZXIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VIZWFkZXIob3ZlcmZsb3dTdG9y
YWdlKCkpOwogICAgIH0KICAgICAKLSAgICBib29sIG1fb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUg
aWYgbGVuZ3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0
aGUgb2JqZWN0LgotICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2Yg
ZGVjbGFyZWQgcGx1cyBvdmVyZmxvdyBhcmd1bWVudHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTRnVu
Y3Rpb24+IG1fY2FsbGVlOwotICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4g
bV90YWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBQb2lzb25lZEJhcnJpZXIgPSBQ
b2lzb25lZFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNQb2lzb24sIFQ+OworICAgIAorICAg
IFBvaXNvbmVkQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKKyAgICBQb2lzb25lZEJhcnJp
ZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7CisgICAgUG9pc29uZWRCYXJyaWVyPEpT
TGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworICAgIAorICAgIEF1eGlsaWFyeUJhcnJpZXI8
UG9pc29uZWQ8U2NvcGVkQXJndW1lbnRzUG9pc29uLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qPj4g
bV9zdG9yYWdlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336234</attachid>
            <date>2018-03-21 14:21:54 -0700</date>
            <delta_ts>2018-03-21 15:41:51 -0700</delta_ts>
            <desc>it might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33606</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjk4MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGlu
ZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQWRkcyBhbm90aGVyIHN0cmVzcyB0ZXN0IG9mIHNjb3BlZCBhcmd1bWVudHMu
CisKKyAgICAgICAgKiBzdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisKIDIwMTgtMDMtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgV2UgbmVlZCB0byBkbyBwcm9wZXIgYm9va2tlZXBpbmcgb2YgZXhpdE9L
IHdoZW4gaW5zZXJ0aW5nIGNvbnN0YW50cyB3aGVuIHNpbmtpbmcgTmV3QXJyYXlCdWZmZXIKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3Njb3BlZC1hcmd1bWVudHMtdGVzdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLXRlc3QuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKQoreworICAgIChmdW5jdGlvbigpIHsg
cmV0dXJuIGE7IH0pKCk7CisgICAgcmV0dXJuIFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c107Cit9
CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHRbMF0gIT0gNDIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigicmVzdWx0WzBdIGlzIG5vdCA0MjogIiArIHJlc3VsdFswXSk7
CisgICAgaWYgKHJlc3VsdFsxXVswXSAhPSA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJy
ZXN1bHRbMV1bMF0gaXMgbm90IDQyOiAiICsgcmVzdWx0WzFdWzBdKTsKK30KKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTgtMDMt
MjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTY29wZWRBcmd1
bWVudHMgc2hvdWxkIGRvIHBvaXNvbmluZyBhbmQgaW5kZXggbWFza2luZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODYzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG91dGxpbmVz
IHRoZSBTY29wZWRBcmd1bWVudHMgb3ZlcmZsb3cgc3RvcmFnZSBhbmQgYWRkcyBwb2lzb25pbmcu
CisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU2NvcGVkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29w
ZWRBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpTY29wZWRB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmg6CisKIDIwMTgtMDMtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2RlQmxvY2s6Omluc3RydWN0aW9ucygpW10gYW5kIENvZGVCbG9jazo6Ynl0
ZWNvZGVPZmZzZXQoKSBpbnN0ZWFkIG9mIGRvaW5nIG93biBwb2ludGVyIG1hdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lv
biAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMywxMiArNDAzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7CiAKKyAg
ICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksCisgICAgICAgICAgICB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LnhvclB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBq
aXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkpKSk7CiAgICAgICAgIGppdC5sb2Fk
MzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJn
dW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFs
dWVSZWdzKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcxLDYgKzI3MSw4IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpP
dXRPZkJvdW5kcywgQXJyYXk6OkFzSXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2
KCkgJiYgaXMzMkJpdCgpICYmIGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAg
ICAgICByZXR1cm4gd2l0aFR5cGUodHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTgwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3Vt
ZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKIAotICAgIHJlc3VsdC0+Y2FsbGVl
KCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNh
bGxlZSk7CiAKICAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAg
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlRGlyCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVj
dEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICByZXN1
bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBjYWxsZWUpOworICAgIHJlc3VsdC0+c2V0Q2Fs
bGVlKHZtLCBjYWxsZWUpOwogICAgIAogICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMgPQogICAgICAg
ICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IDogMCkgKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDg4LDYgKzY0ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNj
CiAjZW5kaWYKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4TWFzayh0aGlzKTsKICAg
ICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CkBAIC02NTAwLDE5ICs2NTAxLDI5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2MKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBHUFJSZWcgaW5kZXhNYXNrUmVnID0gaW5kZXhNYXNrLmdwcigpOwogICAgIAog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VS
VChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpKSk7CiAgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJl
c3VsdFJlZyk7CisgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRz
UG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50czo6
b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7Cisg
ICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNW
YWx1ZVNvdXJjZSgpLCBudWxscHRyLAotICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZz
ZXRPZlRvdGFsTGVuZ3RoKCkpKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKSk7CisgICAgCisgICAg
bV9qaXQuZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hS
ZWcsIGluZGV4TWFza1JlZyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNj
cmF0Y2hSZWcpOworICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50
c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDJSZWcpOwogICAgIApAQCAtNjUyMCw2ICs2NTMx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwog
ICAgIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMlJlZyk7CisgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNj
cmF0Y2gyUmVnKTsKIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwKQEAgLTY1NDcsMTMgKzY1NTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50
czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3Jh
dGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdz
KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2Uo
KSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywg
cmVzdWx0UmVnKTsKKyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCkBAIC02NjUwLDggKzY2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY3
MCwxNCArNjY4MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVu
dHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7Cisg
ICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3NJblN0b3JhZ2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRv
dGFsTGVuZ3RoSW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2Vu
X1BhY2tldF9zY29wZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSBcCiAgICAgbWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8o
U2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRo
aW5ncygpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGlu
Z3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBc
CisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2Nv
cGVkQXJndW1lbnRzX3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkp
IFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZTY29wZSgpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRB
cmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190
b3RhbExlbmd0aCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhTY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfbGVuZ3RoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAg
IG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0x
MzgsNyArMTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3Jv
KEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRz
LCAwLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVT
dHJpbmdfZmliZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxv
d1N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9z
dG9yYWdlLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJy
aWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNy
byhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMx
NiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgy
LDEwICszNjgyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9v
dXQuYml0WG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hl
YXBzLlNjb3BlZEFyZ3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVj
dWxhdGUoCiAgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQz
Mihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50
MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfU3RvcmFnZV90b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
OwogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOwor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdElu
dFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSB0b3RhbExlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90
YWxMZW5ndGgpOwogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIEV4b3Rp
Y09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50
c190b3RhbExlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5k
ZXgsIHRvdGFsTGVuZ3RoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSB0YWJs
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOwor
ICAgICAgICAgICAgdGFibGUgPSBtX291dC5iaXRYb3IodGFibGUsIG1fb3V0LmNvbnN0SW50UHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5hbWVkQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0zOTAyLDYgKzM5MTAsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfc2NvcGUpOworICAgICAgICAgICAgc2NvcGUgPSBtX291dC5iaXRYb3Ioc2NvcGUsIG1fb3V0
LmNvbnN0SW50UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCkBAIC0zOTIw
LDcgKzM5MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZs
b3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRyZXNz
ID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAgICAgICAg
ICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzgsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93
UmVzdWx0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBwcmVjaXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5ndGgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKICAgICAg
ICAgICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUo
CiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFy
Z3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgICAgICByZXN1bHQt
PnNldENhbGxlZSh2bSwgY2FsbGVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1h
dGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
ICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpW2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigp
LmtpbmQoKSAhPSBBcmd1bWVudFBMb2MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NDEsMjIgKzE0NDEsMjggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1
bWVudHNHZQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0g
cmVnVDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2Vsc2UKICAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVn
VDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2VuZGlmCiAKICAgICBsb2Fk
OChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
ICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0
cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKHNjcmF0Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0
b3JhZ2UoKSkpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1c3RlZEltbVB0
cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEFk
ZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBz
Y3JhdGNoMik7CiAgICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHhvclB0cihUcnVzdGVk
SW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNGb3VyKSwgc2NyYXRjaCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkp
OwpAQCAtMTQ2NSwxMCArMTQ3MSwxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFy
Z3VtZW50c0dlCiAgICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVy
dHksIHNjcmF0Y2gyKTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJ
bmRleChiYXNlLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxv
d1N0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3Jh
dGNoMywgc2NyYXRjaDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgCisg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3Rh
bExlbmd0aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5k
ZXhNYXNrMzIocHJvcGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRj
aDIsIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCBEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gY2FwYWNpdHk7IGktLTspCiAgICAgICAgIHN0b3JhZ2VbaV0uc2V0KHZtLCByZXN1
bHQsIGV4ZWMtPmdldEFyZ3VtZW50VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxl
ZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkp
KTsKKyAgICByZXN1bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5q
c0NhbGxlZSgpKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
Mjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDkgKzExMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHBy
ZWNpc2VJbmRleE1hc2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0cikt
PnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBXcml0ZUJhcnJpZXI8SlNG
dW5jdGlvbj4mIGNhbGxlZSgpCisgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldENhbGxlZShWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAg
fQogICAgIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1l
bnRzT2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI5ODA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KEpTV2ViQXNzZW1ibHlNb2R1bGUpIFwK
ICAgICB2KEpTV2ViQXNzZW1ibHlUYWJsZSkgXAogICAgIHYoTmF0aXZlQ29kZSkgXAorICAgIHYo
U2NvcGVkQXJndW1lbnRzKSBcCiAgICAgdihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpIFwKICAg
ICB2KFVubGlua2VkU291cmNlQ29kZSkgXAogICAgIHYoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Up
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTEgQEAg
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0lu
Zm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykg
fTsKIAotU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCitTY29wZWRBcmd1bWVudHM6OlNjb3Bl
ZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCh0b3RhbExl
bmd0aCkKKyAgICAsIG1fc3RvcmFnZSh2bSwgdGhpcywgc3RvcmFnZSkKIHsKKyAgICBBU1NFUlQo
IXN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MpOwogfQogCiB2b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQpA
QCAtNTcsMTAgKzU3LDE3IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGUKICAgICAgICAgb3ZlcmZsb3dMZW5ndGggPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgo
KTsKICAgICBlbHNlCiAgICAgICAgIG92ZXJmbG93TGVuZ3RoID0gMDsKKyAgICAKKyAgICB2b2lk
KiByYXdTdG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKAorICAgICAgICB2bSwgc3RvcmFnZVNpemUob3ZlcmZsb3dMZW5ndGgpLCBu
dWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
cmF3U3RvcmFnZVB0cikgKyAxOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVU
aGluZ3MgPSBmYWxzZTsKKyAgICBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoID0g
dG90YWxMZW5ndGg7CisgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAog
ICAgICAgICBOb3ROdWxsLAogICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2
bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShvdmVyZmxvd0xlbmd0aCkpKQotICAgICAgICBTY29wZWRB
cmd1bWVudHModm0sIHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgICAgICBTY29wZWRBcmd1
bWVudHModm0sIHN0cnVjdHVyZSwgc3RvcmFnZSk7CiAgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlv
bih2bSwgY2FsbGVlLCB0YWJsZSwgc2NvcGUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0x
MDcsOSArMTE0LDExIEBAIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2UK
ICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3RhYmxlKTsKICAgICB2aXNpdG9yLmFw
cGVuZCh0aGlzT2JqZWN0LT5tX3Njb3BlKTsKICAgICAKLSAgICBpZiAodGhpc09iamVjdC0+bV90
b3RhbExlbmd0aCA+IHRoaXNPYmplY3QtPm1fdGFibGUtPmxlbmd0aCgpKSB7CisgICAgdmlzaXRv
ci5tYXJrQXV4aWxpYXJ5KCZ0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkpOworICAgIAorICAg
IGlmICh0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkudG90YWxMZW5ndGggPiB0aGlzT2JqZWN0
LT5tX3RhYmxlLT5sZW5ndGgoKSkgewogICAgICAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcygKLSAg
ICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJmbG93U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5tX3Rv
dGFsTGVuZ3RoIC0gdGhpc09iamVjdC0+bV90YWJsZS0+bGVuZ3RoKCkpOworICAgICAgICAgICAg
dGhpc09iamVjdC0+b3ZlcmZsb3dTdG9yYWdlKCksIHRoaXNPYmplY3QtPnN0b3JhZ2VIZWFkZXIo
KS50b3RhbExlbmd0aCAtIHRoaXNPYmplY3QtPm1fdGFibGUtPmxlbmd0aCgpKTsKICAgICB9CiAK
ICAgICBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz46OnZpc2l0Q2hpbGRyZW4oY2Vs
bCwgdmlzaXRvcik7CkBAIC0xMjIsMjQgKzEzMSwyNCBAQCBTdHJ1Y3R1cmUqIFNjb3BlZEFyZ3Vt
ZW50czo6Y3JlYXRlU3RydWN0CiAKIHZvaWQgU2NvcGVkQXJndW1lbnRzOjpvdmVycmlkZVRoaW5n
cyhWTSYgdm0pCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIW1fb3ZlcnJvZGVUaGluZ3MpOworICAg
IFJFTEVBU0VfQVNTRVJUKCFzdG9yYWdlSGVhZGVyKCkub3ZlcnJvZGVUaGluZ3MpOwogICAgIAog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihtX3Rh
YmxlLT5sZW5ndGgoKSksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmNhbGxlZSwg
bV9jYWxsZWUuZ2V0KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6
RG9udEVudW0pKTsKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
U3ltYm9sLCBnbG9iYWxPYmplY3QoKS0+YXJyYXlQcm90b1ZhbHVlc0Z1bmN0aW9uKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pKTsKICAgICAKLSAg
ICBtX292ZXJyb2RlVGhpbmdzID0gdHJ1ZTsKKyAgICBzdG9yYWdlSGVhZGVyKCkub3ZlcnJvZGVU
aGluZ3MgPSB0cnVlOwogfQogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3NJ
Zk5lY2Vzc2FyeShWTSYgdm0pCiB7Ci0gICAgaWYgKCFtX292ZXJyb2RlVGhpbmdzKQorICAgIGlm
ICghc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKQogICAgICAgICBvdmVycmlkZVRoaW5n
cyh2bSk7CiB9CiAKIHZvaWQgU2NvcGVkQXJndW1lbnRzOjp1bm1hcEFyZ3VtZW50KFZNJiB2bSwg
dWludDMyX3QgaSkKIHsKLSAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwg
bV90b3RhbExlbmd0aCk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8
IHN0b3JhZ2VIZWFkZXIoKS50b3RhbExlbmd0aCk7CiAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGgg
PSBtX3RhYmxlLT5sZW5ndGgoKTsKICAgICBpZiAoaSA8IG5hbWVkTGVuZ3RoKQogICAgICAgICBt
X3RhYmxlLnNldCh2bSwgdGhpcywgbV90YWJsZS0+c2V0KHZtLCBpLCBTY29wZU9mZnNldCgpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TY29wZWRBcmd1bWVu
dHMuaAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogLy8gbG9va3Vwcy4KIGNsYXNzIFNjb3BlZEFyZ3VtZW50cyBmaW5hbCA6IHB1
YmxpYyBHZW5lcmljQXJndW1lbnRzPFNjb3BlZEFyZ3VtZW50cz4gewogcHJpdmF0ZToKLSAgICBT
Y29wZWRBcmd1bWVudHMoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCB0b3RhbExlbmd0aCk7Cisg
ICAgU2NvcGVkQXJndW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBzdG9yYWdlKTsKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNGdW5jdGlvbiogY2Fs
bGVlLCBTY29wZWRBcmd1bWVudHNUYWJsZSosIEpTTGV4aWNhbEVudmlyb25tZW50Kik7CiAKIHB1
YmxpYzoKQEAgLTY3LDI1ICs2NywyNiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdWludDMyX3QgaW50
ZXJuYWxMZW5ndGgoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdG90YWxMZW5ndGg7
CisgICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKCkudG90YWxMZW5ndGg7CiAgICAgfQogICAg
IAogICAgIHVpbnQzMl90IGxlbmd0aChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgewogICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgICAgICBpZiAoVU5MSUtFTFkobV9vdmVycm9k
ZVRoaW5ncykpCisgICAgICAgIGlmIChVTkxJS0VMWShzdG9yYWdlSGVhZGVyKCkub3ZlcnJvZGVU
aGluZ3MpKQogICAgICAgICAgICAgcmV0dXJuIGdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5s
ZW5ndGgpLnRvVUludDMyKGV4ZWMpOwogICAgICAgICByZXR1cm4gaW50ZXJuYWxMZW5ndGgoKTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCBpc01hcHBlZEFyZ3VtZW50KHVpbnQzMl90IGkpIGNvbnN0
CiAgICAgewotICAgICAgICBpZiAoaSA+PSBtX3RvdGFsTGVuZ3RoKQorICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UgPSBvdmVyZmxvd1N0b3JhZ2UoKTsKKyAgICAgICAgaWYg
KGkgPj0gc3RvcmFnZUhlYWRlcihzdG9yYWdlKS50b3RhbExlbmd0aCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5n
dGgoKTsKICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKICAgICAgICAgICAgIHJldHVybiAh
IW1fdGFibGUtPmdldChpKTsKLSAgICAgICAgcmV0dXJuICEhb3ZlcmZsb3dTdG9yYWdlKClbaSAt
IG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgcmV0dXJuICEhc3RvcmFnZVtpIC0gbmFtZWRM
ZW5ndGhdLmdldCgpOwogICAgIH0KIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudEluREZHKHVp
bnQzMl90IGkpIGNvbnN0CkBAIC05NiwyOCArOTcsMzIgQEAgcHVibGljOgogICAgIEpTVmFsdWUg
Z2V0SW5kZXhRdWlja2x5KHVpbnQzMl90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gc3RvcmFnZUhlYWRlcihzdG9yYWdlKS50b3RhbExl
bmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsK
ICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBtX3Njb3Bl
LT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkuZ2V0KCk7Ci0gICAgICAgIHJldHVybiBvdmVy
Zmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLmdldCgpOworICAgICAgICAgICAgcmV0dXJu
IHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsICZtX3Njb3BlLT52YXJpYWJsZUF0
KG1fdGFibGUtPmdldChpKSkpLT5nZXQoKTsKKyAgICAgICAgcmV0dXJuIHByZWNpc2VJbmRleE1h
c2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3JhZ2UgKyAoaSAtIG5hbWVkTGVuZ3RoKSktPmdldCgp
OwogICAgIH0KIAogICAgIHZvaWQgc2V0SW5kZXhRdWlja2x5KFZNJiB2bSwgdWludDMyX3QgaSwg
SlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGlzTWFwcGVkQXJndW1lbnQoaSkpOworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIHN0b3JhZ2UgPSBvdmVyZmxvd1N0b3JhZ2UoKTsKKyAgICAgICAgdW5zaWduZWQgdG90YWxM
ZW5ndGggPSBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoOwogICAgICAgICB1bnNp
Z25lZCBuYW1lZExlbmd0aCA9IG1fdGFibGUtPmxlbmd0aCgpOwogICAgICAgICBpZiAoaSA8IG5h
bWVkTGVuZ3RoKQotICAgICAgICAgICAgbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQo
aSkpLnNldCh2bSwgbV9zY29wZS5nZXQoKSwgdmFsdWUpOworICAgICAgICAgICAgcHJlY2lzZUlu
ZGV4TWFza1B0cihpLCB0b3RhbExlbmd0aCwgJm1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+
Z2V0KGkpKSktPnNldCh2bSwgbV9zY29wZS5nZXQoKSwgdmFsdWUpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBvdmVyZmxvd1N0b3JhZ2UoKVtpIC0gbmFtZWRMZW5ndGhdLnNldCh2bSwgdGhp
cywgdmFsdWUpOworICAgICAgICAgICAgcHJlY2lzZUluZGV4TWFza1B0cihpLCB0b3RhbExlbmd0
aCwgc3RvcmFnZSArIChpIC0gbmFtZWRMZW5ndGgpKS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAg
ICAgfQogCi0gICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+JiBjYWxsZWUoKQorICAgIEpTRnVu
Y3Rpb24qIGNhbGxlZSgpCiAgICAgewotICAgICAgICByZXR1cm4gbV9jYWxsZWU7CisgICAgICAg
IHJldHVybiBtX2NhbGxlZS5nZXQoKTsKICAgICB9CiAKLSAgICBib29sIG92ZXJyb2RlVGhpbmdz
KCkgY29uc3QgeyByZXR1cm4gbV9vdmVycm9kZVRoaW5nczsgfQorICAgIGJvb2wgb3ZlcnJvZGVU
aGluZ3MoKSBjb25zdCB7IHJldHVybiBzdG9yYWdlSGVhZGVyKCkub3ZlcnJvZGVUaGluZ3M7IH0K
ICAgICB2b2lkIG92ZXJyaWRlVGhpbmdzKFZNJik7CiAgICAgdm9pZCBvdmVycmlkZVRoaW5nc0lm
TmVjZXNzYXJ5KFZNJik7CiAgICAgdm9pZCB1bm1hcEFyZ3VtZW50KFZNJiwgdWludDMyX3QgaW5k
ZXgpOwpAQCAtMTQzLDMyICsxNDgsNTUgQEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90
b3R5cGUpOwogICAgIAotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPdmVycm9kZVRoaW5n
cygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fb3ZlcnJvZGVU
aGluZ3MpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90b3RhbExlbmd0aCk7IH0K
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU3RvcmFnZSgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fc3RvcmFnZSk7IH0KKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3NJblN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoU3RvcmFnZUhlYWRlciwgb3ZlcnJvZGVUaGluZ3MpOyB9CisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNF
VE9GKFN0b3JhZ2VIZWFkZXIsIHRvdGFsTGVuZ3RoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qg
b2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMs
IG1fdGFibGUpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNjb3BlKCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV9zY29wZSk7IH0KICAgICAKLSAg
ICBzdGF0aWMgc2l6ZV90IG92ZXJmbG93U3RvcmFnZU9mZnNldCgpCisgICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZShzaXplX3QgaW5saW5lU2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik+
KHNpemVvZihTY29wZWRBcmd1bWVudHMpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWlubGlu
ZVNpemUpOworICAgICAgICByZXR1cm4gc2l6ZW9mKFNjb3BlZEFyZ3VtZW50cyk7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUoQ2hlY2tlZDxzaXplX3Q+IG92
ZXJmbG93QXJndW1lbnRzTGVuZ3RoKQorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZVNpemUoQ2hl
Y2tlZDxzaXplX3Q+IGNhcGFjaXR5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIChvdmVyZmxvd1N0
b3JhZ2VPZmZzZXQoKSArIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICogb3ZlcmZsb3dB
cmd1bWVudHNMZW5ndGgpLnVuc2FmZUdldCgpOworICAgICAgICByZXR1cm4gKHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pICogKGNhcGFjaXR5ICsgc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSkp
LnVuc2FmZUdldCgpOwogICAgIH0KLQorICAgIAorICAgIHN0YXRpYyBzaXplX3Qgc3RvcmFnZUhl
YWRlclNpemUoKSB7IHJldHVybiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KTsgfQorICAg
IAogcHJpdmF0ZToKKyAgICBzdHJ1Y3QgU3RvcmFnZUhlYWRlciB7CisgICAgICAgIHVuc2lnbmVk
IHRvdGFsTGVuZ3RoOworICAgICAgICBib29sIG92ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxl
bmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9i
amVjdC4KKyAgICB9OworICAgIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogb3ZlcmZsb3dT
dG9yYWdlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8V3JpdGVC
YXJyaWVyPFVua25vd24+Kj4oYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSArIG92ZXJmbG93U3Rv
cmFnZU9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RvcmFnZS5nZXQoKS51bnBvaXNvbmVk
KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdG9yYWdlSGVhZGVyJiBzdG9yYWdlSGVhZGVy
KFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSkKKyAgICB7CisgICAgICAgIHN0YXRpY19h
c3NlcnQoc2l6ZW9mKFN0b3JhZ2VIZWFkZXIpIDw9IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pLCAiU3RvcmFnZUhlYWRlciBuZWVkcyB0byBiZSBubyBiaWdnZXIgdGhhbiBhIEpTVmFsdWUi
KTsKKyAgICAgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8U3RvcmFnZUhlYWRlcio+KHN0b3JhZ2Ug
LSAxKTsKKyAgICB9CisgICAgCisgICAgU3RvcmFnZUhlYWRlciYgc3RvcmFnZUhlYWRlcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RvcmFnZUhlYWRlcihvdmVyZmxvd1N0b3JhZ2Uo
KSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgbV9vdmVycm9kZVRoaW5nczsgLy8gVHJ1ZSBpZiBs
ZW5ndGgsIGNhbGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGluIHRoZSBv
YmplY3QuCi0gICAgdW5zaWduZWQgbV90b3RhbExlbmd0aDsgLy8gVGhlIGxlbmd0aCBvZiBkZWNs
YXJlZCBwbHVzIG92ZXJmbG93IGFyZ3VtZW50cy4KLSAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4gbV9jYWxsZWU7Ci0gICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxlPiBtX3Rh
YmxlOwotICAgIFdyaXRlQmFycmllcjxKU0xleGljYWxFbnZpcm9ubWVudD4gbV9zY29wZTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHVzaW5nIFBvaXNvbmVkQmFycmllciA9IFBvaXNv
bmVkV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1BvaXNvbiwgVD47CisgICAgCisgICAgUG9p
c29uZWRCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2FsbGVlOworICAgIFBvaXNvbmVkQmFycmllcjxT
Y29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJsZTsKKyAgICBQb2lzb25lZEJhcnJpZXI8SlNMZXhp
Y2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7CisgICAgCisgICAgQXV4aWxpYXJ5QmFycmllcjxQb2lz
b25lZDxTY29wZWRBcmd1bWVudHNQb2lzb24sIFdyaXRlQmFycmllcjxVbmtub3duPio+PiBtX3N0
b3JhZ2U7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336238</attachid>
            <date>2018-03-21 15:00:50 -0700</date>
            <delta_ts>2018-03-21 15:29:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33655</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjk4MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGlu
ZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQWRkcyBhbm90aGVyIHN0cmVzcyB0ZXN0IG9mIHNjb3BlZCBhcmd1bWVudHMu
CisKKyAgICAgICAgKiBzdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisKIDIwMTgtMDMtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgV2UgbmVlZCB0byBkbyBwcm9wZXIgYm9va2tlZXBpbmcgb2YgZXhpdE9L
IHdoZW4gaW5zZXJ0aW5nIGNvbnN0YW50cyB3aGVuIHNpbmtpbmcgTmV3QXJyYXlCdWZmZXIKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3Njb3BlZC1hcmd1bWVudHMtdGVzdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLXRlc3QuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKQoreworICAgIChmdW5jdGlvbigpIHsg
cmV0dXJuIGE7IH0pKCk7CisgICAgcmV0dXJuIFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c107Cit9
CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHRbMF0gIT0gNDIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigicmVzdWx0WzBdIGlzIG5vdCA0MjogIiArIHJlc3VsdFswXSk7
CisgICAgaWYgKHJlc3VsdFsxXVswXSAhPSA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJy
ZXN1bHRbMV1bMF0gaXMgbm90IDQyOiAiICsgcmVzdWx0WzFdWzBdKTsKK30KKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTgtMDMt
MjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTY29wZWRBcmd1
bWVudHMgc2hvdWxkIGRvIHBvaXNvbmluZyBhbmQgaW5kZXggbWFza2luZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODYzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG91dGxpbmVz
IHRoZSBTY29wZWRBcmd1bWVudHMgb3ZlcmZsb3cgc3RvcmFnZSBhbmQgYWRkcyBwb2lzb25pbmcu
CisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU2NvcGVkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29w
ZWRBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpTY29wZWRB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmg6CisKIDIwMTgtMDMtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2RlQmxvY2s6Omluc3RydWN0aW9ucygpW10gYW5kIENvZGVCbG9jazo6Ynl0
ZWNvZGVPZmZzZXQoKSBpbnN0ZWFkIG9mIGRvaW5nIG93biBwb2ludGVyIG1hdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lv
biAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMywxMiArNDAzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7CiAKKyAg
ICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksCisgICAgICAgICAgICB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LnhvclB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBq
aXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkpKSk7CiAgICAgICAgIGppdC5sb2Fk
MzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJn
dW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFs
dWVSZWdzKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcxLDYgKzI3MSw4IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpP
dXRPZkJvdW5kcywgQXJyYXk6OkFzSXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2
KCkgJiYgaXMzMkJpdCgpICYmIGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAg
ICAgICByZXR1cm4gd2l0aFR5cGUodHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTgwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3Vt
ZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKIAotICAgIHJlc3VsdC0+Y2FsbGVl
KCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNh
bGxlZSk7CiAKICAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAg
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlRGlyCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVj
dEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICByZXN1
bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBjYWxsZWUpOworICAgIHJlc3VsdC0+c2V0Q2Fs
bGVlKHZtLCBjYWxsZWUpOwogICAgIAogICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMgPQogICAgICAg
ICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IDogMCkgKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDg4LDYgKzY0ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNj
CiAjZW5kaWYKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4TWFzayh0aGlzKTsKICAg
ICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CkBAIC02NTAwLDE5ICs2NTAxLDI5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2MKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBHUFJSZWcgaW5kZXhNYXNrUmVnID0gaW5kZXhNYXNrLmdwcigpOwogICAgIAog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VS
VChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpKSk7CiAgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJl
c3VsdFJlZyk7CisgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRz
UG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50czo6
b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7Cisg
ICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNW
YWx1ZVNvdXJjZSgpLCBudWxscHRyLAotICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZz
ZXRPZlRvdGFsTGVuZ3RoKCkpKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKSk7CisgICAgCisgICAg
bV9qaXQuZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hS
ZWcsIGluZGV4TWFza1JlZyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNj
cmF0Y2hSZWcpOworICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50
c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDJSZWcpOwogICAgIApAQCAtNjUyMCw2ICs2NTMx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwog
ICAgIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMlJlZyk7CisgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNj
cmF0Y2gyUmVnKTsKIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwKQEAgLTY1NDcsMTMgKzY1NTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50
czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3Jh
dGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdz
KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2Uo
KSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywg
cmVzdWx0UmVnKTsKKyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCkBAIC02NjUwLDggKzY2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY3
MCwxNCArNjY4MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVu
dHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7Cisg
ICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3NJblN0b3JhZ2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRv
dGFsTGVuZ3RoSW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2Vu
X1BhY2tldF9zY29wZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSBcCiAgICAgbWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8o
U2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRo
aW5ncygpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGlu
Z3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBc
CisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2Nv
cGVkQXJndW1lbnRzX3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkp
IFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZTY29wZSgpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRB
cmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190
b3RhbExlbmd0aCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhTY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfbGVuZ3RoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAg
IG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0x
MzgsNyArMTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3Jv
KEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRz
LCAwLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVT
dHJpbmdfZmliZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxv
d1N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9z
dG9yYWdlLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJy
aWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNy
byhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMx
NiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgy
LDEwICszNjgyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9v
dXQuYml0WG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hl
YXBzLlNjb3BlZEFyZ3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVj
dWxhdGUoCiAgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQz
Mihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50
MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfU3RvcmFnZV90b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
OwogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOwor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdElu
dFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSB0b3RhbExlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90
YWxMZW5ndGgpOwogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIEV4b3Rp
Y09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50
c190b3RhbExlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5k
ZXgsIHRvdGFsTGVuZ3RoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSB0YWJs
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOwor
ICAgICAgICAgICAgdGFibGUgPSBtX291dC5iaXRYb3IodGFibGUsIG1fb3V0LmNvbnN0SW50UHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5hbWVkQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0zOTAyLDYgKzM5MTAsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfc2NvcGUpOworICAgICAgICAgICAgc2NvcGUgPSBtX291dC5iaXRYb3Ioc2NvcGUsIG1fb3V0
LmNvbnN0SW50UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCkBAIC0zOTIw
LDcgKzM5MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZs
b3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRyZXNz
ID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAgICAgICAg
ICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzgsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93
UmVzdWx0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBwcmVjaXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5ndGgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKICAgICAg
ICAgICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUo
CiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFy
Z3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgICAgICByZXN1bHQt
PnNldENhbGxlZSh2bSwgY2FsbGVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1h
dGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
ICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpW2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigp
LmtpbmQoKSAhPSBBcmd1bWVudFBMb2MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NDEsMjIgKzE0NDEsMjggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1
bWVudHNHZQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0g
cmVnVDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2Vsc2UKICAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVn
VDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2VuZGlmCiAKICAgICBsb2Fk
OChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
ICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0
cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKHNjcmF0Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0
b3JhZ2UoKSkpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1c3RlZEltbVB0
cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEFk
ZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBz
Y3JhdGNoMik7CiAgICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHhvclB0cihUcnVzdGVk
SW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNGb3VyKSwgc2NyYXRjaCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkp
OwpAQCAtMTQ2NSwxMCArMTQ3MSwxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFy
Z3VtZW50c0dlCiAgICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVy
dHksIHNjcmF0Y2gyKTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJ
bmRleChiYXNlLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxv
d1N0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3Jh
dGNoMywgc2NyYXRjaDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgCisg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3Rh
bExlbmd0aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5k
ZXhNYXNrMzIocHJvcGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRj
aDIsIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCBEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gY2FwYWNpdHk7IGktLTspCiAgICAgICAgIHN0b3JhZ2VbaV0uc2V0KHZtLCByZXN1
bHQsIGV4ZWMtPmdldEFyZ3VtZW50VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxl
ZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkp
KTsKKyAgICByZXN1bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5q
c0NhbGxlZSgpKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
Mjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDkgKzExMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHBy
ZWNpc2VJbmRleE1hc2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0cikt
PnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBXcml0ZUJhcnJpZXI8SlNG
dW5jdGlvbj4mIGNhbGxlZSgpCisgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldENhbGxlZShWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAg
fQogICAgIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1l
bnRzT2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI5ODA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KEpTV2ViQXNzZW1ibHlNb2R1bGUpIFwK
ICAgICB2KEpTV2ViQXNzZW1ibHlUYWJsZSkgXAogICAgIHYoTmF0aXZlQ29kZSkgXAorICAgIHYo
U2NvcGVkQXJndW1lbnRzKSBcCiAgICAgdihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpIFwKICAg
ICB2KFVubGlua2VkU291cmNlQ29kZSkgXAogICAgIHYoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Up
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTEgQEAg
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0lu
Zm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykg
fTsKIAotU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCitTY29wZWRBcmd1bWVudHM6OlNjb3Bl
ZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCh0b3RhbExl
bmd0aCkKKyAgICAsIG1fc3RvcmFnZSh2bSwgdGhpcywgc3RvcmFnZSkKIHsKKyAgICBBU1NFUlQo
IXN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MpOwogfQogCiB2b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQpA
QCAtNTcsMTAgKzU3LDE3IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGUKICAgICAgICAgb3ZlcmZsb3dMZW5ndGggPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgo
KTsKICAgICBlbHNlCiAgICAgICAgIG92ZXJmbG93TGVuZ3RoID0gMDsKKyAgICAKKyAgICB2b2lk
KiByYXdTdG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKAorICAgICAgICB2bSwgc3RvcmFnZVNpemUob3ZlcmZsb3dMZW5ndGgpLCBu
dWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
cmF3U3RvcmFnZVB0cikgKyAxOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVU
aGluZ3MgPSBmYWxzZTsKKyAgICBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoID0g
dG90YWxMZW5ndGg7CisgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAog
ICAgICAgICBOb3ROdWxsLAotICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2
bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShvdmVyZmxvd0xlbmd0aCkpKQotICAgICAgICBTY29wZWRB
cmd1bWVudHModm0sIHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgICAgICBhbGxvY2F0ZUNl
bGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKHZt
LCBzdHJ1Y3R1cmUsIHN0b3JhZ2UpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGNh
bGxlZSwgdGFibGUsIHNjb3BlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDkgKzEx
NCwxMSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zY29wZSk7CiAgICAgCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fdG90YWxMZW5n
dGggPiB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSkgeworICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeSgmdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+c3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoID4gdGhpc09iamVjdC0+bV90YWJs
ZS0+bGVuZ3RoKCkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoCi0gICAgICAgICAg
ICB0aGlzT2JqZWN0LT5vdmVyZmxvd1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0
aCAtIHRoaXNPYmplY3QtPm1fdGFibGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm92ZXJmbG93U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkudG90YWxM
ZW5ndGggLSB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgR2Vu
ZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOwpAQCAtMTIyLDI0ICsxMzEsMjQgQEAgU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdAogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mIHZt
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKTsKICAgICAKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVu
Z3RoKCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVl
LmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwg
Z2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgbV9vdmVy
cm9kZVRoaW5ncyA9IHRydWU7CisgICAgc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzID0g
dHJ1ZTsKIH0KIAogdm9pZCBTY29wZWRBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nh
cnkoVk0mIHZtKQogewotICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICBpZiAoIXN0b3Jh
Z2VIZWFkZXIoKS5vdmVycm9kZVRoaW5ncykKICAgICAgICAgb3ZlcnJpZGVUaGluZ3Modm0pOwog
fQogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90
IGkpCiB7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxM
ZW5ndGgpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzdG9yYWdl
SGVhZGVyKCkudG90YWxMZW5ndGgpOwogICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJs
ZS0+bGVuZ3RoKCk7CiAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKICAgICAgICAgbV90YWJsZS5z
ZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIC8vIGxvb2t1cHMuCiBjbGFzcyBTY29wZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2Vu
ZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAgU2NvcGVkQXJn
dW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIFNjb3Bl
ZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFn
ZSk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2Nv
cGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwogCiBwdWJsaWM6CkBA
IC02NywyNSArNjcsMjYgQEAgcHVibGljOgogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVu
Z3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgICAg
ICByZXR1cm4gc3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoOwogICAgIH0KICAgICAKICAgICB1
aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3Mp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKSkK
ICAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKGkgPj0gbV90b3RhbExlbmd0aCkKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0
b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gISFtX3RhYmxl
LT5nZXQoaSk7Ci0gICAgICAgIHJldHVybiAhIW92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExl
bmd0aF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAhIXN0b3JhZ2VbaSAtIG5hbWVkTGVuZ3RoXS5n
ZXQoKTsKICAgICB9CiAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBp
KSBjb25zdApAQCAtOTYsMjggKzk3LDMyIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogc3RvcmFnZSA9IG92ZXJmbG93U3RvcmFnZSgpOworICAgICAgICB1bnNp
Z25lZCB0b3RhbExlbmd0aCA9IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGg7CiAg
ICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAg
IGlmIChpIDwgbmFtZWRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFi
bGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgpOwotICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9y
YWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNl
SW5kZXhNYXNrUHRyKGksIHRvdGFsTGVuZ3RoLCAmbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxl
LT5nZXQoaSkpKS0+Z2V0KCk7CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGks
IHRvdGFsTGVuZ3RoLCBzdG9yYWdlICsgKGkgLSBuYW1lZExlbmd0aCkpLT5nZXQoKTsKICAgICB9
CiAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUg
dmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
c01hcHBlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9y
YWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0g
c3RvcmFnZUhlYWRlcihzdG9yYWdlKS50b3RhbExlbmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFt
ZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0
aCkKLSAgICAgICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5zZXQo
dm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQ
dHIoaSwgdG90YWxMZW5ndGgsICZtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkp
LT5zZXQodm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3Jh
Z2UgKyAoaSAtIG5hbWVkTGVuZ3RoKSktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAot
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgICAgICByZXR1cm4g
bV9jYWxsZWUuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcnJvZGVUaGluZ3M7IH0KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkg
Y29uc3QgeyByZXR1cm4gc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzOyB9CiAgICAgdm9p
ZCBvdmVycmlkZVRoaW5ncyhWTSYpOwogICAgIHZvaWQgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2Fy
eShWTSYpOwogICAgIHZvaWQgdW5tYXBBcmd1bWVudChWTSYsIHVpbnQzMl90IGluZGV4KTsKQEAg
LTE0MywzMiArMTQ4LDU1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
ICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2RlVGhpbmdzKTsg
fQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3N0b3JhZ2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
b3JhZ2VIZWFkZXIsIG92ZXJyb2RlVGhpbmdzKTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zm
c2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihTdG9y
YWdlSGVhZGVyLCB0b3RhbExlbmd0aCk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
VGFibGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3RhYmxl
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTY29wZSgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fc2NvcGUpOyB9CiAgICAgCi0gICAgc3RhdGlj
IHNpemVfdCBvdmVyZmxvd1N0b3JhZ2VPZmZzZXQoKQorICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUoc2l6ZV90IGlubGluZVNpemUpCiAgICAgewotICAgICAgICByZXR1cm4gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pPihzaXplb2Yo
U2NvcGVkQXJndW1lbnRzKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpbmxpbmVTaXplKTsK
KyAgICAgICAgcmV0dXJuIHNpemVvZihTY29wZWRBcmd1bWVudHMpOwogICAgIH0KICAgICAKLSAg
ICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKENoZWNrZWQ8c2l6ZV90PiBvdmVyZmxvd0Fy
Z3VtZW50c0xlbmd0aCkKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VTaXplKENoZWNrZWQ8c2l6
ZV90PiBjYXBhY2l0eSkKICAgICB7Ci0gICAgICAgIHJldHVybiAob3ZlcmZsb3dTdG9yYWdlT2Zm
c2V0KCkgKyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSAqIG92ZXJmbG93QXJndW1lbnRz
TGVuZ3RoKS51bnNhZmVHZXQoKTsKKyAgICAgICAgcmV0dXJuIChzaXplb2YoV3JpdGVCYXJyaWVy
PFVua25vd24+KSAqIChjYXBhY2l0eSArIHN0YXRpY19jYXN0PHNpemVfdD4oMSkpKS51bnNhZmVH
ZXQoKTsKICAgICB9Ci0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IHN0b3JhZ2VIZWFkZXJTaXpl
KCkgeyByZXR1cm4gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPik7IH0KKyAgICAKIHByaXZh
dGU6CisgICAgc3RydWN0IFN0b3JhZ2VIZWFkZXIgeworICAgICAgICB1bnNpZ25lZCB0b3RhbExl
bmd0aDsKKyAgICAgICAgYm9vbCBvdmVycm9kZVRoaW5nczsgLy8gVHJ1ZSBpZiBsZW5ndGgsIGNh
bGxlZSwgYW5kIGNhbGxlciBhcmUgZnVsbHkgbWF0ZXJpYWxpemVkIGluIHRoZSBvYmplY3QuCisg
ICAgfTsKKyAgICAKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIG92ZXJmbG93U3RvcmFnZSgp
IGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxV
bmtub3duPio+KGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgKyBvdmVyZmxvd1N0b3JhZ2VPZmZz
ZXQoKSk7CisgICAgICAgIHJldHVybiBtX3N0b3JhZ2UuZ2V0KCkudW5wb2lzb25lZCgpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgU3RvcmFnZUhlYWRlciYgc3RvcmFnZUhlYWRlcihXcml0ZUJh
cnJpZXI8VW5rbm93bj4qIHN0b3JhZ2UpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHNp
emVvZihTdG9yYWdlSGVhZGVyKSA8PSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSwgIlN0
b3JhZ2VIZWFkZXIgbmVlZHMgdG8gYmUgbm8gYmlnZ2VyIHRoYW4gYSBKU1ZhbHVlIik7CisgICAg
ICAgIHJldHVybiAqYml0d2lzZV9jYXN0PFN0b3JhZ2VIZWFkZXIqPihzdG9yYWdlIC0gMSk7Cisg
ICAgfQorICAgIAorICAgIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VIZWFkZXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0b3JhZ2VIZWFkZXIob3ZlcmZsb3dTdG9yYWdlKCkpOwogICAg
IH0KICAgICAKLSAgICBib29sIG1fb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUgaWYgbGVuZ3RoLCBj
YWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0aGUgb2JqZWN0Lgot
ICAgIHVuc2lnbmVkIG1fdG90YWxMZW5ndGg7IC8vIFRoZSBsZW5ndGggb2YgZGVjbGFyZWQgcGx1
cyBvdmVyZmxvdyBhcmd1bWVudHMuCi0gICAgV3JpdGVCYXJyaWVyPEpTRnVuY3Rpb24+IG1fY2Fs
bGVlOwotICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV90YWJsZTsKLSAg
ICBXcml0ZUJhcnJpZXI8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IG1fc2NvcGU7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICB1c2luZyBQb2lzb25lZEJhcnJpZXIgPSBQb2lzb25lZFdyaXRl
QmFycmllcjxTY29wZWRBcmd1bWVudHNQb2lzb24sIFQ+OworICAgIAorICAgIFBvaXNvbmVkQmFy
cmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsKKyAgICBQb2lzb25lZEJhcnJpZXI8U2NvcGVkQXJn
dW1lbnRzVGFibGU+IG1fdGFibGU7CisgICAgUG9pc29uZWRCYXJyaWVyPEpTTGV4aWNhbEVudmly
b25tZW50PiBtX3Njb3BlOworICAgIAorICAgIEF1eGlsaWFyeUJhcnJpZXI8UG9pc29uZWQ8U2Nv
cGVkQXJndW1lbnRzUG9pc29uLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qPj4gbV9zdG9yYWdlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336240</attachid>
            <date>2018-03-21 15:29:06 -0700</date>
            <delta_ts>2018-03-21 15:41:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33719</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjk4MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGlu
ZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgQWRkcyBhbm90aGVyIHN0cmVzcyB0ZXN0IG9mIHNjb3BlZCBhcmd1bWVudHMu
CisKKyAgICAgICAgKiBzdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisKIDIwMTgtMDMtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgV2UgbmVlZCB0byBkbyBwcm9wZXIgYm9va2tlZXBpbmcgb2YgZXhpdE9L
IHdoZW4gaW5zZXJ0aW5nIGNvbnN0YW50cyB3aGVuIHNpbmtpbmcgTmV3QXJyYXlCdWZmZXIKSW5k
ZXg6IEpTVGVzdHMvc3RyZXNzL3Njb3BlZC1hcmd1bWVudHMtdGVzdC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLXRlc3QuanMJKG5vbmV4aXN0ZW50KQor
KysgSlNUZXN0cy9zdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKQoreworICAgIChmdW5jdGlvbigpIHsg
cmV0dXJuIGE7IH0pKCk7CisgICAgcmV0dXJuIFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c107Cit9
CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHRbMF0gIT0gNDIpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigicmVzdWx0WzBdIGlzIG5vdCA0MjogIiArIHJlc3VsdFswXSk7
CisgICAgaWYgKHJlc3VsdFsxXVswXSAhPSA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJy
ZXN1bHRbMV1bMF0gaXMgbm90IDQyOiAiICsgcmVzdWx0WzFdWzBdKTsKK30KKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTgtMDMt
MjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTY29wZWRBcmd1
bWVudHMgc2hvdWxkIGRvIHBvaXNvbmluZyBhbmQgaW5kZXggbWFza2luZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODYzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIG91dGxpbmVz
IHRoZSBTY29wZWRBcmd1bWVudHMgb3ZlcmZsb3cgc3RvcmFnZSBhbmQgYWRkcyBwb2lzb25pbmcu
CisKKyAgICAgICAgKiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNj
ZXNzQ2FzZTo6Z2VuZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRC
eVZhbE9uU2NvcGVkQXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgor
ICAgICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNjb3BlZEFyZ3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNv
bi5oOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29w
ZWRBcmd1bWVudHM6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpTY29wZWRB
cmd1bWVudHM6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1l
bnRzLmg6CisKIDIwMTgtMDMtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIFVzZSBDb2RlQmxvY2s6Omluc3RydWN0aW9ucygpW10gYW5kIENvZGVCbG9jazo6Ynl0
ZWNvZGVPZmZzZXQoKSBpbnN0ZWFkIG9mIGRvaW5nIG93biBwb2ludGVyIG1hdGguCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lv
biAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMywxMiArNDAzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6
Z2VuZXJhdGVXaXRoR3VhcmQoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7CiAKKyAg
ICAgICAgaml0LmxvYWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFz
ZUdQUiwgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksCisgICAgICAgICAgICB2
YWx1ZVJlZ3MucGF5bG9hZEdQUigpKTsKKyAgICAgICAgaml0LnhvclB0cihDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHZhbHVlUmVncy5w
YXlsb2FkR1BSKCkpOwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBq
aXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAot
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1
bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgU2NvcGVkQXJndW1lbnRz
OjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkpKSk7CiAgICAgICAgIGppdC5sb2Fk
MzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJn
dW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0
T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2Fk
R1BSKCkpOwogICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFs
dWVSZWdzKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcxLDYgKzI3MSw4IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpP
dXRPZkJvdW5kcywgQXJyYXk6OkFzSXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2
KCkgJiYgaXMzMkJpdCgpICYmIGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAg
ICAgICByZXR1cm4gd2l0aFR5cGUodHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTgwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVu
dHNEdXJpCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNy
ZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3Vt
ZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKIAotICAgIHJlc3VsdC0+Y2FsbGVl
KCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNh
bGxlZSk7CiAKICAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSAr
IChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAg
ICAgRnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlRGlyCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVu
dHM6OmNyZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVj
dEFyZ3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICByZXN1
bHQtPmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBjYWxsZWUpOworICAgIHJlc3VsdC0+c2V0Q2Fs
bGVlKHZtLCBjYWxsZWUpOwogICAgIAogICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMgPQogICAgICAg
ICBleGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUt
PnN0YWNrT2Zmc2V0IDogMCkgKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
NDg4LDYgKzY0ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNj
CiAjZW5kaWYKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4TWFzayh0aGlzKTsKICAg
ICAKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CkBAIC02NTAwLDE5ICs2NTAxLDI5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2MKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNo
UmVnID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5n
cHIoKTsKKyAgICBHUFJSZWcgaW5kZXhNYXNrUmVnID0gaW5kZXhNYXNrLmdwcigpOwogICAgIAog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VS
VChBcnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwg
MCkpKSk7CiAgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJl
c3VsdFJlZyk7CisgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRz
UG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKAorICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50czo6
b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7Cisg
ICAgCiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNW
YWx1ZVNvdXJjZSgpLCBudWxscHRyLAotICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZz
ZXRPZlRvdGFsTGVuZ3RoKCkpKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKSk7CisgICAgCisgICAg
bV9qaXQuZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hS
ZWcsIGluZGV4TWFza1JlZyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNj
cmF0Y2hSZWcpOworICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50
c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxl
OjpvZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDJSZWcpOwogICAgIApAQCAtNjUyMCw2ICs2NTMx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwog
ICAgIAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMlJlZyk7CisgICAgbV9q
aXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNj
cmF0Y2gyUmVnKTsKIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwKQEAgLTY1NDcsMTMgKzY1NTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVn
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50
czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3Jh
dGNoMlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdz
KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2Uo
KSwgbnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywg
cmVzdWx0UmVnKTsKKyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwog
fQogCkBAIC02NjUwLDggKzY2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QXJyYXlMZW5nCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRP
ZlN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAg
ICAgIFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJl
Zyk7CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6
b2Zmc2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY3
MCwxNCArNjY4MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5n
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVu
dHMpLmFscmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6
Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7Cisg
ICAgICAgIAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2Jq
ZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVU
aGluZ3NJblN0b3JhZ2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRv
dGFsTGVuZ3RoSW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50
MzJSZXN1bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
aAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2Vu
X1BhY2tldF9zY29wZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2Nv
cGUpKSBcCiAgICAgbWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1Rf
T0ZGU0VUT0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8o
U2hhZG93Q2hpY2tlbl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRv
d0NoaWNrZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1
bWVudHNfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRo
aW5ncygpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGlu
Z3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBc
CisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2Nv
cGVkQXJndW1lbnRzX3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkp
IFwKICAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZTY29wZSgpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRB
cmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190
b3RhbExlbmd0aCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAg
ICBtYWNybyhTY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1Rh
YmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFi
bGVfbGVuZ3RoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAg
IG1hY3JvKFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0x
MzgsNyArMTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3Jv
KEpTTGV4aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9m
ZnNldE9mVmFyaWFibGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhK
U1Byb3BlcnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRz
LCAwLCBzaXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVT
dHJpbmdfZmliZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0
ZUJhcnJpZXI8SlNTdHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxv
d1N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVv
ZihFbmNvZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9z
dG9yYWdlLCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJy
aWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNy
byhjaGFyYWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMx
NiwgMCwgc2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgy
LDEwICszNjgyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJh
eTo6U2NvcGVkQXJndW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9v
dXQuYml0WG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hl
YXBzLlNjb3BlZEFyZ3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25z
dEludFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVj
dWxhdGUoCiAgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxs
cHRyLAotICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQz
Mihhcmd1bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwot
ICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBt
X2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1f
b3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50
MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfU3RvcmFnZV90b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIExWYWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
OwogICAgICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGls
ZChtX25vZGUsIDEpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2Ug
PSBtX291dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOwor
ICAgICAgICAgICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdElu
dFB0cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIExWYWx1ZSB0b3RhbExlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKAorICAg
ICAgICAgICAgICAgIHN0b3JhZ2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90
YWxMZW5ndGgpOwogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIEV4b3Rp
Y09iamVjdE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5h
Ym92ZU9yRXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAg
ICAgICBtX291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50
c190b3RhbExlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5k
ZXgsIHRvdGFsTGVuZ3RoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSB0YWJs
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOwor
ICAgICAgICAgICAgdGFibGUgPSBtX291dC5iaXRYb3IodGFibGUsIG1fb3V0LmNvbnN0SW50UHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTFZhbHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIG5hbWVkQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0zOTAyLDYgKzM5MTAsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhuYW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IExWYWx1ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVu
dHNfc2NvcGUpOworICAgICAgICAgICAgc2NvcGUgPSBtX291dC5iaXRYb3Ioc2NvcGUsIG1fb3V0
LmNvbnN0SW50UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAg
IAogICAgICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1f
aGVhcHMuU2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCkBAIC0zOTIw
LDcgKzM5MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZs
b3dDYXNlLCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRyZXNz
ID0gbV9vdXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1l
bnRzX292ZXJmbG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgbV9v
dXQuemVyb0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAgICAgICAg
ICAgTFZhbHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAg
ICAgICBzcGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5pc1plcm82NChvdmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzgsMTEgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAg
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93
UmVzdWx0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5waGkoSW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAgICAgICBy
ZXN1bHQgPSBwcmVjaXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5ndGgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzYsNyArMzM2LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aQogICAgICAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKICAgICAg
ICAgICAgIERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUo
CiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFy
Z3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLSAgICAgICAgICAgIHJlc3Vs
dC0+Y2FsbGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgICAgICByZXN1bHQt
PnNldENhbGxlZSh2bSwgY2FsbGVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1h
dGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
ICAgIGNvbnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+
cHJvcGVydGllcygpW2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigp
LmtpbmQoKSAhPSBBcmd1bWVudFBMb2MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0NDEsMjIgKzE0NDEsMjggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1
bWVudHNHZQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAg
ICBSZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0g
cmVnVDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2Vsc2UKICAgICBSZWdp
c3RlcklEIGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAg
ICAgSlNWYWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVn
VDQ7CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2VuZGlmCiAKICAgICBsb2Fk
OChBZGRyZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsK
ICAgICBiYWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0
ZWRJbW0zMihTY29wZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBT
Y29wZWRBcmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0
cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBB
ZGRyZXNzKHNjcmF0Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0
b3JhZ2UoKSkpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1c3RlZEltbVB0
cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEFk
ZHJlc3Moc2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBz
Y3JhdGNoMik7CiAgICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWws
IHByb3BlcnR5LCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHhvclB0cihUcnVzdGVk
SW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMik7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3Vt
ZW50cygpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0
eSwgVGltZXNGb3VyKSwgc2NyYXRjaCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihF
cXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkp
OwpAQCAtMTQ2NSwxMCArMTQ3MSwxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFy
Z3VtZW50c0dlCiAgICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVy
dHksIHNjcmF0Y2gyKTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJ
bmRleChiYXNlLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxv
d1N0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3Jh
dGNoMywgc2NyYXRjaDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwogICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoSWZFbXB0eShyZXN1bHQpKTsKICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgCisg
ICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3Rh
bExlbmd0aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5k
ZXhNYXNrMzIocHJvcGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRj
aDIsIHJlc3VsdC5wYXlsb2FkR1BSKCkpOworICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBA
QCBEaXJlY3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgZm9yICh1bnNp
Z25lZCBpID0gY2FwYWNpdHk7IGktLTspCiAgICAgICAgIHN0b3JhZ2VbaV0uc2V0KHZtLCByZXN1
bHQsIGV4ZWMtPmdldEFyZ3VtZW50VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxl
ZSgpLnNldCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkp
KTsKKyAgICByZXN1bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5q
c0NhbGxlZSgpKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAy
Mjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDkgKzExMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHBy
ZWNpc2VJbmRleE1hc2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0cikt
PnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBXcml0ZUJhcnJpZXI8SlNG
dW5jdGlvbj4mIGNhbGxlZSgpCisgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NhbGxlZTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNldENhbGxlZShWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9u
KQorICAgIHsKKyAgICAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAg
fQogICAgIAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1l
bnRzT2Zmc2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dl
bmVyaWNBcmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI5ODA5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8
VHlwZT46OmdldE93blByb3BlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSB7Ci0gICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7Cisg
ICAgICAgICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKSk7CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnQgPT0g
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KEpTV2ViQXNzZW1ibHlNb2R1bGUpIFwK
ICAgICB2KEpTV2ViQXNzZW1ibHlUYWJsZSkgXAogICAgIHYoTmF0aXZlQ29kZSkgXAorICAgIHYo
U2NvcGVkQXJndW1lbnRzKSBcCiAgICAgdihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpIFwKICAg
ICB2KFVubGlua2VkU291cmNlQ29kZSkgXAogICAgIHYoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2Up
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJn
dW1lbnRzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTEgQEAg
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0lu
Zm8gU2NvcGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZv
LCBudWxscHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykg
fTsKIAotU2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCitTY29wZWRBcmd1bWVudHM6OlNjb3Bl
ZEFyZ3VtZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4qIHN0b3JhZ2UpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0g
ICAgLCBtX292ZXJyb2RlVGhpbmdzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCh0b3RhbExl
bmd0aCkKKyAgICAsIG1fc3RvcmFnZSh2bSwgdGhpcywgc3RvcmFnZSkKIHsKKyAgICBBU1NFUlQo
IXN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MpOwogfQogCiB2b2lkIFNjb3Bl
ZEFyZ3VtZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNj
b3BlZEFyZ3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQpA
QCAtNTcsMTAgKzU3LDE3IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVh
dGUKICAgICAgICAgb3ZlcmZsb3dMZW5ndGggPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgo
KTsKICAgICBlbHNlCiAgICAgICAgIG92ZXJmbG93TGVuZ3RoID0gMDsKKyAgICAKKyAgICB2b2lk
KiByYXdTdG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2Nh
dGVOb25WaXJ0dWFsKAorICAgICAgICB2bSwgc3RvcmFnZVNpemUob3ZlcmZsb3dMZW5ndGgpLCBu
dWxscHRyLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4o
cmF3U3RvcmFnZVB0cikgKyAxOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVU
aGluZ3MgPSBmYWxzZTsKKyAgICBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoID0g
dG90YWxMZW5ndGg7CisgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAog
ICAgICAgICBOb3ROdWxsLAotICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2
bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShvdmVyZmxvd0xlbmd0aCkpKQotICAgICAgICBTY29wZWRB
cmd1bWVudHModm0sIHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgICAgICBhbGxvY2F0ZUNl
bGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKHZt
LCBzdHJ1Y3R1cmUsIHN0b3JhZ2UpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGNh
bGxlZSwgdGFibGUsIHNjb3BlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDkgKzEx
NCwxMSBAQCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlz
aXRvci5hcHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhp
c09iamVjdC0+bV9zY29wZSk7CiAgICAgCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fdG90YWxMZW5n
dGggPiB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSkgeworICAgIHZpc2l0b3IubWFya0F1
eGlsaWFyeSgmdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+c3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoID4gdGhpc09iamVjdC0+bV90YWJs
ZS0+bGVuZ3RoKCkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoCi0gICAgICAgICAg
ICB0aGlzT2JqZWN0LT5vdmVyZmxvd1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0
aCAtIHRoaXNPYmplY3QtPm1fdGFibGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHRoaXNPYmpl
Y3QtPm92ZXJmbG93U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkudG90YWxM
ZW5ndGggLSB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgR2Vu
ZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOwpAQCAtMTIyLDI0ICsxMzEsMjQgQEAgU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdAogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mIHZt
KQogewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKTsKICAgICAKICAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVu
Z3RoKCkpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVl
LmdldCgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVt
KSk7CiAgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwg
Z2xvYmFsT2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgbV9vdmVy
cm9kZVRoaW5ncyA9IHRydWU7CisgICAgc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzID0g
dHJ1ZTsKIH0KIAogdm9pZCBTY29wZWRBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZWNlc3Nh
cnkoVk0mIHZtKQogewotICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICBpZiAoIXN0b3Jh
Z2VIZWFkZXIoKS5vdmVycm9kZVRoaW5ncykKICAgICAgICAgb3ZlcnJpZGVUaGluZ3Modm0pOwog
fQogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90
IGkpCiB7Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxM
ZW5ndGgpOworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzdG9yYWdl
SGVhZGVyKCkudG90YWxMZW5ndGgpOwogICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJs
ZS0+bGVuZ3RoKCk7CiAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKICAgICAgICAgbV90YWJsZS5z
ZXQodm0sIHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJl
dmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFy
Z3VtZW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIC8vIGxvb2t1cHMuCiBjbGFzcyBTY29wZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2Vu
ZXJpY0FyZ3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAgU2NvcGVkQXJn
dW1lbnRzKFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIFNjb3Bl
ZEFyZ3VtZW50cyhWTSYsIFN0cnVjdHVyZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFn
ZSk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2Nv
cGVkQXJndW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwogCiBwdWJsaWM6CkBA
IC02NywyNSArNjcsMjYgQEAgcHVibGljOgogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVu
Z3RoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgICAg
ICByZXR1cm4gc3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoOwogICAgIH0KICAgICAKICAgICB1
aW50MzJfdCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3Mp
KQorICAgICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKSkK
ICAgICAgICAgICAgIHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b1VJbnQzMihleGVjKTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsK
LSAgICAgICAgaWYgKGkgPj0gbV90b3RhbExlbmd0aCkKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0
b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAg
ICAgICAgIGlmIChpIDwgbmFtZWRMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gISFtX3RhYmxl
LT5nZXQoaSk7Ci0gICAgICAgIHJldHVybiAhIW92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExl
bmd0aF0uZ2V0KCk7CisgICAgICAgIHJldHVybiAhIXN0b3JhZ2VbaSAtIG5hbWVkTGVuZ3RoXS5n
ZXQoKTsKICAgICB9CiAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBp
KSBjb25zdApAQCAtOTYsMjggKzk3LDMyIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldEluZGV4
UXVpY2tseSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7CisgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogc3RvcmFnZSA9IG92ZXJmbG93U3RvcmFnZSgpOworICAgICAgICB1bnNp
Z25lZCB0b3RhbExlbmd0aCA9IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGg7CiAg
ICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAg
IGlmIChpIDwgbmFtZWRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFi
bGVBdChtX3RhYmxlLT5nZXQoaSkpLmdldCgpOwotICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9y
YWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNl
SW5kZXhNYXNrUHRyKGksIHRvdGFsTGVuZ3RoLCAmbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxl
LT5nZXQoaSkpKS0+Z2V0KCk7CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGks
IHRvdGFsTGVuZ3RoLCBzdG9yYWdlICsgKGkgLSBuYW1lZExlbmd0aCkpLT5nZXQoKTsKICAgICB9
CiAKICAgICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUg
dmFsdWUpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
c01hcHBlZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9y
YWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0g
c3RvcmFnZUhlYWRlcihzdG9yYWdlKS50b3RhbExlbmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFt
ZWRMZW5ndGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0
aCkKLSAgICAgICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5zZXQo
dm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQ
dHIoaSwgdG90YWxMZW5ndGgsICZtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkp
LT5zZXQodm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVl
KTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3Jh
Z2UgKyAoaSAtIG5hbWVkTGVuZ3RoKSktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAot
ICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgICAgICByZXR1cm4g
bV9jYWxsZWUuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcnJvZGVUaGluZ3M7IH0KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkg
Y29uc3QgeyByZXR1cm4gc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzOyB9CiAgICAgdm9p
ZCBvdmVycmlkZVRoaW5ncyhWTSYpOwogICAgIHZvaWQgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2Fy
eShWTSYpOwogICAgIHZvaWQgdW5tYXBBcmd1bWVudChWTSYsIHVpbnQzMl90IGluZGV4KTsKQEAg
LTE0MywzMiArMTQ4LDU1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsK
ICAgICAKLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2RlVGhpbmdzKTsg
fQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgpOyB9CisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZlN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
U2NvcGVkQXJndW1lbnRzLCBtX3N0b3JhZ2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0
b3JhZ2VIZWFkZXIsIG92ZXJyb2RlVGhpbmdzKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93
bj4pOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoSW5TdG9yYWdl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VIZWFkZXIsIHRvdGFsTGVuZ3RoKSAt
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBv
ZmZzZXRPZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywg
bV90YWJsZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3Njb3BlKTsgfQogICAgIAotICAg
IHN0YXRpYyBzaXplX3Qgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkKKyAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHNpemVfdCBpbmxpbmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4o
c2l6ZW9mKFNjb3BlZEFyZ3VtZW50cykpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5saW5l
U2l6ZSk7CisgICAgICAgIHJldHVybiBzaXplb2YoU2NvcGVkQXJndW1lbnRzKTsKICAgICB9CiAg
ICAgCi0gICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gb3Zl
cmZsb3dBcmd1bWVudHNMZW5ndGgpCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShDaGVj
a2VkPHNpemVfdD4gY2FwYWNpdHkpCiAgICAgewotICAgICAgICByZXR1cm4gKG92ZXJmbG93U3Rv
cmFnZU9mZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBvdmVyZmxvd0Fy
Z3VtZW50c0xlbmd0aCkudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiAoc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikgKiAoY2FwYWNpdHkgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSku
dW5zYWZlR2V0KCk7CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlSGVh
ZGVyU2l6ZSgpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CisgICAg
CiBwcml2YXRlOgorICAgIHN0cnVjdCBTdG9yYWdlSGVhZGVyIHsKKyAgICAgICAgdW5zaWduZWQg
dG90YWxMZW5ndGg7CisgICAgICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUgaWYgbGVu
Z3RoLCBjYWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0aGUgb2Jq
ZWN0LgorICAgIH07CisgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVyZmxvd1N0
b3JhZ2UoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJh
cnJpZXI8VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcmZsb3dTdG9y
YWdlT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdG9yYWdlLmdldCgpLnVucG9pc29uZWQo
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VIZWFkZXIo
V3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fz
c2VydChzaXplb2YoU3RvcmFnZUhlYWRlcikgPD0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3du
PiksICJTdG9yYWdlSGVhZGVyIG5lZWRzIHRvIGJlIG5vIGJpZ2dlciB0aGFuIGEgSlNWYWx1ZSIp
OworICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxTdG9yYWdlSGVhZGVyKj4oc3RvcmFnZSAt
IDEpOworICAgIH0KKyAgICAKKyAgICBTdG9yYWdlSGVhZGVyJiBzdG9yYWdlSGVhZGVyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKG92ZXJmbG93U3RvcmFnZSgp
KTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBtX292ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxl
bmd0aCwgY2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9i
amVjdC4KLSAgICB1bnNpZ25lZCBtX3RvdGFsTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIGRlY2xh
cmVkIHBsdXMgb3ZlcmZsb3cgYXJndW1lbnRzLgotICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9u
PiBtX2NhbGxlZTsKLSAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFi
bGU7Ci0gICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgUG9pc29uZWRCYXJyaWVyID0gUG9pc29u
ZWRXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzUG9pc29uLCBUPjsKKyAgICAKKyAgICBQb2lz
b25lZEJhcnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CisgICAgUG9pc29uZWRCYXJyaWVyPFNj
b3BlZEFyZ3VtZW50c1RhYmxlPiBtX3RhYmxlOworICAgIFBvaXNvbmVkQmFycmllcjxKU0xleGlj
YWxFbnZpcm9ubWVudD4gbV9zY29wZTsKKyAgICAKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFBvaXNv
bmVkPFNjb3BlZEFyZ3VtZW50c1BvaXNvbiwgV3JpdGVCYXJyaWVyPFVua25vd24+Kj4+IG1fc3Rv
cmFnZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336242</attachid>
            <date>2018-03-21 15:41:51 -0700</date>
            <delta_ts>2018-03-21 18:38:43 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33707</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjk4MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGlu
ZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorICAgICAgICAKKyAg
ICAgICAgQWRkcyBhbm90aGVyIHN0cmVzcyB0ZXN0IG9mIHNjb3BlZCBhcmd1bWVudHMuCisKKyAg
ICAgICAgKiBzdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisKIDIwMTgtMDMtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2UgbmVlZCB0byBkbyBwcm9wZXIgYm9va2tlZXBpbmcgb2YgZXhpdE9LIHdoZW4g
aW5zZXJ0aW5nIGNvbnN0YW50cyB3aGVuIHNpbmtpbmcgTmV3QXJyYXlCdWZmZXIKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL3Njb3BlZC1hcmd1bWVudHMtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLXRlc3QuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9zdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKQoreworICAgIChmdW5jdGlvbigpIHsgcmV0dXJu
IGE7IH0pKCk7CisgICAgcmV0dXJuIFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c107Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHRbMF0gIT0gNDIpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigicmVzdWx0WzBdIGlzIG5vdCA0MjogIiArIHJlc3VsdFswXSk7CisgICAg
aWYgKHJlc3VsdFsxXVswXSAhPSA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJyZXN1bHRb
MV1bMF0gaXMgbm90IDQyOiAiICsgcmVzdWx0WzFdWzBdKTsKK30KKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTgtMDMtMjEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTY29wZWRBcmd1bWVudHMg
c2hvdWxkIGRvIHBvaXNvbmluZyBhbmQgaW5kZXggbWFza2luZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODYzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTWFyayBMYW0uCisgICAgICAgIAorICAgICAgICBUaGlzIG91dGxpbmVzIHRoZSBTY29wZWRB
cmd1bWVudHMgb3ZlcmZsb3cgc3RvcmFnZSBhbmQgYWRkcyBwb2lzb25pbmcuCisKKyAgICAgICAg
KiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFy
Z3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJn
dW1lbnRzOjpTY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisKIDIw
MTgtMDMtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBD
b2RlQmxvY2s6Omluc3RydWN0aW9ucygpW10gYW5kIENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQo
KSBpbnN0ZWFkIG9mIGRvaW5nIG93biBwb2ludGVyIG1hdGguCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMywxMiArNDAzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRo
R3VhcmQoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7CiAKKyAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVk
QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksCisgICAgICAgICAgICB2YWx1ZVJlZ3MucGF5
bG9hZEdQUigpKTsKKyAgICAgICAgaml0LnhvclB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkp
OwogICAgICAgICBmYWxsVGhyb3VnaC5hcHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNoVGVz
dDgoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb25aZXJvLAotICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFk
ZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92
ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkpKSk7CiAgICAgICAgIGppdC5sb2FkMzIoCi0gICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVkQXJndW1lbnRzOjpvZmZz
ZXRPZlRvdGFsTGVuZ3RoKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHZh
bHVlUmVncy5wYXlsb2FkR1BSKCksIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0
aEluU3RvcmFnZSgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BSKCkpOwogICAg
ICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVSZWdzKTsKICAg
ICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcxLDYgKzI3MSw4
IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEFycmF5TW9kZSh0eXBlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywg
QXJyYXk6OkFzSXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6Okdl
bmVyaWMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2KCkgJiYgaXMzMkJp
dCgpICYmIGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAgICAgICByZXR1cm4g
d2l0aFR5cGUodHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3
ICsyMTcsNyBAQCBzdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVudHNEdXJpCiAgICAg
RGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgKICAgICAg
ICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVjdHVy
ZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKIAotICAgIHJlc3VsdC0+Y2FsbGVlKCkuc2V0KHZtLCBy
ZXN1bHQsIGNhbGxlZSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNhbGxlZSk7CiAKICAg
ICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChpbmxpbmVDYWxs
RnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAgICAgRnJhbWUgZnJh
bWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzAxLDcgKzE3MDEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlRGly
CiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0ZSgK
ICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0
cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxlZSgp
LnNldCh2bSwgcmVzdWx0LCBjYWxsZWUpOworICAgIHJlc3VsdC0+c2V0Q2FsbGVlKHZtLCBjYWxs
ZWUpOwogICAgIAogICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMgPQogICAgICAgICBleGVjLT5yZWdp
c3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
IDogMCkgKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDg4LDYgKzY0ODgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjCiAjZW5kaWYKICAg
ICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDIo
dGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4TWFzayh0aGlzKTsKICAgICAKICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVy
dHkuZ3ByKCk7CkBAIC02NTAwLDE5ICs2NTAxLDI5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU2MKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIoKTsKKyAgICBH
UFJSZWcgaW5kZXhNYXNrUmVnID0gaW5kZXhNYXNrLmdwcigpOwogICAgIAogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChBcnJheU1vZGUo
QXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3JhcGgoKSwgbm9k
ZSwgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpKSk7CiAgICAg
CisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7Cisg
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXko
KSksIHJlc3VsdFJlZyk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3Rh
bExlbmd0aEluU3RvcmFnZSgpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAgCiAgICAgc3Bl
Y3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1ZVNvdXJjZSgp
LCBudWxscHRyLAotICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVu
Z3RoKCkpKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKSk7CisgICAgCisgICAgbV9qaXQuZW1pdFBy
ZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hSZWcsIGluZGV4TWFz
a1JlZyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNjcmF0Y2hSZWcpOwor
ICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5
KCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkxl
bmd0aCgpKSwgc2NyYXRjaDJSZWcpOwogICAgIApAQCAtNjUyMCw2ICs2NTMxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwogICAgIAogICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1l
bnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNjcmF0Y2gyUmVnKTsK
IAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNj
cmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwKQEAg
LTY1NDcsMTMgKzY1NTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFs
T25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dT
dG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3JhdGNoMlJlZywgTWFj
cm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdzKTsKICAgICBzcGVj
dWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwgbnVsbHB0ciwg
bV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywgcmVzdWx0UmVnKTsK
KyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQogCkBAIC02NjUw
LDggKzY2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSks
IHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAgICAgIFRydXN0ZWRJ
bW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgICAg
IG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkp
LCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zmc2V0T2ZMZW5n
dGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY3MCwxNCArNjY4Miwx
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAgICAgIAog
ICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFscmVhZHlD
aGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mU3Rv
cmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIo
U2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgICAgIAogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNW
YWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZk92ZXJy
b2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3NJblN0b3Jh
Z2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZU
b3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoSW5T
dG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50MzJSZXN1bHQocmVz
dWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24g
MjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBv
c2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2VuX1BhY2tldF9zY29w
ZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSBcCiAgICAg
bWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1RfT0ZGU0VUT0YoU2hh
ZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8oU2hhZG93Q2hpY2tl
bl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBh
Y2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfb3ZlcnJv
ZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygpKSBcCisg
ICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFy
Z3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBcCisgICAgbWFjcm8o
U2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRz
X3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpIFwKICAgICBtYWNy
byhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTY29wZSgp
KSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRBcmd1bWVudHM6Om9m
ZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCwg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAgICBtYWNybyhTY29w
ZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRP
ZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVuZ3RoLCBT
Y29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3JvKFN0cmlu
Z0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0xMzgsNyArMTM5LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTTGV4aWNhbEVu
dmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFi
bGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3BlcnR5TmFt
ZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBzaXplb2Yo
V3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdfZmliZXJz
LCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJpZXI8SlNT
dHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3JhZ2UsIFNj
b3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdlLCAwLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVmZmVyX2J1
ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFyYWN0ZXJz
OCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwgc2l6ZW9m
KFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
QjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgyLDEwICszNjgyLDEz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2NvcGVkQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQuYml0WG9yKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3BlZEFy
Z3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihTY29w
ZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGUoCiAgICAg
ICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAotICAgICAg
ICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihhcmd1bWVudHMs
IG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwotICAgICAgICAgICAg
c2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBzLlNjb3Bl
ZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8z
MihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19T
dG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9h
ZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfU3RvcmFnZV90
b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExWYWx1ZSBi
YXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwogICAgICAgICAg
ICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEp
KTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2Fk
UHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOworICAgICAgICAgICAg
c3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdEludFB0cihTY29wZWRB
cmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1
ZSB0b3RhbExlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKAorICAgICAgICAgICAgICAg
IHN0b3JhZ2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgpOwog
ICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIEV4b3RpY09iamVjdE1vZGUs
IG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
Ci0gICAgICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICBtX291dC5s
b2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0
aCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIHRvdGFsTGVu
Z3RoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSB0YWJsZSA9IG1fb3V0Lmxv
YWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAgICAgICAg
dGFibGUgPSBtX291dC5iaXRYb3IodGFibGUsIG1fb3V0LmNvbnN0SW50UHRyKFNjb3BlZEFyZ3Vt
ZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIG5h
bWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c1Rh
YmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbWVk
Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0zOTAyLDYgKzM5MTAsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhuYW1lZENh
c2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBzY29w
ZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2NvcGUpOwor
ICAgICAgICAgICAgc2NvcGUgPSBtX291dC5iaXRYb3Ioc2NvcGUsIG1fb3V0LmNvbnN0SW50UHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMuU2NvcGVk
QXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVHlw
ZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCkBAIC0zOTIwLDcgKzM5MzAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZsb3dDYXNlLCBjb250
aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRyZXNzID0gbV9vdXQuYmFz
ZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJmbG93
U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c19T
dG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgbV9vdXQuemVyb0V4dFB0
cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAgICAgICAgICAgTFZhbHVlIG92
ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICBzcGVjdWxh
dGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1plcm82NChv
dmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRK
U1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0KSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGkoSW50NjQs
IG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBwcmVj
aXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5ndGgpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYsNyArMzM2
LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAg
ICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKICAgICAgICAgICAgIERpcmVj
dEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCiAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50c1N0cnVj
dHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLSAgICAgICAgICAgIHJlc3VsdC0+Y2FsbGVlKCku
c2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgICAgICByZXN1bHQtPnNldENhbGxlZSh2
bSwgY2FsbGVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFsaXphdGlv
bi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEV4
aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVydGllcygp
W2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQoKSAhPSBB
cmd1bWVudFBMb2MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NDEsMjIg
KzE0NDEsMjggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNHZQogICAg
IEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAgICBSZWdpc3RlcklE
IHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CisgICAg
UmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2Vsc2UKICAgICBSZWdpc3RlcklEIGJhc2Ug
PSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAgICAgSlNWYWx1ZVJl
Z3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBSZWdpc3RlcklEIHNj
cmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7CisgICAgUmVn
aXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2VuZGlmCiAKICAgICBsb2FkOChBZGRyZXNzKGJh
c2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBiYWRUeXBl
ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihTY29w
ZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9y
RXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZU
b3RhbExlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0cihUcnVzdGVkSW1t
UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7CisgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKHNjcmF0
Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2UoKSkpKTsK
ICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRP
ZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihTY29wZWRBcmd1
bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEFkZHJlc3Moc2NyYXRj
aCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNoMik7CiAg
ICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBz
Y3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3Bl
ZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNz
KHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygpKSwgc2Ny
YXRjaCk7CiAgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGltZXNGb3Vy
KSwgc2NyYXRjaCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwgc2NyYXRj
aCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOwpAQCAtMTQ2NSwx
MCArMTQ3MSwxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50c0dlCiAg
ICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVydHksIHNjcmF0Y2gy
KTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChiYXNlLCBz
Y3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxvd1N0b3JhZ2VPZmZz
ZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMywgc2NyYXRj
aDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZF
bXB0eShyZXN1bHQpKTsKICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgCisgICAgbG9hZDMyKEFk
ZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3Rv
cmFnZSgpKSwgc2NyYXRjaCk7CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJv
cGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRjaDIsIHJlc3VsdC5w
YXlsb2FkR1BSKCkpOworICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0
QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBEaXJlY3RBcmd1
bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gY2Fw
YWNpdHk7IGktLTspCiAgICAgICAgIHN0b3JhZ2VbaV0uc2V0KHZtLCByZXN1bHQsIGV4ZWMtPmdl
dEFyZ3VtZW50VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxlZSgpLnNldCh2bSwg
cmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpKTsKKyAgICByZXN1
bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5qc0NhbGxlZSgpKSk7
CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEwLDkgKzExMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNpc2VJbmRleE1h
c2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0ciktPnNldCh2bSwgdGhp
cywgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlvbj4mIGNh
bGxlZSgpCisgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBt
X2NhbGxlZTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldENhbGxlZShWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKQorICAgIHsKKyAg
ICAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgfQogICAgIAogICAg
IFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1lbnRzT2Zmc2V0IG9m
ZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNBcmd1bWVu
dHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
R2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46OmdldE93
blByb3BlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAo
aWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSB7Ci0gICAgICAgICAgICBzbG90LnNl
dFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKSk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICB2KEpTV2ViQXNzZW1ibHlNb2R1bGUpIFwKICAgICB2KEpTV2Vi
QXNzZW1ibHlUYWJsZSkgXAogICAgIHYoTmF0aXZlQ29kZSkgXAorICAgIHYoU2NvcGVkQXJndW1l
bnRzKSBcCiAgICAgdihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpIFwKICAgICB2KFVubGlua2Vk
U291cmNlQ29kZSkgXAogICAgIHYoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcAko
cmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVk
QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTEgQEAgU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gU2NvcGVkQXJn
dW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCBudWxscHRyLCBu
dWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKIAotU2NvcGVk
QXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dW5zaWduZWQgdG90YWxMZW5ndGgpCitTY29wZWRBcmd1bWVudHM6OlNjb3BlZEFyZ3VtZW50cyhW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIHN0b3Jh
Z2UpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBtX292ZXJy
b2RlVGhpbmdzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCh0b3RhbExlbmd0aCkKKyAgICAs
IG1fc3RvcmFnZSh2bSwgdGhpcywgc3RvcmFnZSkKIHsKKyAgICBBU1NFUlQoIXN0b3JhZ2VIZWFk
ZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MpOwogfQogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6
ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFyZ3VtZW50
c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQpAQCAtNTcsMTAgKzU3
LDE3IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAgICAgICAg
b3ZlcmZsb3dMZW5ndGggPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKTsKICAgICBlbHNl
CiAgICAgICAgIG92ZXJmbG93TGVuZ3RoID0gMDsKKyAgICAKKyAgICB2b2lkKiByYXdTdG9yYWdl
UHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25WaXJ0dWFs
KAorICAgICAgICB2bSwgc3RvcmFnZVNpemUob3ZlcmZsb3dMZW5ndGgpLCBudWxscHRyLCBBbGxv
Y2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBz
dG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4ocmF3U3RvcmFnZVB0
cikgKyAxOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MgPSBmYWxz
ZTsKKyAgICBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoID0gdG90YWxMZW5ndGg7
CisgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAogICAgICAgICBOb3RO
dWxsLAotICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFwLCBhbGxv
Y2F0aW9uU2l6ZShvdmVyZmxvd0xlbmd0aCkpKQotICAgICAgICBTY29wZWRBcmd1bWVudHModm0s
IHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJn
dW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUs
IHN0b3JhZ2UpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGNhbGxlZSwgdGFibGUs
IHNjb3BlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDkgKzExNCwxMSBAQCB2b2lk
IFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5hcHBlbmQo
dGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9z
Y29wZSk7CiAgICAgCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fdG90YWxMZW5ndGggPiB0aGlzT2Jq
ZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSkgeworICAgIHZpc2l0b3IubWFya0F1eGlsaWFyeSgmdGhp
c09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+c3Rv
cmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoID4gdGhpc09iamVjdC0+bV90YWJsZS0+bGVuZ3RoKCkp
IHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoCi0gICAgICAgICAgICB0aGlzT2JqZWN0
LT5vdmVyZmxvd1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0aCAtIHRoaXNPYmpl
Y3QtPm1fdGFibGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92ZXJmbG93
U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkudG90YWxMZW5ndGggLSB0aGlz
T2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgR2VuZXJpY0FyZ3VtZW50
czxTY29wZWRBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpAQCAtMTIy
LDI0ICsxMzEsMjQgQEAgU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdAog
CiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mIHZtKQogewotICAgIFJF
TEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc3Rv
cmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKTsKICAgICAKICAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgcHV0
RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFsT2JqZWN0
KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgbV9vdmVycm9kZVRoaW5ncyA9
IHRydWU7CisgICAgc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzID0gdHJ1ZTsKIH0KIAog
dm9pZCBTY29wZWRBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZWNlc3NhcnkoVk0mIHZtKQog
ewotICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICBpZiAoIXN0b3JhZ2VIZWFkZXIoKS5v
dmVycm9kZVRoaW5ncykKICAgICAgICAgb3ZlcnJpZGVUaGluZ3Modm0pOwogfQogCiB2b2lkIFNj
b3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiB7Ci0gICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxMZW5ndGgpOworICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzdG9yYWdlSGVhZGVyKCkudG90
YWxMZW5ndGgpOwogICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7
CiAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKICAgICAgICAgbV90YWJsZS5zZXQodm0sIHRoaXMs
IG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9uIDIyOTgw
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIGxvb2t1
cHMuCiBjbGFzcyBTY29wZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2VuZXJpY0FyZ3VtZW50
czxTY29wZWRBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAgU2NvcGVkQXJndW1lbnRzKFZNJiwg
U3RydWN0dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIFNjb3BlZEFyZ3VtZW50cyhW
TSYsIFN0cnVjdHVyZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSk7CiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJndW1lbnRz
VGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwogCiBwdWJsaWM6CkBAIC02NywyNSArNjcs
MjYgQEAgcHVibGljOgogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgICAgICByZXR1cm4gc3Rv
cmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoOwogICAgIH0KICAgICAKICAgICB1aW50MzJfdCBsZW5n
dGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQorICAgICAgICBp
ZiAoVU5MSUtFTFkoc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKSkKICAgICAgICAgICAg
IHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQzMihleGVj
KTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAgfQogICAgIAogICAgIGJv
b2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYg
KGkgPj0gbV90b3RhbExlbmd0aCkKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9y
YWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2VIZWFkZXIo
c3RvcmFnZSkudG90YWxMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChp
IDwgbmFtZWRMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gISFtX3RhYmxlLT5nZXQoaSk7Ci0g
ICAgICAgIHJldHVybiAhIW92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0uZ2V0KCk7
CisgICAgICAgIHJldHVybiAhIXN0b3JhZ2VbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKICAgICB9
CiAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBpKSBjb25zdApAQCAt
OTYsMjggKzk3LDMyIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2tseSh1aW50
MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
Piogc3RvcmFnZSA9IG92ZXJmbG93U3RvcmFnZSgpOworICAgICAgICB1bnNpZ25lZCB0b3RhbExl
bmd0aCA9IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGg7CiAgICAgICAgIHVuc2ln
bmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChpIDwgbmFt
ZWRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxl
LT5nZXQoaSkpLmdldCgpOwotICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9yYWdlKClbaSAtIG5h
bWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRy
KGksIHRvdGFsTGVuZ3RoLCAmbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQoaSkpKS0+
Z2V0KCk7CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIHRvdGFsTGVuZ3Ro
LCBzdG9yYWdlICsgKGkgLSBuYW1lZExlbmd0aCkpLT5nZXQoKTsKICAgICB9CiAKICAgICB2b2lk
IHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUpCiAgICAg
ewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBlZEFyZ3Vt
ZW50KGkpKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0gb3ZlcmZs
b3dTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gc3RvcmFnZUhlYWRl
cihzdG9yYWdlKS50b3RhbExlbmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5ndGggPSBt
X3RhYmxlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKLSAgICAgICAg
ICAgIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5zZXQodm0sIG1fc2NvcGUu
Z2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxM
ZW5ndGgsICZtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkpLT5zZXQodm0sIG1f
c2NvcGUuZ2V0KCksIHZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3ZlcmZsb3dT
dG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAg
ICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3JhZ2UgKyAoaSAtIG5h
bWVkTGVuZ3RoKSktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIFdyaXRlQmFy
cmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUoKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgICAgICByZXR1cm4gbV9jYWxsZWUuZ2V0
KCk7CiAgICAgfQogCi0gICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0IHsgcmV0dXJuIG1f
b3ZlcnJvZGVUaGluZ3M7IH0KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3QgeyByZXR1
cm4gc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzOyB9CiAgICAgdm9pZCBvdmVycmlkZVRo
aW5ncyhWTSYpOwogICAgIHZvaWQgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2FyeShWTSYpOwogICAg
IHZvaWQgdW5tYXBBcmd1bWVudChWTSYsIHVpbnQzMl90IGluZGV4KTsKQEAgLTE0MywzMiArMTQ4
LDU1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICAKLSAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSB7IHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2RlVGhpbmdzKTsgfQotICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgpOyB9CisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1l
bnRzLCBtX3N0b3JhZ2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk92ZXJyb2Rl
VGhpbmdzSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VIZWFkZXIs
IG92ZXJyb2RlVGhpbmdzKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoSW5TdG9yYWdlKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VIZWFkZXIsIHRvdGFsTGVuZ3RoKSAtIHNpemVvZihXcml0
ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRhYmxl
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJsZSk7IH0K
ICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3Njb3BlKTsgfQogICAgIAotICAgIHN0YXRpYyBzaXpl
X3Qgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25T
aXplKHNpemVfdCBpbmxpbmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9mKFNjb3Bl
ZEFyZ3VtZW50cykpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5saW5lU2l6ZSk7CisgICAg
ICAgIHJldHVybiBzaXplb2YoU2NvcGVkQXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0gICAgc3Rh
dGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gb3ZlcmZsb3dBcmd1bWVu
dHNMZW5ndGgpCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShDaGVja2VkPHNpemVfdD4g
Y2FwYWNpdHkpCiAgICAgewotICAgICAgICByZXR1cm4gKG92ZXJmbG93U3RvcmFnZU9mZnNldCgp
ICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBvdmVyZmxvd0FyZ3VtZW50c0xlbmd0
aCkudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiAoc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgKiAoY2FwYWNpdHkgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSkudW5zYWZlR2V0KCk7
CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlSGVhZGVyU2l6ZSgpIHsg
cmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CisgICAgCiBwcml2YXRlOgor
ICAgIHN0cnVjdCBTdG9yYWdlSGVhZGVyIHsKKyAgICAgICAgdW5zaWduZWQgdG90YWxMZW5ndGg7
CisgICAgICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUgaWYgbGVuZ3RoLCBjYWxsZWUs
IGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0aGUgb2JqZWN0LgorICAgIH07
CisgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVyZmxvd1N0b3JhZ2UoKSBjb25z
dAogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkp
OworICAgICAgICByZXR1cm4gbV9zdG9yYWdlLmdldCgpLnVucG9pc29uZWQoKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VIZWFkZXIoV3JpdGVCYXJyaWVy
PFVua25vd24+KiBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2Yo
U3RvcmFnZUhlYWRlcikgPD0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksICJTdG9yYWdl
SGVhZGVyIG5lZWRzIHRvIGJlIG5vIGJpZ2dlciB0aGFuIGEgSlNWYWx1ZSIpOworICAgICAgICBy
ZXR1cm4gKmJpdHdpc2VfY2FzdDxTdG9yYWdlSGVhZGVyKj4oc3RvcmFnZSAtIDEpOworICAgIH0K
KyAgICAKKyAgICBTdG9yYWdlSGVhZGVyJiBzdG9yYWdlSGVhZGVyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKG92ZXJmbG93U3RvcmFnZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBtX292ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwgY2FsbGVl
LCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4KLSAgICB1
bnNpZ25lZCBtX3RvdGFsTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIGRlY2xhcmVkIHBsdXMgb3Zl
cmZsb3cgYXJndW1lbnRzLgotICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2NhbGxlZTsK
LSAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgdXNpbmcgUG9pc29uZWRCYXJyaWVyID0gUG9pc29uZWRXcml0ZUJhcnJp
ZXI8U2NvcGVkQXJndW1lbnRzUG9pc29uLCBUPjsKKyAgICAKKyAgICBQb2lzb25lZEJhcnJpZXI8
SlNGdW5jdGlvbj4gbV9jYWxsZWU7CisgICAgUG9pc29uZWRCYXJyaWVyPFNjb3BlZEFyZ3VtZW50
c1RhYmxlPiBtX3RhYmxlOworICAgIFBvaXNvbmVkQmFycmllcjxKU0xleGljYWxFbnZpcm9ubWVu
dD4gbV9zY29wZTsKKyAgICAKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFBvaXNvbmVkPFNjb3BlZEFy
Z3VtZW50c1BvaXNvbiwgV3JpdGVCYXJyaWVyPFVua25vd24+Kj4+IG1fc3RvcmFnZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>
<flag name="commit-queue"
          id="354781"
          type_id="3"
          status="-"
          setter="ews-watchlist"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336254</attachid>
            <date>2018-03-21 18:38:43 -0700</date>
            <delta_ts>2018-03-21 18:38:43 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33998</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjk4MjgpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDE4LTAzLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzIHNob3VsZCBkbyBwb2lzb25pbmcgYW5kIGlu
ZGV4IG1hc2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4Mzg2MworCisgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgTGFtLgorICAgICAgICAKKyAg
ICAgICAgQWRkcyBhbm90aGVyIHN0cmVzcyB0ZXN0IG9mIHNjb3BlZCBhcmd1bWVudHMuCisKKyAg
ICAgICAgKiBzdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisKIDIwMTgtMDMtMjAgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2UgbmVlZCB0byBkbyBwcm9wZXIgYm9va2tlZXBpbmcgb2YgZXhpdE9LIHdoZW4g
aW5zZXJ0aW5nIGNvbnN0YW50cyB3aGVuIHNpbmtpbmcgTmV3QXJyYXlCdWZmZXIKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL3Njb3BlZC1hcmd1bWVudHMtdGVzdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rl
c3RzL3N0cmVzcy9zY29wZWQtYXJndW1lbnRzLXRlc3QuanMJKG5vbmV4aXN0ZW50KQorKysgSlNU
ZXN0cy9zdHJlc3Mvc2NvcGVkLWFyZ3VtZW50cy10ZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhKQoreworICAgIChmdW5jdGlvbigpIHsgcmV0dXJu
IGE7IH0pKCk7CisgICAgcmV0dXJuIFthcmd1bWVudHNbMF0sIGFyZ3VtZW50c107Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZh
ciByZXN1bHQgPSBmb28oNDIpOworICAgIGlmIChyZXN1bHRbMF0gIT0gNDIpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigicmVzdWx0WzBdIGlzIG5vdCA0MjogIiArIHJlc3VsdFswXSk7CisgICAg
aWYgKHJlc3VsdFsxXVswXSAhPSA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJyZXN1bHRb
MV1bMF0gaXMgbm90IDQyOiAiICsgcmVzdWx0WzFdWzBdKTsKK30KKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjk4MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTgtMDMtMjEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBTY29wZWRBcmd1bWVudHMg
c2hvdWxkIGRvIHBvaXNvbmluZyBhbmQgaW5kZXggbWFza2luZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgzODYzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTWFyayBMYW0uCisgICAgICAgIAorICAgICAgICBUaGlzIG91dGxpbmVzIHRoZSBTY29wZWRB
cmd1bWVudHMgb3ZlcmZsb3cgc3RvcmFnZSBhbmQgYWRkcyBwb2lzb25pbmcuCisKKyAgICAgICAg
KiBieXRlY29kZS9BY2Nlc3NDYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNzQ2FzZTo6Z2Vu
ZXJhdGVXaXRoR3VhcmQpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2NvcGVk
QXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAqIGpp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNjb3BlZEFy
Z3VtZW50c0dldEJ5VmFsKToKKyAgICAgICAgKiBydW50aW1lL0pTQ1BvaXNvbi5oOgorICAgICAg
ICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6U2NvcGVkQXJn
dW1lbnRzOjpTY29wZWRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6
OmNyZWF0ZVVuaW5pdGlhbGl6ZWQpOgorICAgICAgICAoSlNDOjpTY29wZWRBcmd1bWVudHM6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmg6CisKIDIw
MTgtMDMtMjEgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBD
b2RlQmxvY2s6Omluc3RydWN0aW9ucygpW10gYW5kIENvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQo
KSBpbnN0ZWFkIG9mIGRvaW5nIG93biBwb2ludGVyIG1hdGguCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMywxMiArNDAzLDE2IEBAIHZvaWQgQWNjZXNzQ2FzZTo6Z2VuZXJhdGVXaXRo
R3VhcmQoCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKGJhc2VHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAogICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKFNjb3BlZEFyZ3VtZW50c1R5cGUpKSk7CiAKKyAgICAgICAgaml0Lmxv
YWRQdHIoCisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwgU2NvcGVk
QXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksCisgICAgICAgICAgICBzY3JhdGNoR1BSKTsK
KyAgICAgICAgaml0LnhvclB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoU2NvcGVkQXJn
dW1lbnRzUG9pc29uOjprZXkoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBmYWxsVGhyb3VnaC5h
cHBlbmQoCiAgICAgICAgICAgICBqaXQuYnJhbmNoVGVzdDgoCiAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpOb25aZXJvLAotICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVz
cyhiYXNlR1BSLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSkpKTsK
KyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU2NvcGVk
QXJndW1lbnRzOjpvZmZzZXRPZk92ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkpKSk7CiAgICAgICAg
IGppdC5sb2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoYmFzZUdQUiwg
U2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpLAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZU
b3RhbExlbmd0aEluU3RvcmFnZSgpKSwKICAgICAgICAgICAgIHZhbHVlUmVncy5wYXlsb2FkR1BS
KCkpOwogICAgICAgICBqaXQuYm94SW50MzIodmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgdmFsdWVS
ZWdzKTsKICAgICAgICAgc3RhdGUuc3VjY2VlZCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcx
LDYgKzI3MSw4IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OnJlZmluZSgKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRP
ZkJvdW5kcywgQXJyYXk6OkFzSXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUo
QXJyYXk6OkdlbmVyaWMpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzWDg2KCkg
JiYgaXMzMkJpdCgpICYmIGlzU2NvcGVkQXJndW1lbnRzU3BlY3VsYXRpb24oYmFzZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAgICAg
ICByZXR1cm4gd2l0aFR5cGUodHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNyw3ICsyMTcsNyBAQCBzdGF0aWMgSlNDZWxsKiBjcmVhdGVEaXJlY3RBcmd1bWVudHNE
dXJpCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6OmNyZWF0
ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50
c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKIAotICAgIHJlc3VsdC0+Y2FsbGVlKCku
c2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgcmVzdWx0LT5zZXRDYWxsZWUodm0sIGNhbGxl
ZSk7CiAKICAgICB2b2lkKiBmcmFtZUJhc2UgPSBjb250ZXh0LmZwPFJlZ2lzdGVyKj4oKSArIChp
bmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAgICAg
RnJhbWUgZnJhbWUoZnJhbWVCYXNlLCBjb250ZXh0LnN0YWNrKCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzAxLDcgKzE3MDEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlRGlyCiAgICAgRGlyZWN0QXJndW1lbnRzKiByZXN1bHQgPSBEaXJlY3RBcmd1bWVudHM6
OmNyZWF0ZSgKICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFy
Z3VtZW50c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKICAgICAKLSAgICByZXN1bHQt
PmNhbGxlZSgpLnNldCh2bSwgcmVzdWx0LCBjYWxsZWUpOworICAgIHJlc3VsdC0+c2V0Q2FsbGVl
KHZtLCBjYWxsZWUpOwogICAgIAogICAgIFJlZ2lzdGVyKiBhcmd1bWVudHMgPQogICAgICAgICBl
eGVjLT5yZWdpc3RlcnMoKSArIChpbmxpbmVDYWxsRnJhbWUgPyBpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0IDogMCkgKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDg4
LDYgKzY0ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblNjCiAj
ZW5kaWYKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkg
c2NyYXRjaDIodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IGluZGV4TWFzayh0aGlzKTsKICAgICAK
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CkBAIC02NTAwLDE5ICs2NTAxLDI5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU2MKICNlbmRpZgogICAgIEdQUlJlZyBzY3JhdGNoUmVn
ID0gc2NyYXRjaC5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSBzY3JhdGNoMi5ncHIo
KTsKKyAgICBHUFJSZWcgaW5kZXhNYXNrUmVnID0gaW5kZXhNYXNrLmdwcigpOwogICAgIAogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEFTU0VSVChB
cnJheU1vZGUoQXJyYXk6OlNjb3BlZEFyZ3VtZW50cykuYWxyZWFkeUNoZWNrZWQobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgbV9zdGF0ZS5mb3JOb2RlKG1fZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkp
KSk7CiAgICAgCisgICAgbV9qaXQubG9hZFB0cigKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3Vs
dFJlZyk7CisgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9p
c29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgCisgICAgbV9qaXQubG9hZDMyKAorICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSwKKyAgICAgICAgc2NyYXRjaFJlZyk7CisgICAg
CiAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgSlNWYWx1
ZVNvdXJjZSgpLCBudWxscHRyLAotICAgICAgICBtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLAotICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRP
ZlRvdGFsTGVuZ3RoKCkpKSk7CisgICAgICAgIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBzY3JhdGNoUmVnKSk7CisgICAgCisgICAgbV9q
aXQuZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNrMzIocHJvcGVydHlSZWcsIHNjcmF0Y2hSZWcs
IGluZGV4TWFza1JlZyk7CiAgICAgCiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVGFibGUoKSksIHNjcmF0
Y2hSZWcpOworICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1Bv
aXNvbjo6a2V5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkxlbmd0aCgpKSwgc2NyYXRjaDJSZWcpOwogICAgIApAQCAtNjUyMCw2ICs2NTMxLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TYwogICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgc2NyYXRjaDJSZWcpOwogICAg
IAogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2Nv
cGVkQXJndW1lbnRzOjpvZmZzZXRPZlNjb3BlKCkpLCBzY3JhdGNoMlJlZyk7CisgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHNjcmF0
Y2gyUmVnKTsKIAogICAgIG1faml0LmxvYWRQdHIoCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHNjcmF0Y2hSZWcsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50
cygpKSwKQEAgLTY1NDcsMTMgKzY1NTksMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEJ5VmFsT25TYwogICAgIAogICAgIG1faml0LmxvYWRWYWx1ZSgKICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkJhc2VJbmRleCgKLSAgICAgICAgICAgIGJhc2VSZWcsIHNjcmF0Y2gyUmVnLCBN
YWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwKLSAgICAgICAgICAgIFNjb3BlZEFyZ3VtZW50czo6
b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVzdWx0UmVnLCBzY3JhdGNo
MlJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLAogICAgICAgICByZXN1bHRSZWdzKTsK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEV4b3RpY09iamVjdE1vZGUsIEpTVmFsdWVTb3VyY2UoKSwg
bnVsbHB0ciwgbV9qaXQuYnJhbmNoSWZFbXB0eShyZXN1bHRSZWdzKSk7CiAgICAgCiAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CiAgICAgCisgICAgbV9qaXQuYW5kUHRyKGluZGV4TWFza1JlZywgcmVz
dWx0UmVnKTsKKyAgICAKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogfQog
CkBAIC02NjUwLDggKzY2NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJy
YXlMZW5nCiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgRGlyZWN0QXJndW1lbnRzOjpvZmZzZXRPZlN0
b3JhZ2UoKSksIHJlc3VsdFJlZyk7Ci0gICAgICAgIG1faml0LnhvclB0cigKLSAgICAgICAgICAg
IFRydXN0ZWRJbW1QdHIoRGlyZWN0QXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7
CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tUHRyKERpcmVjdEFyZ3VtZW50c1BvaXNv
bjo6a2V5KCkpLCByZXN1bHRSZWcpOwogICAgICAgICBtX2ppdC5sb2FkMzIoCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWcsIERpcmVjdEFyZ3VtZW50czo6b2Zm
c2V0T2ZMZW5ndGhJblN0b3JhZ2UoKSksIHJlc3VsdFJlZyk7CiAgICAgICAgIApAQCAtNjY2MCw3
ICs2NjcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEFycmF5TGVuZwogICAg
IH0KICAgICBjYXNlIEFycmF5OjpTY29wZWRBcmd1bWVudHM6IHsKICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcywgUmV1c2UsIGJhc2UpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVzdWx0UmVnID0gcmVzdWx0LmdwcigpOwpAQCAtNjY3MCwxNCAr
NjY4MiwxOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QXJyYXlMZW5nCiAgICAg
ICAgIAogICAgICAgICBBU1NFUlQoQXJyYXlNb2RlKEFycmF5OjpTY29wZWRBcmd1bWVudHMpLmFs
cmVhZHlDaGVja2VkKG1faml0LmdyYXBoKCksIG5vZGUsIG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkpKTsKICAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNl
dE9mU3RvcmFnZSgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJ
bW1QdHIoU2NvcGVkQXJndW1lbnRzUG9pc29uOjprZXkoKSksIHJlc3VsdFJlZyk7CisgICAgICAg
IAogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9k
ZSwgSlNWYWx1ZVNvdXJjZSgpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDgoCiAg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCi0gICAgICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRP
Zk92ZXJyb2RlVGhpbmdzKCkpKSk7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0UmVnLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mT3ZlcnJvZGVUaGluZ3NJ
blN0b3JhZ2UoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMigKLSAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZUb3RhbExlbmd0aCgpKSwgcmVzdWx0UmVnKTsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHJlc3VsdFJlZywgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVu
Z3RoSW5TdG9yYWdlKCkpLCByZXN1bHRSZWcpOwogICAgICAgICAKICAgICAgICAgaW50MzJSZXN1
bHQocmVzdWx0UmVnLCBub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2
aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxMCArMTAyLDExIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTaGFkb3dDaGlja2VuX1BhY2tl
dF9zY29wZSwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNrZW46OlBhY2tldCwgc2NvcGUpKSBc
CiAgICAgbWFjcm8oU2hhZG93Q2hpY2tlbl9QYWNrZXRfY29kZUJsb2NrLCBPQkpFQ1RfT0ZGU0VU
T0YoU2hhZG93Q2hpY2tlbjo6UGFja2V0LCBjb2RlQmxvY2spKSBcCiAgICAgbWFjcm8oU2hhZG93
Q2hpY2tlbl9QYWNrZXRfY2FsbFNpdGVJbmRleCwgT0JKRUNUX09GRlNFVE9GKFNoYWRvd0NoaWNr
ZW46OlBhY2tldCwgY2FsbFNpdGVJbmRleCkpIFwKLSAgICBtYWNybyhTY29wZWRBcmd1bWVudHNf
b3ZlcnJvZGVUaGluZ3MsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5ncygp
KSBcCisgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2Vfb3ZlcnJvZGVUaGluZ3MsIFNj
b3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZPdmVycm9kZVRoaW5nc0luU3RvcmFnZSgpKSBcCisgICAg
bWFjcm8oU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5ndGgsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZUb3RhbExlbmd0aEluU3RvcmFnZSgpKSBcCisgICAgbWFjcm8oU2NvcGVkQXJn
dW1lbnRzX3N0b3JhZ2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZTdG9yYWdlKCkpIFwKICAg
ICBtYWNybyhTY29wZWRBcmd1bWVudHNfc2NvcGUsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZT
Y29wZSgpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzX3RhYmxlLCBTY29wZWRBcmd1bWVu
dHM6Om9mZnNldE9mVGFibGUoKSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c190b3RhbExl
bmd0aCwgU2NvcGVkQXJndW1lbnRzOjpvZmZzZXRPZlRvdGFsTGVuZ3RoKCkpIFwKICAgICBtYWNy
byhTY29wZWRBcmd1bWVudHNUYWJsZV9hcmd1bWVudHMsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpv
ZmZzZXRPZkFyZ3VtZW50cygpKSBcCiAgICAgbWFjcm8oU2NvcGVkQXJndW1lbnRzVGFibGVfbGVu
Z3RoLCBTY29wZWRBcmd1bWVudHNUYWJsZTo6b2Zmc2V0T2ZMZW5ndGgoKSkgXAogICAgIG1hY3Jv
KFN0cmluZ0ltcGxfZGF0YSwgU3RyaW5nSW1wbDo6ZGF0YU9mZnNldCgpKSBcCkBAIC0xMzgsNyAr
MTM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKEpTTGV4
aWNhbEVudmlyb25tZW50X3ZhcmlhYmxlcywgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9m
VmFyaWFibGVzKCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKICAgICBtYWNybyhKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3JfY2FjaGVkUHJvcGVydHlOYW1lc1ZlY3RvckNvbnRlbnRzLCAwLCBz
aXplb2YoV3JpdGVCYXJyaWVyPEpTU3RyaW5nPikpIFwKICAgICBtYWNybyhKU1JvcGVTdHJpbmdf
ZmliZXJzLCBKU1JvcGVTdHJpbmc6Om9mZnNldE9mRmliZXJzKCksIHNpemVvZihXcml0ZUJhcnJp
ZXI8SlNTdHJpbmc+KSkgXAotICAgIG1hY3JvKFNjb3BlZEFyZ3VtZW50c19vdmVyZmxvd1N0b3Jh
Z2UsIFNjb3BlZEFyZ3VtZW50czo6b3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNv
ZGVkSlNWYWx1ZSkpIFwKKyAgICBtYWNybyhTY29wZWRBcmd1bWVudHNfU3RvcmFnZV9zdG9yYWdl
LCAwLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCiAgICAgbWFjcm8oV3JpdGVCYXJyaWVyQnVm
ZmVyX2J1ZmZlckNvbnRlbnRzLCAwLCBzaXplb2YoSlNDZWxsKikpIFwKICAgICBtYWNybyhjaGFy
YWN0ZXJzOCwgMCwgc2l6ZW9mKExDaGFyKSkgXAogICAgIG1hY3JvKGNoYXJhY3RlcnMxNiwgMCwg
c2l6ZW9mKFVDaGFyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjgyLDEwICsz
NjgyLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcnJheTo6U2Nv
cGVkQXJndW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgYXJndW1lbnRzID0gbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSBzdG9yYWdlID0gbV9vdXQuYml0
WG9yKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoYXJndW1lbnRzLCBtX2hlYXBzLlNj
b3BlZEFyZ3VtZW50c19zdG9yYWdlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0
cihTY29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CiAgICAgICAgICAgICBzcGVjdWxhdGUo
CiAgICAgICAgICAgICAgICAgRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLAot
ICAgICAgICAgICAgICAgIG1fb3V0Lm5vdFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihhcmd1
bWVudHMsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292ZXJyb2RlVGhpbmdzKSkpOwotICAgICAg
ICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyTm9uTmVnYXRpdmUoYXJndW1lbnRzLCBtX2hlYXBz
LlNjb3BlZEFyZ3VtZW50c190b3RhbExlbmd0aCkpOworICAgICAgICAgICAgICAgIG1fb3V0Lm5v
dFplcm8zMihtX291dC5sb2FkOFplcm9FeHQzMihzdG9yYWdlLCBtX2hlYXBzLlNjb3BlZEFyZ3Vt
ZW50c19TdG9yYWdlX292ZXJyb2RlVGhpbmdzKSkpOworICAgICAgICAgICAgc2V0SW50MzIobV9v
dXQubG9hZDMyTm9uTmVnYXRpdmUoc3RvcmFnZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfU3Rv
cmFnZV90b3RhbExlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTM4ODMsMTMgKzM4ODYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIExW
YWx1ZSBiYXNlID0gbG93Q2VsbChtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkpOwogICAg
ICAgICAgICAgTFZhbHVlIGluZGV4ID0gbG93SW50MzIobV9ncmFwaC52YXJBcmdDaGlsZChtX25v
ZGUsIDEpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291
dC5sb2FkUHRyKGJhc2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX3N0b3JhZ2UpOworICAgICAg
ICAgICAgc3RvcmFnZSA9IG1fb3V0LmJpdFhvcihzdG9yYWdlLCBtX291dC5jb25zdEludFB0cihT
Y29wZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IExWYWx1ZSB0b3RhbExlbmd0aCA9IG1fb3V0LmxvYWQzMk5vbk5lZ2F0aXZlKAorICAgICAgICAg
ICAgICAgIHN0b3JhZ2UsIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX1N0b3JhZ2VfdG90YWxMZW5n
dGgpOwogICAgICAgICAgICAgc3BlY3VsYXRlKAogICAgICAgICAgICAgICAgIEV4b3RpY09iamVj
dE1vZGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwKLSAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9y
RXF1YWwoCi0gICAgICAgICAgICAgICAgICAgIGluZGV4LAotICAgICAgICAgICAgICAgICAgICBt
X291dC5sb2FkMzJOb25OZWdhdGl2ZShiYXNlLCBtX2hlYXBzLlNjb3BlZEFyZ3VtZW50c190b3Rh
bExlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoaW5kZXgsIHRv
dGFsTGVuZ3RoKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSB0YWJsZSA9IG1f
b3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfdGFibGUpOworICAgICAg
ICAgICAgdGFibGUgPSBtX291dC5iaXRYb3IodGFibGUsIG1fb3V0LmNvbnN0SW50UHRyKFNjb3Bl
ZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgTFZh
bHVlIG5hbWVkTGVuZ3RoID0gbV9vdXQubG9hZDMyKHRhYmxlLCBtX2hlYXBzLlNjb3BlZEFyZ3Vt
ZW50c1RhYmxlX2xlbmd0aCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IG5hbWVkQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CkBAIC0zOTAyLDYgKzM5MTAsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhu
YW1lZENhc2UsIG92ZXJmbG93Q2FzZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1
ZSBzY29wZSA9IG1fb3V0LmxvYWRQdHIoYmFzZSwgbV9oZWFwcy5TY29wZWRBcmd1bWVudHNfc2Nv
cGUpOworICAgICAgICAgICAgc2NvcGUgPSBtX291dC5iaXRYb3Ioc2NvcGUsIG1fb3V0LmNvbnN0
SW50UHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpKTsKKyAgICAgICAgICAgIAogICAg
ICAgICAgICAgTFZhbHVlIGFyZ3VtZW50cyA9IG1fb3V0LmxvYWRQdHIodGFibGUsIG1faGVhcHMu
U2NvcGVkQXJndW1lbnRzVGFibGVfYXJndW1lbnRzKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgVHlwZWRQb2ludGVyIGFkZHJlc3MgPSBtX291dC5iYXNlSW5kZXgoCkBAIC0zOTIwLDcgKzM5
MzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ob3ZlcmZsb3dDYXNl
LCBjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRyZXNzID0gbV9v
dXQuYmFzZUluZGV4KAotICAgICAgICAgICAgICAgIG1faGVhcHMuU2NvcGVkQXJndW1lbnRzX292
ZXJmbG93U3RvcmFnZSwgYmFzZSwKKyAgICAgICAgICAgICAgICBtX2hlYXBzLlNjb3BlZEFyZ3Vt
ZW50c19TdG9yYWdlX3N0b3JhZ2UsIHN0b3JhZ2UsCiAgICAgICAgICAgICAgICAgbV9vdXQuemVy
b0V4dFB0cihtX291dC5zdWIoaW5kZXgsIG5hbWVkTGVuZ3RoKSkpOwogICAgICAgICAgICAgTFZh
bHVlIG92ZXJmbG93VmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzcyk7CiAgICAgICAgICAgICBz
cGVjdWxhdGUoRXhvdGljT2JqZWN0TW9kZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5pc1pl
cm82NChvdmVyZmxvd1ZhbHVlKSk7CkBAIC0zOTI4LDcgKzM5MzgsMTEgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbmFtZWRSZXN1bHQsIG92ZXJmbG93UmVzdWx0
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5waGko
SW50NjQsIG5hbWVkUmVzdWx0LCBvdmVyZmxvd1Jlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQg
PSBwcmVjaXNlSW5kZXhNYXNrMzIocmVzdWx0LCBpbmRleCwgdG90YWxMZW5ndGgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzZXRKU1ZhbHVlKHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzYs
NyArMzM2LDcgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAg
ICAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkgPSBzdGQ6Om1heChsZW5ndGgsIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihjb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSAtIDEpKTsKICAgICAgICAgICAg
IERpcmVjdEFyZ3VtZW50cyogcmVzdWx0ID0gRGlyZWN0QXJndW1lbnRzOjpjcmVhdGUoCiAgICAg
ICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRpcmVjdEFyZ3VtZW50
c1N0cnVjdHVyZSgpLCBsZW5ndGgsIGNhcGFjaXR5KTsKLSAgICAgICAgICAgIHJlc3VsdC0+Y2Fs
bGVlKCkuc2V0KHZtLCByZXN1bHQsIGNhbGxlZSk7CisgICAgICAgICAgICByZXN1bHQtPnNldENh
bGxlZSh2bSwgY2FsbGVlKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1hdGVyaWFs
aXphdGlvbi0+cHJvcGVydGllcygpLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNv
bnN0IEV4aXRQcm9wZXJ0eVZhbHVlJiBwcm9wZXJ0eSA9IG1hdGVyaWFsaXphdGlvbi0+cHJvcGVy
dGllcygpW2ldOwogICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5sb2NhdGlvbigpLmtpbmQo
KSAhPSBBcmd1bWVudFBMb2MpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0
NDEsMjIgKzE0NDEsMjggQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRTY29wZWRBcmd1bWVudHNH
ZQogICAgIEpTVmFsdWVSZWdzIHJlc3VsdCA9IEpTVmFsdWVSZWdzKHJlZ1QwKTsKICAgICBSZWdp
c3RlcklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7
CisgICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2Vsc2UKICAgICBSZWdpc3RlcklE
IGJhc2UgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHByb3BlcnR5ID0gcmVnVDI7CiAgICAgSlNW
YWx1ZVJlZ3MgcmVzdWx0ID0gSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKTsKICAgICBSZWdpc3Rl
cklEIHNjcmF0Y2ggPSByZWdUMzsKICAgICBSZWdpc3RlcklEIHNjcmF0Y2gyID0gcmVnVDQ7Cisg
ICAgUmVnaXN0ZXJJRCBzY3JhdGNoMyA9IHJlZ1Q1OwogI2VuZGlmCiAKICAgICBsb2FkOChBZGRy
ZXNzKGJhc2UsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBzY3JhdGNoKTsKICAgICBi
YWRUeXBlID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0z
MihTY29wZWRBcmd1bWVudHNUeXBlKSk7Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihB
Ym92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50czo6b2Zm
c2V0T2ZUb3RhbExlbmd0aCgpKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhiYXNlLCBTY29wZWRB
cmd1bWVudHM6Om9mZnNldE9mU3RvcmFnZSgpKSwgc2NyYXRjaDMpOworICAgIHhvclB0cihUcnVz
dGVkSW1tUHRyKFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMyk7CisgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3BlcnR5LCBBZGRyZXNz
KHNjcmF0Y2gzLCBTY29wZWRBcmd1bWVudHM6Om9mZnNldE9mVG90YWxMZW5ndGhJblN0b3JhZ2Uo
KSkpKTsKICAgICAKICAgICBsb2FkUHRyKEFkZHJlc3MoYmFzZSwgU2NvcGVkQXJndW1lbnRzOjpv
ZmZzZXRPZlRhYmxlKCkpLCBzY3JhdGNoKTsKKyAgICB4b3JQdHIoVHJ1c3RlZEltbVB0cihTY29w
ZWRBcmd1bWVudHNQb2lzb246OmtleSgpKSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
c2NyYXRjaCwgU2NvcGVkQXJndW1lbnRzVGFibGU6Om9mZnNldE9mTGVuZ3RoKCkpLCBzY3JhdGNo
Mik7CiAgICAgSnVtcCBvdmVyZmxvd0Nhc2UgPSBicmFuY2gzMihBYm92ZU9yRXF1YWwsIHByb3Bl
cnR5LCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihBZGRyZXNzKGJhc2UsIFNjb3BlZEFyZ3VtZW50
czo6b2Zmc2V0T2ZTY29wZSgpKSwgc2NyYXRjaDIpOworICAgIHhvclB0cihUcnVzdGVkSW1tUHRy
KFNjb3BlZEFyZ3VtZW50c1BvaXNvbjo6a2V5KCkpLCBzY3JhdGNoMik7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHNjcmF0Y2gsIFNjb3BlZEFyZ3VtZW50c1RhYmxlOjpvZmZzZXRPZkFyZ3VtZW50cygp
KSwgc2NyYXRjaCk7CiAgICAgbG9hZDMyKEJhc2VJbmRleChzY3JhdGNoLCBwcm9wZXJ0eSwgVGlt
ZXNGb3VyKSwgc2NyYXRjaCk7CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihFcXVhbCwg
c2NyYXRjaCwgVHJ1c3RlZEltbTMyKFNjb3BlT2Zmc2V0OjppbnZhbGlkT2Zmc2V0KSkpOwpAQCAt
MTQ2NSwxMCArMTQ3MSwxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdFNjb3BlZEFyZ3VtZW50
c0dlCiAgICAgb3ZlcmZsb3dDYXNlLmxpbmsodGhpcyk7CiAgICAgc3ViMzIocHJvcGVydHksIHNj
cmF0Y2gyKTsKICAgICBuZWczMihzY3JhdGNoMik7Ci0gICAgbG9hZFZhbHVlKEJhc2VJbmRleChi
YXNlLCBzY3JhdGNoMiwgVGltZXNFaWdodCwgU2NvcGVkQXJndW1lbnRzOjpvdmVyZmxvd1N0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdCk7CisgICAgbG9hZFZhbHVlKEJhc2VJbmRleChzY3JhdGNoMywg
c2NyYXRjaDIsIFRpbWVzRWlnaHQpLCByZXN1bHQpOwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJh
bmNoSWZFbXB0eShyZXN1bHQpKTsKICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgCisgICAgbG9h
ZDMyKEFkZHJlc3Moc2NyYXRjaDMsIFNjb3BlZEFyZ3VtZW50czo6b2Zmc2V0T2ZUb3RhbExlbmd0
aEluU3RvcmFnZSgpKSwgc2NyYXRjaCk7CisgICAgZW1pdFByZXBhcmVQcmVjaXNlSW5kZXhNYXNr
MzIocHJvcGVydHksIHNjcmF0Y2gsIHNjcmF0Y2gyKTsKKyAgICBhbmRQdHIoc2NyYXRjaDIsIHJl
c3VsdC5wYXlsb2FkR1BSKCkpOworICAgIAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGlyZWN0QXJndW1lbnRz
LmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGlyZWN0QXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBEaXJl
Y3RBcmd1bWVudHMqIERpcmVjdEFyZ3VtZW50czo6Y3JlYXRlCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gY2FwYWNpdHk7IGktLTspCiAgICAgICAgIHN0b3JhZ2VbaV0uc2V0KHZtLCByZXN1bHQsIGV4
ZWMtPmdldEFyZ3VtZW50VW5zYWZlKGkpKTsKICAgICAKLSAgICByZXN1bHQtPmNhbGxlZSgpLnNl
dCh2bSwgcmVzdWx0LCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmpzQ2FsbGVlKCkpKTsKKyAg
ICByZXN1bHQtPnNldENhbGxlZSh2bSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5qc0NhbGxl
ZSgpKSk7CiAgICAgCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0RpcmVjdEFyZ3VtZW50cy5oCShyZXZpc2lvbiAyMjk4MDkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EaXJlY3RBcmd1bWVudHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTEwLDkgKzExMCwxNCBAQCBwdWJsaWM6CiAgICAgICAgIHByZWNpc2VJ
bmRleE1hc2tQdHIoaSwgc3RvcmFnZUhlYWRlcihzdG9yYWdlKS5sZW5ndGgsIHB0ciktPnNldCh2
bSwgdGhpcywgdmFsdWUpOwogICAgIH0KICAgICAKLSAgICBXcml0ZUJhcnJpZXI8SlNGdW5jdGlv
bj4mIGNhbGxlZSgpCisgICAgSlNGdW5jdGlvbiogY2FsbGVlKCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2NhbGxlZTsKKyAgICAgICAgcmV0dXJuIG1fY2FsbGVlLmdldCgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNldENhbGxlZShWTSYgdm0sIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKQorICAg
IHsKKyAgICAgICAgbV9jYWxsZWUuc2V0KHZtLCB0aGlzLCBmdW5jdGlvbik7CiAgICAgfQogICAg
IAogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiYgYXJndW1lbnQoRGlyZWN0QXJndW1lbnRzT2Zm
c2V0IG9mZnNldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0dlbmVyaWNB
cmd1bWVudHNJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkocmV2aXNpb24gMjI5ODA5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvR2VuZXJpY0FyZ3VtZW50c0lubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBib29sIEdlbmVyaWNBcmd1bWVudHM8VHlwZT46
OmdldE93blByb3BlCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaWRlbnQgPT0gdm0ucHJvcGVydHlOYW1lcy0+Y2FsbGVlKSB7Ci0gICAgICAgICAgICBz
bG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9wZXJ0eUF0
dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKS5nZXQoKSk7CisgICAgICAg
ICAgICBzbG90LnNldFZhbHVlKHRoaXNPYmplY3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pLCB0aGlzT2JqZWN0LT5jYWxsZWUoKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBpZiAoaWRlbnQgPT0gdm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JTeW1ib2wpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ1BvaXNvbi5oCShyZXZpc2lvbiAyMjk4MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NQb2lzb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB2KEpTV2ViQXNzZW1ibHlNb2R1bGUpIFwKICAgICB2
KEpTV2ViQXNzZW1ibHlUYWJsZSkgXAogICAgIHYoTmF0aXZlQ29kZSkgXAorICAgIHYoU2NvcGVk
QXJndW1lbnRzKSBcCiAgICAgdihTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUpIFwKICAgICB2KFVu
bGlua2VkU291cmNlQ29kZSkgXAogICAgIHYoV2ViQXNzZW1ibHlGdW5jdGlvbkJhc2UpIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRz
LmNwcAkocmV2aXNpb24gMjI5ODA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2NvcGVkQXJndW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSwxMSArMzUsMTEgQEAgU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKAogCiBjb25zdCBDbGFzc0luZm8gU2Nv
cGVkQXJndW1lbnRzOjpzX2luZm8gPSB7ICJBcmd1bWVudHMiLCAmQmFzZTo6c19pbmZvLCBudWxs
cHRyLCBudWxscHRyLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFNjb3BlZEFyZ3VtZW50cykgfTsKIAot
U2NvcGVkQXJndW1lbnRzOjpTY29wZWRBcmd1bWVudHMoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgdW5zaWduZWQgdG90YWxMZW5ndGgpCitTY29wZWRBcmd1bWVudHM6OlNjb3BlZEFyZ3Vt
ZW50cyhWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXcml0ZUJhcnJpZXI8VW5rbm93bj4q
IHN0b3JhZ2UpCiAgICAgOiBHZW5lcmljQXJndW1lbnRzKHZtLCBzdHJ1Y3R1cmUpCi0gICAgLCBt
X292ZXJyb2RlVGhpbmdzKGZhbHNlKQotICAgICwgbV90b3RhbExlbmd0aCh0b3RhbExlbmd0aCkK
KyAgICAsIG1fc3RvcmFnZSh2bSwgdGhpcywgc3RvcmFnZSkKIHsKKyAgICBBU1NFUlQoIXN0b3Jh
Z2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3MpOwogfQogCiB2b2lkIFNjb3BlZEFyZ3Vt
ZW50czo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0Z1bmN0aW9uKiBjYWxsZWUsIFNjb3BlZEFy
Z3VtZW50c1RhYmxlKiB0YWJsZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIHNjb3BlKQpAQCAtNTcs
MTAgKzU3LDE3IEBAIFNjb3BlZEFyZ3VtZW50cyogU2NvcGVkQXJndW1lbnRzOjpjcmVhdGUKICAg
ICAgICAgb3ZlcmZsb3dMZW5ndGggPSB0b3RhbExlbmd0aCAtIHRhYmxlLT5sZW5ndGgoKTsKICAg
ICBlbHNlCiAgICAgICAgIG92ZXJmbG93TGVuZ3RoID0gMDsKKyAgICAKKyAgICB2b2lkKiByYXdT
dG9yYWdlUHRyID0gdm0uanNWYWx1ZUdpZ2FjYWdlQXV4aWxpYXJ5U3BhY2UuYWxsb2NhdGVOb25W
aXJ0dWFsKAorICAgICAgICB2bSwgc3RvcmFnZVNpemUob3ZlcmZsb3dMZW5ndGgpLCBudWxscHRy
LCBBbGxvY2F0aW9uRmFpbHVyZU1vZGU6OkFzc2VydCk7CisgICAgV3JpdGVCYXJyaWVyPFVua25v
d24+KiBzdG9yYWdlID0gc3RhdGljX2Nhc3Q8V3JpdGVCYXJyaWVyPFVua25vd24+Kj4ocmF3U3Rv
cmFnZVB0cikgKyAxOworICAgIHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkub3ZlcnJvZGVUaGluZ3Mg
PSBmYWxzZTsKKyAgICBzdG9yYWdlSGVhZGVyKHN0b3JhZ2UpLnRvdGFsTGVuZ3RoID0gdG90YWxM
ZW5ndGg7CisgICAgCiAgICAgU2NvcGVkQXJndW1lbnRzKiByZXN1bHQgPSBuZXcgKAogICAgICAg
ICBOb3ROdWxsLAotICAgICAgICBhbGxvY2F0ZUNlbGw8U2NvcGVkQXJndW1lbnRzPih2bS5oZWFw
LCBhbGxvY2F0aW9uU2l6ZShvdmVyZmxvd0xlbmd0aCkpKQotICAgICAgICBTY29wZWRBcmd1bWVu
dHModm0sIHN0cnVjdHVyZSwgdG90YWxMZW5ndGgpOworICAgICAgICBhbGxvY2F0ZUNlbGw8U2Nv
cGVkQXJndW1lbnRzPih2bS5oZWFwKSkKKyAgICAgICAgU2NvcGVkQXJndW1lbnRzKHZtLCBzdHJ1
Y3R1cmUsIHN0b3JhZ2UpOwogICAgIHJlc3VsdC0+ZmluaXNoQ3JlYXRpb24odm0sIGNhbGxlZSwg
dGFibGUsIHNjb3BlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTA3LDkgKzExNCwxMSBA
QCB2b2lkIFNjb3BlZEFyZ3VtZW50czo6dmlzaXRDaGlsZHJlbihKU0NlCiAgICAgdmlzaXRvci5h
cHBlbmQodGhpc09iamVjdC0+bV90YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9zY29wZSk7CiAgICAgCi0gICAgaWYgKHRoaXNPYmplY3QtPm1fdG90YWxMZW5ndGggPiB0
aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSkgeworICAgIHZpc2l0b3IubWFya0F1eGlsaWFy
eSgmdGhpc09iamVjdC0+c3RvcmFnZUhlYWRlcigpKTsKKyAgICAKKyAgICBpZiAodGhpc09iamVj
dC0+c3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoID4gdGhpc09iamVjdC0+bV90YWJsZS0+bGVu
Z3RoKCkpIHsKICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoCi0gICAgICAgICAgICB0aGlz
T2JqZWN0LT5vdmVyZmxvd1N0b3JhZ2UoKSwgdGhpc09iamVjdC0+bV90b3RhbExlbmd0aCAtIHRo
aXNPYmplY3QtPm1fdGFibGUtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm92
ZXJmbG93U3RvcmFnZSgpLCB0aGlzT2JqZWN0LT5zdG9yYWdlSGVhZGVyKCkudG90YWxMZW5ndGgg
LSB0aGlzT2JqZWN0LT5tX3RhYmxlLT5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgR2VuZXJpY0Fy
Z3VtZW50czxTY29wZWRBcmd1bWVudHM+Ojp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwpA
QCAtMTIyLDI0ICsxMzEsMjQgQEAgU3RydWN0dXJlKiBTY29wZWRBcmd1bWVudHM6OmNyZWF0ZVN0
cnVjdAogCiB2b2lkIFNjb3BlZEFyZ3VtZW50czo6b3ZlcnJpZGVUaGluZ3MoVk0mIHZtKQogewot
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX292ZXJyb2RlVGhpbmdzKTsKKyAgICBSRUxFQVNFX0FTU0VS
VCghc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKTsKICAgICAKICAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobV90YWJsZS0+bGVuZ3RoKCkp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5jYWxsZWUsIG1fY2FsbGVlLmdldCgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAg
ICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclN5bWJvbCwgZ2xvYmFs
T2JqZWN0KCktPmFycmF5UHJvdG9WYWx1ZXNGdW5jdGlvbigpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKSk7CiAgICAgCi0gICAgbV9vdmVycm9kZVRo
aW5ncyA9IHRydWU7CisgICAgc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzID0gdHJ1ZTsK
IH0KIAogdm9pZCBTY29wZWRBcmd1bWVudHM6Om92ZXJyaWRlVGhpbmdzSWZOZWNlc3NhcnkoVk0m
IHZtKQogewotICAgIGlmICghbV9vdmVycm9kZVRoaW5ncykKKyAgICBpZiAoIXN0b3JhZ2VIZWFk
ZXIoKS5vdmVycm9kZVRoaW5ncykKICAgICAgICAgb3ZlcnJpZGVUaGluZ3Modm0pOwogfQogCiB2
b2lkIFNjb3BlZEFyZ3VtZW50czo6dW5tYXBBcmd1bWVudChWTSYgdm0sIHVpbnQzMl90IGkpCiB7
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fdG90YWxMZW5ndGgp
OworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBzdG9yYWdlSGVhZGVy
KCkudG90YWxMZW5ndGgpOwogICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVu
Z3RoKCk7CiAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKICAgICAgICAgbV90YWJsZS5zZXQodm0s
IHRoaXMsIG1fdGFibGUtPnNldCh2bSwgaSwgU2NvcGVPZmZzZXQoKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2NvcGVkQXJndW1lbnRzLmgJKHJldmlzaW9u
IDIyOTgwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Njb3BlZEFyZ3VtZW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIC8v
IGxvb2t1cHMuCiBjbGFzcyBTY29wZWRBcmd1bWVudHMgZmluYWwgOiBwdWJsaWMgR2VuZXJpY0Fy
Z3VtZW50czxTY29wZWRBcmd1bWVudHM+IHsKIHByaXZhdGU6Ci0gICAgU2NvcGVkQXJndW1lbnRz
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgdG90YWxMZW5ndGgpOworICAgIFNjb3BlZEFyZ3Vt
ZW50cyhWTSYsIFN0cnVjdHVyZSosIFdyaXRlQmFycmllcjxVbmtub3duPiogc3RvcmFnZSk7CiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTRnVuY3Rpb24qIGNhbGxlZSwgU2NvcGVkQXJn
dW1lbnRzVGFibGUqLCBKU0xleGljYWxFbnZpcm9ubWVudCopOwogCiBwdWJsaWM6CkBAIC02Nywy
NSArNjcsMjYgQEAgcHVibGljOgogICAgIAogICAgIHVpbnQzMl90IGludGVybmFsTGVuZ3RoKCkg
Y29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3RvdGFsTGVuZ3RoOworICAgICAgICByZXR1
cm4gc3RvcmFnZUhlYWRlcigpLnRvdGFsTGVuZ3RoOwogICAgIH0KICAgICAKICAgICB1aW50MzJf
dCBsZW5ndGgoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKLSAgICAgICAgaWYgKFVOTElLRUxZKG1fb3ZlcnJvZGVUaGluZ3MpKQorICAg
ICAgICBpZiAoVU5MSUtFTFkoc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzKSkKICAgICAg
ICAgICAgIHJldHVybiBnZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b1VJbnQz
MihleGVjKTsKICAgICAgICAgcmV0dXJuIGludGVybmFsTGVuZ3RoKCk7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgaXNNYXBwZWRBcmd1bWVudCh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKLSAgICAg
ICAgaWYgKGkgPj0gbV90b3RhbExlbmd0aCkKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
KiBzdG9yYWdlID0gb3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIGlmIChpID49IHN0b3JhZ2VI
ZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAg
IGlmIChpIDwgbmFtZWRMZW5ndGgpCiAgICAgICAgICAgICByZXR1cm4gISFtX3RhYmxlLT5nZXQo
aSk7Ci0gICAgICAgIHJldHVybiAhIW92ZXJmbG93U3RvcmFnZSgpW2kgLSBuYW1lZExlbmd0aF0u
Z2V0KCk7CisgICAgICAgIHJldHVybiAhIXN0b3JhZ2VbaSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsK
ICAgICB9CiAKICAgICBib29sIGlzTWFwcGVkQXJndW1lbnRJbkRGRyh1aW50MzJfdCBpKSBjb25z
dApAQCAtOTYsMjggKzk3LDMyIEBAIHB1YmxpYzoKICAgICBKU1ZhbHVlIGdldEluZGV4UXVpY2ts
eSh1aW50MzJfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaXNNYXBwZWRBcmd1bWVudChpKSk7CisgICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiogc3RvcmFnZSA9IG92ZXJmbG93U3RvcmFnZSgpOworICAgICAgICB1bnNpZ25lZCB0
b3RhbExlbmd0aCA9IHN0b3JhZ2VIZWFkZXIoc3RvcmFnZSkudG90YWxMZW5ndGg7CiAgICAgICAg
IHVuc2lnbmVkIG5hbWVkTGVuZ3RoID0gbV90YWJsZS0+bGVuZ3RoKCk7CiAgICAgICAgIGlmIChp
IDwgbmFtZWRMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gbV9zY29wZS0+dmFyaWFibGVBdCht
X3RhYmxlLT5nZXQoaSkpLmdldCgpOwotICAgICAgICByZXR1cm4gb3ZlcmZsb3dTdG9yYWdlKClb
aSAtIG5hbWVkTGVuZ3RoXS5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhN
YXNrUHRyKGksIHRvdGFsTGVuZ3RoLCAmbV9zY29wZS0+dmFyaWFibGVBdChtX3RhYmxlLT5nZXQo
aSkpKS0+Z2V0KCk7CisgICAgICAgIHJldHVybiBwcmVjaXNlSW5kZXhNYXNrUHRyKGksIHRvdGFs
TGVuZ3RoLCBzdG9yYWdlICsgKGkgLSBuYW1lZExlbmd0aCkpLT5nZXQoKTsKICAgICB9CiAKICAg
ICB2b2lkIHNldEluZGV4UXVpY2tseShWTSYgdm0sIHVpbnQzMl90IGksIEpTVmFsdWUgdmFsdWUp
CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc01hcHBl
ZEFyZ3VtZW50KGkpKTsKKyAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBzdG9yYWdlID0g
b3ZlcmZsb3dTdG9yYWdlKCk7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsTGVuZ3RoID0gc3RvcmFn
ZUhlYWRlcihzdG9yYWdlKS50b3RhbExlbmd0aDsKICAgICAgICAgdW5zaWduZWQgbmFtZWRMZW5n
dGggPSBtX3RhYmxlLT5sZW5ndGgoKTsKICAgICAgICAgaWYgKGkgPCBuYW1lZExlbmd0aCkKLSAg
ICAgICAgICAgIG1fc2NvcGUtPnZhcmlhYmxlQXQobV90YWJsZS0+Z2V0KGkpKS5zZXQodm0sIG1f
c2NvcGUuZ2V0KCksIHZhbHVlKTsKKyAgICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwg
dG90YWxMZW5ndGgsICZtX3Njb3BlLT52YXJpYWJsZUF0KG1fdGFibGUtPmdldChpKSkpLT5zZXQo
dm0sIG1fc2NvcGUuZ2V0KCksIHZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgb3Zl
cmZsb3dTdG9yYWdlKClbaSAtIG5hbWVkTGVuZ3RoXS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgICAgIHByZWNpc2VJbmRleE1hc2tQdHIoaSwgdG90YWxMZW5ndGgsIHN0b3JhZ2UgKyAo
aSAtIG5hbWVkTGVuZ3RoKSktPnNldCh2bSwgdGhpcywgdmFsdWUpOwogICAgIH0KIAotICAgIFdy
aXRlQmFycmllcjxKU0Z1bmN0aW9uPiYgY2FsbGVlKCkKKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWUo
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY2FsbGVlOworICAgICAgICByZXR1cm4gbV9jYWxs
ZWUuZ2V0KCk7CiAgICAgfQogCi0gICAgYm9vbCBvdmVycm9kZVRoaW5ncygpIGNvbnN0IHsgcmV0
dXJuIG1fb3ZlcnJvZGVUaGluZ3M7IH0KKyAgICBib29sIG92ZXJyb2RlVGhpbmdzKCkgY29uc3Qg
eyByZXR1cm4gc3RvcmFnZUhlYWRlcigpLm92ZXJyb2RlVGhpbmdzOyB9CiAgICAgdm9pZCBvdmVy
cmlkZVRoaW5ncyhWTSYpOwogICAgIHZvaWQgb3ZlcnJpZGVUaGluZ3NJZk5lY2Vzc2FyeShWTSYp
OwogICAgIHZvaWQgdW5tYXBBcmd1bWVudChWTSYsIHVpbnQzMl90IGluZGV4KTsKQEAgLTE0Mywz
MiArMTQ4LDU1IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKICAgICAK
LSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mT3ZlcnJvZGVUaGluZ3MoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX292ZXJyb2RlVGhpbmdzKTsgfQotICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUb3RhbExlbmd0aCgpIHsgcmV0dXJuIE9CSkVDVF9P
RkZTRVRPRihTY29wZWRBcmd1bWVudHMsIG1fdG90YWxMZW5ndGgpOyB9CisgICAgc3RhdGljIHB0
cmRpZmZfdCBvZmZzZXRPZlN0b3JhZ2UoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoU2NvcGVk
QXJndW1lbnRzLCBtX3N0b3JhZ2UpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk92
ZXJyb2RlVGhpbmdzSW5TdG9yYWdlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VI
ZWFkZXIsIG92ZXJyb2RlVGhpbmdzKSAtIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9
CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlRvdGFsTGVuZ3RoSW5TdG9yYWdlKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKFN0b3JhZ2VIZWFkZXIsIHRvdGFsTGVuZ3RoKSAtIHNpemVv
ZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZlRhYmxlKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKFNjb3BlZEFyZ3VtZW50cywgbV90YWJs
ZSk7IH0KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NvcGUoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoU2NvcGVkQXJndW1lbnRzLCBtX3Njb3BlKTsgfQogICAgIAotICAgIHN0YXRp
YyBzaXplX3Qgb3ZlcmZsb3dTdG9yYWdlT2Zmc2V0KCkKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG9j
YXRpb25TaXplKHNpemVfdCBpbmxpbmVTaXplKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZjxzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KT4oc2l6ZW9m
KFNjb3BlZEFyZ3VtZW50cykpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghaW5saW5lU2l6ZSk7
CisgICAgICAgIHJldHVybiBzaXplb2YoU2NvcGVkQXJndW1lbnRzKTsKICAgICB9CiAgICAgCi0g
ICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZShDaGVja2VkPHNpemVfdD4gb3ZlcmZsb3dB
cmd1bWVudHNMZW5ndGgpCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlU2l6ZShDaGVja2VkPHNp
emVfdD4gY2FwYWNpdHkpCiAgICAgewotICAgICAgICByZXR1cm4gKG92ZXJmbG93U3RvcmFnZU9m
ZnNldCgpICsgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKiBvdmVyZmxvd0FyZ3VtZW50
c0xlbmd0aCkudW5zYWZlR2V0KCk7CisgICAgICAgIHJldHVybiAoc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgKiAoY2FwYWNpdHkgKyBzdGF0aWNfY2FzdDxzaXplX3Q+KDEpKSkudW5zYWZl
R2V0KCk7CiAgICAgfQotCisgICAgCisgICAgc3RhdGljIHNpemVfdCBzdG9yYWdlSGVhZGVyU2l6
ZSgpIHsgcmV0dXJuIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pOyB9CisgICAgCiBwcml2
YXRlOgorICAgIHN0cnVjdCBTdG9yYWdlSGVhZGVyIHsKKyAgICAgICAgdW5zaWduZWQgdG90YWxM
ZW5ndGg7CisgICAgICAgIGJvb2wgb3ZlcnJvZGVUaGluZ3M7IC8vIFRydWUgaWYgbGVuZ3RoLCBj
YWxsZWUsIGFuZCBjYWxsZXIgYXJlIGZ1bGx5IG1hdGVyaWFsaXplZCBpbiB0aGUgb2JqZWN0Lgor
ICAgIH07CisgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBvdmVyZmxvd1N0b3JhZ2Uo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8
VW5rbm93bj4qPihiaXR3aXNlX2Nhc3Q8Y2hhcio+KHRoaXMpICsgb3ZlcmZsb3dTdG9yYWdlT2Zm
c2V0KCkpOworICAgICAgICByZXR1cm4gbV9zdG9yYWdlLmdldCgpLnVucG9pc29uZWQoKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIFN0b3JhZ2VIZWFkZXImIHN0b3JhZ2VIZWFkZXIoV3JpdGVC
YXJyaWVyPFVua25vd24+KiBzdG9yYWdlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChz
aXplb2YoU3RvcmFnZUhlYWRlcikgPD0gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPiksICJT
dG9yYWdlSGVhZGVyIG5lZWRzIHRvIGJlIG5vIGJpZ2dlciB0aGFuIGEgSlNWYWx1ZSIpOworICAg
ICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxTdG9yYWdlSGVhZGVyKj4oc3RvcmFnZSAtIDEpOwor
ICAgIH0KKyAgICAKKyAgICBTdG9yYWdlSGVhZGVyJiBzdG9yYWdlSGVhZGVyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBzdG9yYWdlSGVhZGVyKG92ZXJmbG93U3RvcmFnZSgpKTsKICAg
ICB9CiAgICAgCi0gICAgYm9vbCBtX292ZXJyb2RlVGhpbmdzOyAvLyBUcnVlIGlmIGxlbmd0aCwg
Y2FsbGVlLCBhbmQgY2FsbGVyIGFyZSBmdWxseSBtYXRlcmlhbGl6ZWQgaW4gdGhlIG9iamVjdC4K
LSAgICB1bnNpZ25lZCBtX3RvdGFsTGVuZ3RoOyAvLyBUaGUgbGVuZ3RoIG9mIGRlY2xhcmVkIHBs
dXMgb3ZlcmZsb3cgYXJndW1lbnRzLgotICAgIFdyaXRlQmFycmllcjxKU0Z1bmN0aW9uPiBtX2Nh
bGxlZTsKLSAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fdGFibGU7Ci0g
ICAgV3JpdGVCYXJyaWVyPEpTTGV4aWNhbEVudmlyb25tZW50PiBtX3Njb3BlOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgdXNpbmcgUG9pc29uZWRCYXJyaWVyID0gUG9pc29uZWRXcml0
ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzUG9pc29uLCBUPjsKKyAgICAKKyAgICBQb2lzb25lZEJh
cnJpZXI8SlNGdW5jdGlvbj4gbV9jYWxsZWU7CisgICAgUG9pc29uZWRCYXJyaWVyPFNjb3BlZEFy
Z3VtZW50c1RhYmxlPiBtX3RhYmxlOworICAgIFBvaXNvbmVkQmFycmllcjxKU0xleGljYWxFbnZp
cm9ubWVudD4gbV9zY29wZTsKKyAgICAKKyAgICBBdXhpbGlhcnlCYXJyaWVyPFBvaXNvbmVkPFNj
b3BlZEFyZ3VtZW50c1BvaXNvbiwgV3JpdGVCYXJyaWVyPFVua25vd24+Kj4+IG1fc3RvcmFnZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>