<?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>226258</bug_id>
          
          <creation_ts>2021-05-25 23:58:33 -0700</creation_ts>
          <short_desc>AirAllocateStackByGraphColoring should use the optimized interference graphs from AirAllocateRegistersByGraphColoring</short_desc>
          <delta_ts>2021-05-28 11:53:29 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225848</see_also>
          <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>
          
          <blocked>226388</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1763838</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-25 23:58:33 -0700</bug_when>
    <thetext>This would help especially on some Wasm code that has surprisingly dense interference graphs for its stack slots.
In particular, tsf-wasm has a couple of functions for which it is roughly 2MB.
Even worse, mruby-wasm.aotoki.dev (which caused us to lower Options::maximumTmpsForGraphColoring due to jetsams) has two functions for which it is respectively 215MB and 395MB (if we increase Options::maximumTmpsForGraphColoring from 25k to 50k, as they have roughly 30k temporaries).

Early tests indicate that reusing the interference graph datastructures that I added in https://bugs.webkit.org/show_bug.cgi?id=225848 would decrease these sizes:
- for test-wasm, from 2MB to roughly 70kB
- for mruby-wasm.aotoki.dev, from 215MB to 7MB and from 395MB to 11MB
It would also have a large decrease in percentage for most other functions, but with much less impact since most JS functions only have a handful of spill slots if any at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763839</commentid>
    <comment_count>1</comment_count>
      <attachid>429733</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-25 23:59:31 -0700</bug_when>
    <thetext>Created attachment 429733
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764017</commentid>
    <comment_count>2</comment_count>
      <attachid>429786</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-26 13:05:53 -0700</bug_when>
    <thetext>Created attachment 429786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764064</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-05-26 14:43:38 -0700</bug_when>
    <thetext>Looks like the jsc EWS bot failures are real.  Can you investigate?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764149</commentid>
    <comment_count>4</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-26 17:41:27 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #3)
&gt; Looks like the jsc EWS bot failures are real.  Can you investigate?

Looking at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764469</commentid>
    <comment_count>5</comment_count>
      <attachid>429915</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-27 13:19:26 -0700</bug_when>
    <thetext>Created attachment 429915
Patch

The test failures were caused by a debugging option that I had forgotten to reset to false before committing (AirAllocateStackByGraphColoringInternal::reportLargeMemoryUses).

I also tested it on JetStream2 and RAMification, and the patch appears neutral.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764487</commentid>
    <comment_count>6</comment_count>
      <attachid>429915</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-27 13:46:45 -0700</bug_when>
    <thetext>Comment on attachment 429915
Patch

After discussing with Phil, I appear to have some problem with coalescing which I really should fix before trying to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764522</commentid>
    <comment_count>7</comment_count>
      <attachid>429934</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-27 15:05:29 -0700</bug_when>
    <thetext>Created attachment 429934
Patch

Fix a stupid infinite loop in remap() !
Also avoided creating self-interfering edges, so we no longer need to be on the lookout for those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764579</commentid>
    <comment_count>8</comment_count>
      <attachid>429934</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2021-05-27 16:41:38 -0700</bug_when>
    <thetext>Comment on attachment 429934
Patch

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

&gt; Source/JavaScriptCore/b3/air/AirAllocateRegistersByGraphColoring.cpp:1365
&gt; +        if constexpr (reportInterferenceGraphMemoryUse &amp;&amp; (std::is_same&lt;InterferenceSet, WTF::LargeInterferenceGraph&gt;::value || std::is_same&lt;InterferenceSet, WTF::HugeInterferenceGraph&gt;::value)) {

You should do “using WTF::LargeInterferenceGraph” (and ditto for Huge) at the bottom of the file in WTF that defines these things. That way you don’t have to say WTF:: here. That’s what other WTF ADTs do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764581</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-27 16:42:39 -0700</bug_when>
    <thetext>/Volumes/Data/worker/Commit-Queue/build/Source/WTF/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764608</commentid>
    <comment_count>10</comment_count>
      <attachid>429965</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-27 17:43:40 -0700</bug_when>
    <thetext>Created attachment 429965
Patch for landing

Thanks Phil for the review.
I added the using statements in wtf/InterferenceGraph.h as suggested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764609</commentid>
    <comment_count>11</comment_count>
      <attachid>429966</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-05-27 17:45:48 -0700</bug_when>
    <thetext>Created attachment 429966
Patch for landing

I had missed a couple of redundant &quot;WTF::&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764636</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-27 19:08:28 -0700</bug_when>
    <thetext>Committed r278186 (238229@main): &lt;https://commits.webkit.org/238229@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429966.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764637</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-27 19:09:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78599520&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429733</attachid>
            <date>2021-05-25 23:59:31 -0700</date>
            <delta_ts>2021-05-26 13:05:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>56399</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdp
c3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKaW5kZXggOWUxNjIzN2E3YmRi
Li4yNmI0NGI1ZWIxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3Bw
CkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0
Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oPgorI2luY2x1ZGUgPHd0Zi9JbnRlcmZl
cmVuY2VHcmFwaC5oPgogI2luY2x1ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIApAQCAtNTIsMjM4ICs1Miw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFj
ZURlYnVnID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgcmVwb3J0U3RhdHMgPSBmYWxz
ZTsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVz
ZSA9IGZhbHNlOwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgotY2xhc3MgSW50ZXJm
ZXJlbmNlSGFzaFNldCB7Ci0gICAgLy8gSW50ZXJmZXJlbmNlIGVkZ2VzIGFyZSBub3QgZGlyZWN0
ZWQuIEFuIGVkZ2UgYmV0d2VlbiBhbnkgdHdvIFRtcHMgaXMgcmVwcmVzZW50ZWQKLSAgICAvLyBi
eSB0aGUgY29uY2F0ZW5hdGVkIHZhbHVlcyAodGhyb3VnaCBUbXBNYXBwZXIpIG9mIHRoZSBzbWFs
bGVzdCBUbXAgZm9sbG93ZWQgYnkgdGhlIGJpZ2dlciBUbXAuCi0gICAgdXNpbmcgSW50ZXJmZXJl
bmNlRWRnZSA9IHN0ZDo6cGFpcjxJbmRleFR5cGUsIEluZGV4VHlwZT47Ci1wdWJsaWM6Ci0gICAg
Ym9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICBp
ZiAodiA8IHUpCi0gICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAgICAgIHJldHVybiBt
X3NldC5jb250YWlucyh7IHUsIHYgfSk7Ci0gICAgfQotCi0gICAgYm9vbCBhZGRBbmRSZXR1cm5J
c05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2
IDwgdSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fc2V0
LmFkZCh7IHUsIHYgfSkuaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAg
ICB7Ci0gICAgICAgIG1fc2V0LmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNYXhUbXBJ
bmRleCh1bnNpZ25lZCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChuLCBuIDwgc3Rk
OjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8gZWRnZSA6IG1fc2V0KQotICAgICAgICAg
ICAgZnVuY3RvcihlZGdlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXQuc2l6ZSgpOyB9Ci0KLSAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdCB7
IHJldHVybiBtX3NldC5jYXBhY2l0eSgpICogc2l6ZW9mKEludGVyZmVyZW5jZUVkZ2UpOyB9Ci0K
LSAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgp
LzEwMjQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgSGFzaFNldDxJbnRlcmZlcmVuY2VFZGdlPiBtX3Nl
dDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFz
cyBJbnRlcmZlcmVuY2VWZWN0b3IgewotcHVibGljOgotICAgIGJvb2wgY29udGFpbnMoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgaWYgKHYgPCB1KQotICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOwotICAgICAgICByZXR1cm4gbV92ZWN0b3JbdV0uY29udGFpbnMo
dik7Ci0gICAgfQotCi0gICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgYm9vbCBpc05ld0VudHJ5ID0gbV92ZWN0b3JbdV0uYWRk
KHYpLmlzTmV3RW50cnk7Ci0gICAgICAgIG1fc2l6ZSArPSBpc05ld0VudHJ5OwotICAgICAgICBy
ZXR1cm4gaXNOZXdFbnRyeTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAg
ICAgIG1fdmVjdG9yLmNsZWFyKCk7Ci0gICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAg
dm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG4g
PCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKLSAgICAgICAgbV92ZWN0
b3IucmVzaXplKG4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgot
ICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKSA7ICsraSkgewotICAgICAg
ICAgICAgZm9yIChJbmRleFR5cGUgaiA6IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgICAgIGZ1
bmN0b3IoeyBpLCBqIH0pOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotCi0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIG1lbW9yeSA9IDA7Ci0gICAgICAgIGZvciAoY29u
c3QgVCYgc2V0IDogbV92ZWN0b3IpCi0gICAgICAgICAgICBtZW1vcnkgKz0gc2V0Lm1lbW9yeVVz
ZSgpOwotICAgICAgICByZXR1cm4gbWVtb3J5OwotICAgIH0KLQotICAgIHZvaWQgZHVtcE1lbW9y
eVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0
ZToKLSAgICBWZWN0b3I8VD4gbV92ZWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplIHswfTsKLX07
Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VCaXRW
ZWN0b3IgewotcHVibGljOgotICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUs
IHYpKTsKLSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBl
IHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgLy8gTm90ZTogd2UgY291bGQgZG8gb25s
eSBvbmUgcXVpY2tTZXQsIGF0IHRoZSBjb3N0IG9mIG9uZSBleHRyYSBicmFuY2ggaW4gZXZlcnkg
Y29udGFpbnMvYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSAodG8gZW5mb3JjZSB1IDwgdikKLSAgICAg
ICAgYm9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5xdWlja1NldChpbmRleCh1LCB2KSk7Ci0g
ICAgICAgIGJvb2wgYWxyZWFkeUluMiA9IG1fYml0VmVjdG9yLnF1aWNrU2V0KGluZGV4KHYsIHUp
KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChhbHJlYWR5SW4yLCBhbHJlYWR5SW4gPT0gYWxyZWFk
eUluMik7Ci0gICAgICAgIG1fc2l6ZSArPSAhYWxyZWFkeUluOwotICAgICAgICByZXR1cm4gIWFs
cmVhZHlJbjsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fYml0
VmVjdG9yLmNsZWFyQWxsKCk7Ci0gICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgdm9p
ZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG4gPCBz
dGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKLSAgICAgICAgbV9udW1UbXBz
ID0gbjsKLSAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJlU2l6ZShuKm4pOwotICAgIH0KLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgZm9yIChJbmRleFR5cGUgaSA9IDA7IGkgPCBt
X251bVRtcHM7ICsraSkgewotICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA9IGkgKyAxOyBq
IDwgbV9udW1UbXBzOyArK2opIHsKLSAgICAgICAgICAgICAgICBpZiAobV9iaXRWZWN0b3IucXVp
Y2tHZXQoaW5kZXgoaSwgaikpKQotICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNv
bnN0IHsgcmV0dXJuIChtX2JpdFZlY3Rvci5zaXplKCkgKyA3KSA+PiAzOyB9Ci0KLSAgICB2b2lk
IGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEwMjQpOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdW5zaWduZWQgaW5kZXgoSW5kZXhUeXBlIGksIEluZGV4VHlwZSBq
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGkgKiBtX251bVRtcHMgKyBqOwotICAgIH0KLQotICAg
IEJpdFZlY3RvciBtX2JpdFZlY3RvcjsKLSAgICB1bnNpZ25lZCBtX3NpemUgezB9OwotICAgIElu
ZGV4VHlwZSBtX251bVRtcHM7Ci19OwotCi0jZGVmaW5lIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVS
RU5DRV9HUkFQSCAwCi0jaWYgVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgSW5kZXhUeXBlPgotY2xhc3Mg
SW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGggewotcHVibGljOgotICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgYm9vbCBjb250YWlu
c0luQSA9IG1fc2V0QS5jb250YWlucyh1LCB2KTsKLSAgICAgICAgYm9vbCBjb250YWluc0luQiA9
IG1fc2V0Qi5jb250YWlucyh1LCB2KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJ
bkEgPT0gY29udGFpbnNJbkIpOwotICAgICAgICByZXR1cm4gY29udGFpbnNJbkE7Ci0gICAgfQot
Ci0gICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUg
dikKLSAgICB7Ci0gICAgICAgIGJvb2wgaXNOZXdFbnRyeUEgPSBtX3NldEEuYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeSh1LCB2KTsKLSAgICAgICAgYm9vbCBpc05ld0VudHJ5QiA9IG1fc2V0Qi5hZGRB
bmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc05ld0Vu
dHJ5QSA9PSBpc05ld0VudHJ5Qik7Ci0gICAgICAgIHJldHVybiBpc05ld0VudHJ5QTsKLSAgICB9
Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fc2V0QS5jbGVhcigpOwotICAg
ICAgICBtX3NldEIuY2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVu
c2lnbmVkIG4pCi0gICAgewotICAgICAgICBtX3NldEEuc2V0TWF4VG1wSW5kZXgobik7Ci0gICAg
ICAgIG1fc2V0Qi5zZXRNYXhUbXBJbmRleChuKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
LSAgICB7Ci0gICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOwotICAgIH0KLQotICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZUEgPSBtX3Nl
dEEuc2l6ZSgpOwotICAgICAgICB1bnNpZ25lZCBzaXplQiA9IG1fc2V0Qi5zaXplKCk7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNpemVBID09IHNpemVCKTsKLSAgICAgICAgcmV0dXJuIHNpemVB
OwotICAgIH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgZGF0YUxvZyhtX3NldEEubWVtb3J5VXNlKCkvMTAyNCwgIiAtPiAiLCBtX3NldEIubWVt
b3J5VXNlKCkvMTAyNCk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFQgbV9zZXRBOwotICAgIFUg
bV9zZXRCOwotfTsKLQotdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5j
ZUJpdFZlY3Rvcjx1aW50MTZfdD47Ci11c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gSW5z
dHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8SW50ZXJmZXJlbmNlSGFzaFNldDx1aW50MTZfdD4s
IEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MTZf
dD4sIHVpbnQxNl90PiwgdWludDE2X3Q+OwotdXNpbmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0g
SW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8SW50ZXJmZXJlbmNlSGFzaFNldDx1aW50MzJf
dD4sIEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50
MzJfdD4sIHVpbnQzMl90PiwgdWludDE2X3Q+OwotCi0jZWxzZSAvLyBURVNUX09QVElNSVpFRF9J
TlRFUkZFUkVOQ0VfR1JBUEgKLQotdXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVy
ZmVyZW5jZUJpdFZlY3Rvcjx1aW50MTZfdD47Ci11c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBo
ID0gSW50ZXJmZXJlbmNlVmVjdG9yPExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQx
Nl90PiwgdWludDE2X3Q+OwotdXNpbmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJl
bmNlVmVjdG9yPExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMy
X3Q+OwotCi0jZW5kaWYKLQogLy8gVGhlIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3IgZGVmaW5l
cyBhbGwgdGhlIGNvZGUgdGhhdCBpcyBpbmRlcGVuZGFudAogLy8gZnJvbSB0aGUgYmFuayBvciBy
ZWdpc3RlciBhbmQgY2FuIGJlIHNoYXJlZCB3aGVuIGFsbG9jYXRpbmcgcmVnaXN0ZXJzLgogdGVt
cGxhdGU8dHlwZW5hbWUgSW5kZXhUeXBlLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQsIEJhbmsg
YmFuaz4KQEAgLTE1ODksMTIgKzEzNTcsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5zZXRNYXhUbXBJbmRleChBYnNv
bHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleChtX2NvZGUubnVtVG1wcyhiYW5rKSkp
OworICAgICAgICBtX2ludGVyZmVyZW5jZUVkZ2VzLnNldE1heEluZGV4KEFic29sdXRlVG1wTWFw
cGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KG1fY29kZS5udW1UbXBzKGJhbmspKSk7CiAKICAgICAg
ICAgaW5pdGlhbGl6ZVByZWNvbG9yZWRUbXAoKTsKICAgICAgICAgYnVpbGQoKTsKIAotICAgICAg
ICBpZiBjb25zdGV4cHIgKHJlcG9ydEludGVyZmVyZW5jZUdyYXBoTWVtb3J5VXNlICYmIChzdGQ6
OmlzX3NhbWU8SW50ZXJmZXJlbmNlU2V0LCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUg
fHwgc3RkOjppc19zYW1lPEludGVyZmVyZW5jZVNldCwgSHVnZUludGVyZmVyZW5jZUdyYXBoPjo6
dmFsdWUpKSB7CisgICAgICAgIGlmIGNvbnN0ZXhwciAocmVwb3J0SW50ZXJmZXJlbmNlR3JhcGhN
ZW1vcnlVc2UgJiYgKHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQsIFdURjo6TGFyZ2VJbnRl
cmZlcmVuY2VHcmFwaD46OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQsIFdU
Rjo6SHVnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUpKSB7CiAgICAgICAgICAgICBkYXRhTG9n
KCJudW1UbXBzfG51bUVkZ2VzfG1lbW9yeVVzZShrQik6ICIsIG1fY29kZS5udW1UbXBzKGJhbmsp
LCAiIHwgIiwgbV9pbnRlcmZlcmVuY2VFZGdlcy5zaXplKCksICIgfCAiKTsKICAgICAgICAgICAg
IG1faW50ZXJmZXJlbmNlRWRnZXMuZHVtcE1lbW9yeVVzZUluS0IoKTsKICAgICAgICAgICAgIGRh
dGFMb2coIlxuIik7CkBAIC0yMDQyLDMxICsxODEwLDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gVGhl
IGJpdCB2ZWN0b3IgYXBwcm9hY2ggdXNlcyBuKm4gYml0cywgb3IgMjBrQiBmb3IgbiA9IDQwMC4K
LSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVu
Y2VHcmFwaCA9IDQwMDsKLSAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IG1h
eFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CisgICAgICAgICAgICBpZiAobV9jb2Rl
Lm51bVRtcHMoYmFuaykgPCBXVEY6Om1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7
CiAgICAgICAgICAgICAgICAgaWYgKHVzZUlSQygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENv
bG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIFNtYWxsSW50ZXJmZXJlbmNlR3Jh
cGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJs
ZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwg
YmFuaywgSVJDLCBXVEY6OlNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUs
IG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAg
ICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3Qs
IGJhbmssIEJyaWdncywgU21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwg
bV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAg
ICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIFdURjo6U21h
bGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VD
b3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0Fs
bG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZf
dD46Om1heCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVzZUlSQygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIExhcmdlSW50
ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRz
LCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRv
cjx1aW50MTZfdCwgYmFuaywgSVJDLCBXVEY6OkxhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9j
YXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwog
ICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0
b3I8dWludDE2X3QsIGJhbmssIEJyaWdncywgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2Nh
dG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7Cisg
ICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmln
Z3MsIFdURjo6TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBX
aWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAg
IGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIEhhdmluZyBtb3JlIHRoYW4gMioq
MTYgbnVtVG1wcyBjYW4gb2NjdXIgZXZlbiB3aXRoIE9wdGlvbnM6Om1heFRtcHNGb3JHcmFwaENv
bG9yaW5nKCkgPCAyKioxNiwgYmVjYXVzZSBvZiBzcGlsbGluZwogICAgICAgICAgICAgICAgIGlm
ICh1c2VJUkMoKSkgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50
MzJfdCwgYmFuaywgSVJDLCBIdWdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUs
IG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAg
ICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MzJfdCwgYmFuaywgSVJDLCBXVEY6Okh1Z2VJ
bnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3Vu
dHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9j
YXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MzJfdCwgYmFuaywgQnJpZ2dzLCBIdWdlSW50
ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRz
LCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRv
cjx1aW50MzJfdCwgYmFuaywgQnJpZ2dzLCBXVEY6Okh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxs
b2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7
CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
LmNwcAppbmRleCBhZTc4NjkxNmI1NmYuLjM5YTc1ZWY1YTZmYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdy
YXBoQ29sb3JpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFpckxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkFpclN0YWNrQWxsb2Nh
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oPgogI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CkBAIC00Myw2NiArNDQsMjYgQEAgbmFtZXNwYWNlIHsKIAogbmFtZXNwYWNlIEFpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydExhcmdlTWVt
b3J5VXNlcyA9IGZhbHNlOwogfQogCi1zdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKLSAgICBDb2Fs
ZXNjYWJsZU1vdmUoKQorY2xhc3MgU3RhY2tBbGxvY2F0b3JCYXNlIHsKK3Byb3RlY3RlZDoKKyAg
ICBTdGFja0FsbG9jYXRvckJhc2UoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkK
KyAgICAgICAgLCBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlcyhjb2RlLnN0YWNrU2xvdHMoKS5z
aXplKCkpCiAgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW1hcHBl
ZFN0YWNrU2xvdEluZGljZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3JlbWFwcGVkU3Rh
Y2tTbG90SW5kaWNlc1tpXSA9IGk7CiAgICAgfQogCi0gICAgQ29hbGVzY2FibGVNb3ZlKFN0YWNr
U2xvdCogc3JjLCBTdGFja1Nsb3QqIGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKLSAgICAgICAgOiBz
cmMoc3JjKQotICAgICAgICAsIGRzdChkc3QpCi0gICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5j
eSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2FsZXNj
YWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNyYyA9PSBvdGhl
ci5zcmMKLSAgICAgICAgICAgICYmIGRzdCA9PSBvdGhlci5kc3QKLSAgICAgICAgICAgICYmIGZy
ZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNj
YWJsZU1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3JjKSwgIi0+Iiwg
cG9pbnRlckR1bXAoZHN0KSwgIigiLCBmcmVxdWVuY3ksICIpIik7Ci0gICAgfQotICAgIAotICAg
IFN0YWNrU2xvdCogc3JjIHsgbnVsbHB0ciB9OwotICAgIFN0YWNrU2xvdCogZHN0IHsgbnVsbHB0
ciB9OwotICAgIGRvdWJsZSBmcmVxdWVuY3kgeyBQTmFOIH07Ci19OwotCi19IC8vIGFub255bW91
cyBuYW1lc3BhY2UKLQotdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNv
ZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nIik7Ci0gICAgCi0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0gICAg
Ci0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMgPQotICAg
ICAgICBhbGxvY2F0ZUFuZEdldEVzY2FwZWRTdGFja1Nsb3RzV2l0aG91dENoYW5naW5nRnJhbWVT
aXplKGNvZGUpOwotCi0gICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCi0gICAg
U3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90
KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNp
emUoKSk7Ci0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwotCiAgICAgLy8gV2Ugd2lsbCBw
ZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2Ug
bmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CiAgICAgLy8gY29hbGVzY2FibGUgbW92ZXMgYW5k
IGhhbmRsZSB0aGVtIHNwZWNpYWxseSBpbiBpbnRlcmZlcmVuY2UgYW5hbHlzaXMuCi0gICAgYXV0
byBpc0NvYWxlc2NhYmxlTW92ZSA9IFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgYm9v
bCBpc0NvYWxlc2NhYmxlTW92ZShJbnN0JiBpbnN0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFPcHRpb25zOjpjb2FsZXNjZVNwaWxsU2xvdHMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgICAgICBXaWR0aCB3aWR0aDsKICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bj
b2RlKSB7CiAgICAgICAgIGNhc2UgTW92ZToKQEAgLTExOCwxMyArNzksMTAgQEAgdm9pZCBhbGxv
Y2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
ICghT3B0aW9uczo6Y29hbGVzY2VTcGlsbFNsb3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9IDMpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbaV07
CiAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCkBAIC0xMzUsMTgyICs5MywyOTEgQEAg
dm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAg
ICBpZiAoc2xvdC0+Ynl0ZVNpemUoKSAhPSBieXRlcyh3aWR0aCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVl
OwotICAgIH07Ci0gICAgCi0gICAgYXV0byBpc1VzZWxlc3NNb3ZlID0gWyZdIChJbnN0JiBpbnN0
KSAtPiBib29sIHsKKyAgICB9CisKKyAgICBib29sIGlzVXNlbGVzc01vdmUoSW5zdCYgaW5zdCkg
Y29uc3QKKyAgICB7CiAgICAgICAgIHJldHVybiBpc0NvYWxlc2NhYmxlTW92ZShpbnN0KSAmJiBp
bnN0LmFyZ3NbMF0gPT0gaW5zdC5hcmdzWzFdOworICAgIH0KKworICAgIHVuc2lnbmVkIHJlbWFw
KHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIHJlbWFwcGVkU2xvdEluZGV4ID0gbV9yZW1hcHBlZFN0YWNrU2xv
dEluZGljZXNbc2xvdEluZGV4XTsKKyAgICAgICAgICAgIGlmIChyZW1hcHBlZFNsb3RJbmRleCA9
PSBzbG90SW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNsb3RJbmRleDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFN0YWNrU2xvdCogcmVtYXBTdGFja1Nsb3QoU3RhY2tTbG90KiBzbG90
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZS5zdGFja1Nsb3RzKClbcmVtYXAo
c2xvdC0+aW5kZXgoKSldOworICAgIH0KKworICAgIGJvb2wgaXNSZW1hcHBlZFNsb3RJbmRleCh1
bnNpZ25lZCBzbG90SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9yZW1hcHBl
ZFN0YWNrU2xvdEluZGljZXNbc2xvdEluZGV4XSAhPSBzbG90SW5kZXg7CiAgICAgfTsKLSAgICAK
LSAgICBhdXRvIGFkZEVkZ2UgPSBbJl0gKFN0YWNrU2xvdCogYSwgU3RhY2tTbG90KiBiKSB7Ci0g
ICAgICAgIGludGVyZmVyZW5jZVthXS5hZGQoYik7Ci0gICAgICAgIGludGVyZmVyZW5jZVtiXS5h
ZGQoYSk7Ci0gICAgfTsKLSAgICAKLSAgICBWZWN0b3I8Q29hbGVzY2FibGVNb3ZlPiBjb2FsZXNj
YWJsZU1vdmVzOwotCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAg
ICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2Nr
KTsKLQotICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7
Ci0gICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFs
Ojp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBXVEY6
OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7Ci0KLSAgICAgICAgICAg
IEluc3QqIHByZXZJbnN0ID0gYmxvY2stPmdldChpbnN0SW5kZXgpOwotICAgICAgICAgICAgSW5z
dCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwotICAgICAgICAgICAgaWYg
KHByZXZJbnN0ICYmIGlzQ29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKLSAgICAgICAgICAg
ICAgICBDb2FsZXNjYWJsZU1vdmUgbW92ZShwcmV2SW5zdC0+YXJnc1swXS5zdGFja1Nsb3QoKSwg
cHJldkluc3QtPmFyZ3NbMV0uc3RhY2tTbG90KCksIGJsb2NrLT5mcmVxdWVuY3koKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5hcHBlbmQobW92
ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90
aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG90
aGVyU2xvdCAhPSBtb3ZlLnNyYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UobW92
ZS5kc3QsIG90aGVyU2xvdCk7CisKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEludGVyZmVyZW5jZUdyYXBoPgorY2xhc3MgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yIGZp
bmFsIDogcHVibGljIFN0YWNrQWxsb2NhdG9yQmFzZSB7CisgICAgdXNpbmcgSW5kZXhUeXBlID0g
dHlwZW5hbWUgSW50ZXJmZXJlbmNlR3JhcGg6OkluZGV4VHlwZTsKK3B1YmxpYzoKKyAgICBHcmFw
aENvbG9yaW5nU3RhY2tBbGxvY2F0b3IoQ29kZSYgY29kZSkKKyAgICAgICAgOiBTdGFja0FsbG9j
YXRvckJhc2UoY29kZSkKKyAgICAgICAgLCBtX2ludGVyZmVyZW5jZSgpCisgICAgICAgICwgbV9j
b2FsZXNjYWJsZU1vdmVzKCkKKyAgICB7CisgICAgICAgIG1faW50ZXJmZXJlbmNlLnNldE1heElu
ZGV4KG1fY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bihj
b25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpIHsKKyAg
ICAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MobV9jb2RlKTsKKworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBTdGFja1Nsb3RMaXZl
bmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgICAg
ICBhdXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdEluZGV4KSB7CisgICAgICAgICAg
ICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9p
bnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKKworICAgICAgICAgICAgICAg
IEluc3QqIHByZXZJbnN0ID0gYmxvY2stPmdldChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAg
IEluc3QqIG5leHRJbnN0ID0gYmxvY2stPmdldChpbnN0SW5kZXggKyAxKTsKKyAgICAgICAgICAg
ICAgICBpZiAocHJldkluc3QgJiYgaXNDb2FsZXNjYWJsZU1vdmUoKnByZXZJbnN0KSkgeworICAg
ICAgICAgICAgICAgICAgICBDb2FsZXNjYWJsZU1vdmUgbW92ZShwcmV2SW5zdC0+YXJnc1swXS5z
dGFja1Nsb3QoKS0+aW5kZXgoKSwgcHJldkluc3QtPmFyZ3NbMV0uc3RhY2tTbG90KCktPmluZGV4
KCksIGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAgICAgICAgICAgICAgICAgbV9jb2FsZXNj
YWJsZU1vdmVzLmFwcGVuZChtb3ZlKTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0YWNr
U2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgb3RoZXJTbG90SW5kZXggPSBvdGhlclNsb3QtPmluZGV4KCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJTbG90SW5kZXggIT0gbW92ZS5zcmMpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2UuYWRkKG1vdmUuZHN0LCBvdGhl
clNsb3RJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICBwcmV2SW5zdCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIHByZXZJbnN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWY8QXJnPigKLSAgICAgICAgICAgICAgICBwcmV2SW5z
dCwgbmV4dEluc3QsCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBC
YW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNs
b3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpTcGlsbCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJT
bG90IDogbG9jYWxDYWxjLmxpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVkZ2Uo
c2xvdCwgb3RoZXJTbG90KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0t
OykgewotICAgICAgICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRl
cm5hbDo6dmVyYm9zZSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJs
b2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsKLQotICAgICAgICAgICAgLy8gS2lsbCBkZWFkIHN0
b3Jlcy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZiBp
dCBoYXMgb25seSBsYXRlCi0gICAgICAgICAgICAvLyBkZWZzIGFuZCB0aG9zZSBsYXRlIGRlZnMg
YXJlIHRvIHRoaW5ncyB0aGF0IGFyZSBkZWFkIHJpZ2h0IG5vdy4gV2Ugb25seSBkbyB0aGF0Ci0g
ICAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQncyB0aGUgb25seSBraW5kIG9mIGRlYWQgc3RhY2sg
c3RvcmUgd2Ugd2lsbCBzZWUgaGVyZS4KLSAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKLSAgICAgICAgICAgIGlmICghaW5zdC5oYXNOb25BcmdFZmZlY3RzKCkp
IHsKLSAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpbnN0
LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9s
ZSByb2xlLCBCYW5rLCBXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNFYXJseURlZihyb2xlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihy
b2xlKSkKKyAgICAgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFyZz4oCisgICAgICAgICAg
ICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpTcGlsbCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJmZXJlbmNlLmFkZChzbG90
LT5pbmRleCgpLCBvdGhlclNsb3QtPmluZGV4KCkpOwogICAgICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0
KCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChB
aXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCks
ICJcbiIpOworCisgICAgICAgICAgICAgICAgLy8gS2lsbCBkZWFkIHN0b3Jlcy4gRm9yIHNpbXBs
aWNpdHkgd2Ugc2F5IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZiBpdCBoYXMgb25seSBsYXRl
CisgICAgICAgICAgICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGlu
Z3MgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAg
ICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3
ZSB3aWxsIHNlZSBoZXJlLgorICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygp
KSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xv
dCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShzbG90KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvaykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7Ci0gICAgICAgICAgICBsb2NhbENh
bGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJlKC0xKTsKKworICAg
ICAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAg
ICAgWyZdIChjb25zdCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICFpbnN0OworICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9Ci0gICAgICAgIGlu
dGVyZmVyZSgtMSk7Ci0gICAgICAgIAotICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxN
YXRjaGluZygKLSAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0OwotICAgICAgICAgICAgfSk7Ci0gICAgfQogCi0g
ICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6dmVyYm9zZSkg
ewotICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQotICAg
ICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJlbmNlIG9mICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAi
OiAiLCBwb2ludGVyTGlzdER1bXAoaW50ZXJmZXJlbmNlW3Nsb3RdKSwgIlxuIik7Ci0gICAgfQot
ICAgIAotICAgIC8vIE5vdyB0cnkgdG8gY29hbGVzY2Ugc29tZSBtb3Zlcy4KLSAgICBzdGQ6OnNv
cnQoCi0gICAgICAgIGNvYWxlc2NhYmxlTW92ZXMuYmVnaW4oKSwgY29hbGVzY2FibGVNb3Zlcy5l
bmQoKSwKLSAgICAgICAgWyZdIChDb2FsZXNjYWJsZU1vdmUmIGEsIENvYWxlc2NhYmxlTW92ZSYg
YikgLT4gYm9vbCB7Ci0gICAgICAgICAgICByZXR1cm4gYS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5j
eTsKLSAgICAgICAgfSk7Ci0gICAgCi0gICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgU3RhY2tTbG90
Kj4gcmVtYXBwZWRTdGFja1Nsb3RzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7Ci0gICAgYXV0
byByZW1hcCA9IFsmXSAoU3RhY2tTbG90KiBzbG90KSAtPiBTdGFja1Nsb3QqIHsKLSAgICAgICAg
aWYgKCFzbG90KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGZvciAoOzsp
IHsKLSAgICAgICAgICAgIFN0YWNrU2xvdCogcmVtYXBwZWRTbG90ID0gcmVtYXBwZWRTdGFja1Ns
b3RzW3Nsb3RdOwotICAgICAgICAgICAgaWYgKCFyZW1hcHBlZFNsb3QpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNsb3Q7Ci0gICAgICAgICAgICBzbG90ID0gcmVtYXBwZWRTbG90OworICAgICAg
ICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFsOjpyZXBvcnRMYXJn
ZU1lbW9yeVVzZXMgJiYgbV9pbnRlcmZlcmVuY2UubWVtb3J5VXNlKCkgPiAxMDI0KSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3Igc3RhY2tTbG90cywg
aW50ZXJmZXJlbmNlR3JhcGgoa0IpLCBjb2FsZXNjYWJsZSBtb3ZlcyhrQik6ICIsIG1fY29kZS5z
dGFja1Nsb3RzKCkuc2l6ZSgpLCAiIDogIik7CisgICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5k
dW1wTWVtb3J5VXNlSW5LQigpOworICAgICAgICAgICAgZGF0YUxvZygiLCAiLCAobV9jb2FsZXNj
YWJsZU1vdmVzLnNpemUoKSAqIHNpemVvZihDb2FsZXNjYWJsZU1vdmUpKSAvIDEwMjQpOworICAg
ICAgICAgICAgZGF0YUxvZ0xuKCk7CiAgICAgICAgIH0KLSAgICB9OwotICAgIAotICAgIGZvciAo
Q29hbGVzY2FibGVNb3ZlJiBtb3ZlIDogY29hbGVzY2FibGVNb3ZlcykgewotICAgICAgICBtb3Zl
LnNyYyA9IHJlbWFwKG1vdmUuc3JjKTsKLSAgICAgICAgbW92ZS5kc3QgPSByZW1hcChtb3ZlLmRz
dCk7Ci0gICAgICAgIGlmIChtb3ZlLnNyYyA9PSBtb3ZlLmRzdCkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoaW50ZXJmZXJlbmNlW21vdmUuc3JjXS5jb250YWlucyhtb3ZlLmRz
dCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIFN0YWNrU2xvdCog
c2xvdFRvS2lsbCA9IG1vdmUuc3JjOwotICAgICAgICBTdGFja1Nsb3QqIHNsb3RUb0tlZXAgPSBt
b3ZlLmRzdDsKLSAgICAgICAgCi0gICAgICAgIHJlbWFwcGVkU3RhY2tTbG90c1tzbG90VG9LaWxs
XSA9IHNsb3RUb0tlZXA7Ci0gICAgICAgIGZvciAoU3RhY2tTbG90KiBpbnRlcmZlcmluZ1Nsb3Qg
OiBpbnRlcmZlcmVuY2Vbc2xvdFRvS2lsbF0pIHsKLSAgICAgICAgICAgIGlmIChpbnRlcmZlcmlu
Z1Nsb3QgPT0gc2xvdFRvS2lsbCkKKworICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3Jh
cGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKSB7CisgICAgICAgICAgICBmb3IgKFN0YWNrU2xv
dCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIpOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgc2xvdEluZGV4IDogbV9pbnRlcmZlcmVuY2Vbc2xvdC0+aW5k
ZXgoKV0pCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2cocG9pbnRlckR1bXAobV9jb2RlLnN0
YWNrU2xvdHMoKVtzbG90SW5kZXhdKSk7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyB0cnkgdG8gY29hbGVz
Y2Ugc29tZSBtb3Zlcy4KKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAgICAgbV9jb2FsZXNj
YWJsZU1vdmVzLmJlZ2luKCksIG1fY29hbGVzY2FibGVNb3Zlcy5lbmQoKSwKKyAgICAgICAgICAg
IFsmXSAoQ29hbGVzY2FibGVNb3ZlJiBhLCBDb2FsZXNjYWJsZU1vdmUmIGIpIC0+IGJvb2wgewor
ICAgICAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVlbmN5OworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgZm9yIChjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG1vdmUgOiBt
X2NvYWxlc2NhYmxlTW92ZXMpIHsKKyAgICAgICAgICAgIEluZGV4VHlwZSBzbG90VG9LaWxsID0g
cmVtYXAobW92ZS5zcmMpOworICAgICAgICAgICAgSW5kZXhUeXBlIHNsb3RUb0tlZXAgPSByZW1h
cChtb3ZlLmRzdCk7CisgICAgICAgICAgICBpZiAoc2xvdFRvS2lsbCA9PSBzbG90VG9LZWVwKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2ludGVy
ZmVyaW5nU2xvdF0ucmVtb3ZlKHNsb3RUb0tpbGwpOwotICAgICAgICAgICAgaW50ZXJmZXJlbmNl
W2ludGVyZmVyaW5nU2xvdF0uYWRkKHNsb3RUb0tlZXApOworICAgICAgICAgICAgaWYgKG1faW50
ZXJmZXJlbmNlLmNvbnRhaW5zKHNsb3RUb0tpbGwsIHNsb3RUb0tlZXApKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKG1faW50ZXJmZXJlbmNlLmNvbnRhaW5zKHNs
b3RUb0tpbGwsIHNsb3RUb0tpbGwpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tzbG90VG9LaWxsXSA9IHNsb3RUb0tl
ZXA7CisKKyAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIGludGVyZmVyaW5nU2xvdCA6IG1faW50
ZXJmZXJlbmNlW3Nsb3RUb0tpbGxdKQorICAgICAgICAgICAgICAgIG1faW50ZXJmZXJlbmNlLmFk
ZChpbnRlcmZlcmluZ1Nsb3QsIHNsb3RUb0tlZXApOworICAgICAgICAgICAgbV9pbnRlcmZlcmVu
Y2UubWF5Q2xlYXIoc2xvdFRvS2lsbCk7CiAgICAgICAgIH0KLSAgICAgICAgaW50ZXJmZXJlbmNl
W3Nsb3RUb0tlZXBdLmFkZChpbnRlcmZlcmVuY2Vbc2xvdFRvS2lsbF0uYmVnaW4oKSwgaW50ZXJm
ZXJlbmNlW3Nsb3RUb0tpbGxdLmVuZCgpKTsKLSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tp
bGxdLmNsZWFyKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7Ci0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAg
Zm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNT
dGFjaygpKQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwKGFyZy5z
dGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoYXJnLmlzU3RhY2soKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6c3RhY2socmVtYXBTdGFja1Nsb3QoYXJnLnN0YWNrU2xvdCgpKSwgYXJnLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzVXNlbGVzc01v
dmUoaW5zdCkpCisgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoaXNVc2VsZXNzTW92ZShpbnN0KSkKLSAgICAgICAgICAgICAg
ICBpbnN0ID0gSW5zdCgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHdlIGFzc2lnbiBz
dGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0
LWZpdC4gRm9yIGVhY2gKKyAgICAgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5k
IHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcg
bm8KKyAgICAgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92
ZXJsYXBzIHdpdGguCisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzID0gYXNz
aWduZWRFc2NhcGVkU3RhY2tTbG90czsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBt
X2NvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgICAgICBpZiAoaXNSZW1hcHBlZFNsb3RJbmRl
eChzbG90LT5pbmRleCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxyZWFk
eSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0
YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3RoZXJTbG90SW5k
ZXggOiBtX2ludGVyZmVyZW5jZVtzbG90LT5pbmRleCgpXSkgeworICAgICAgICAgICAgICAgIGlm
IChpc1JlbWFwcGVkU2xvdEluZGV4KG90aGVyU2xvdEluZGV4KSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdGhlclNsb3QgPSBtX2Nv
ZGUuc3RhY2tTbG90cygpW290aGVyU2xvdEluZGV4XTsKKyAgICAgICAgICAgICAgICBvdGhlclNs
b3RzLmFwcGVuZChvdGhlclNsb3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhc3Np
Z24oc2xvdCwgb3RoZXJTbG90cyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgLy8gTm93
IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBp
cyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKLSAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50
IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBl
bnN1cmluZyBubwotICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhp
cyBvdmVybGFwcyB3aXRoLgotICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzID0gYXNz
aWduZWRFc2NhcGVkU3RhY2tTbG90czsKKworcHJpdmF0ZToKKyAgICBzdHJ1Y3QgQ29hbGVzY2Fi
bGVNb3ZlIHsKKyAgICAgICAgQ29hbGVzY2FibGVNb3ZlKCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgQ29hbGVzY2FibGVNb3ZlKEluZGV4VHlwZSBzcmMsIEluZGV4VHlwZSBkc3Qs
IGRvdWJsZSBmcmVxdWVuY3kpCisgICAgICAgICAgICA6IHNyYyhzcmMpCisgICAgICAgICAgICAs
IGRzdChkc3QpCisgICAgICAgICAgICAsIGZyZXF1ZW5jeShmcmVxdWVuY3kpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2FsZXNjYWJsZU1v
dmUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3JjID09IG90
aGVyLnNyYworICAgICAgICAgICAgICAgICYmIGRzdCA9PSBvdGhlci5kc3QKKyAgICAgICAgICAg
ICAgICAmJiBmcmVxdWVuY3kgPT0gb3RoZXIuZnJlcXVlbmN5OworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvYWxlc2NhYmxlTW92ZSYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXMgIT0gQ29hbGVzY2FibGVNb3ZlKCk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgb3V0LnByaW50KHNyYywgIi0+IiwgZHN0LCAiKCIsIGZyZXF1ZW5jeSwgIiki
KTsKKyAgICAgICAgfQorCisgICAgICAgIEluZGV4VHlwZSBzcmMgeyBzdGQ6Om51bWVyaWNfbGlt
aXRzPEluZGV4VHlwZT46Om1heCgpIH07CisgICAgICAgIEluZGV4VHlwZSBkc3QgeyBzdGQ6Om51
bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpIH07CisgICAgICAgIGZsb2F0IGZyZXF1ZW5j
eSB7IDAuMCB9OworICAgIH07CisKKyAgICBJbnRlcmZlcmVuY2VHcmFwaCBtX2ludGVyZmVyZW5j
ZTsKKyAgICBWZWN0b3I8Q29hbGVzY2FibGVNb3ZlPiBtX2NvYWxlc2NhYmxlTW92ZXM7Cit9Owor
CisvLyBXZSB0cnkgdG8gYXZvaWQgY29tcHV0aW5nIHRoZSBsaXZlbmVzcyBpbmZvcm1hdGlvbiBp
ZiB0aGVyZSBpcyBubyBzcGlsbCBzbG90IHRvIGFsbG9jYXRlCitib29sIHRyeVRyaXZpYWxTdGFj
a0FsbG9jYXRpb24oQ29kZSYgY29kZSkKK3sKICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNv
ZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGlmIChyZW1hcHBlZFN0YWNrU2xvdHNbc2xvdF0p
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChzbG90LT5vZmZz
ZXRGcm9tRlAoKSkgewotICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQu
CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKLSAgICAgICAgSGFz
aFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsK
LSAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5zaXpl
KCkpOwotICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3Rz
LnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgbmV4
dEluZGV4ID0gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5zaXplKCk7Ci0gICAgICAgIGZvciAo
U3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQotICAgICAgICAgICAgb3Ro
ZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisgICAgcmV0dXJuIHRydWU7Cit9CiAK
LSAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK3ZvaWQgYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyhDb2RlJiBjb2RlKQorewor
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZyIpOworCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICBWZWN0b3I8U3Rh
Y2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyA9CisgICAgICAgIGFsbG9jYXRlQW5k
R2V0RXNjYXBlZFN0YWNrU2xvdHNXaXRob3V0Q2hhbmdpbmdGcmFtZVNpemUoY29kZSk7CisKKyAg
ICBpZiAoIXRyeVRyaXZpYWxTdGFja0FsbG9jYXRpb24oY29kZSkpIHsKKyAgICAgICAgaWYgKGNv
ZGUuc3RhY2tTbG90cygpLnNpemUoKSA8IFdURjo6bWF4U2l6ZUZvclNtYWxsSW50ZXJmZXJlbmNl
R3JhcGgpIHsKKyAgICAgICAgICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcjxXVEY6OlNt
YWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKGNvZGUpOworICAgICAgICAg
ICAgYWxsb2NhdG9yLnJ1bihhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgfSBl
bHNlIGlmIChjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVp
bnQxNl90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRv
cjxXVEY6OkxhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKGNvZGUpOwor
ICAgICAgICAgICAgYWxsb2NhdG9yLnJ1bihhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcjxX
VEY6Okh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IoY29kZSk7CisgICAg
ICAgICAgICBhbGxvY2F0b3IucnVuKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgdXBkYXRlRnJhbWVTaXplQmFzZWRPblN0YWNrU2xvdHMoY29kZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzODI0MWJiNjA5
ODguLmZjYzg4MmIwN2Y4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJMzEzRURFQzk3NzhFNDlDOUJFQTkxQ0ZDIC8qIFN0
YWNrVHJhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tU
cmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzN0IyRDY4MjY1NDZFQUEw
MERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVu
c2lnbmVkSW50ZWdlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50
ZWdlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0ZENDgxMTI2NUNCMzgw
MDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJmZXJl
bmNlR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDN0NDMjkxRUE0MEE3
MzAwN0JEOTU2IC8qIFdlYWtMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM4MjAyOUUy
NDZDODRCMDA5OUZENjc2NCAvKiBBU0NJSUxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQVNDSUlMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTM5MUJENkJBNEQxNjRGRDI5NEY5QTkzRCAvKiBTdGRNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU3RkTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDc5LDYgKzEwODAsNyBAQAogCQkJCTMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNl
dC5oICovLAogCQkJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5o
ICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJ
CQkzM0ZENDgxMTI2NUNCMzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJ
CQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJNTE4MkMy
MkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICovLAogCQkJCTBGN0VCODVC
MUZBOEZGNDEwMEYxQUJDQiAvKiBJc29NYWxsb2MuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvd3RmL0hhc2hTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAppbmRleCBhNDAyY2Uy
NzM3NWEuLjJhMjcyODA2MGY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFNldC5o
CisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaApAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdDsKICAgICBib29sIGlzRW1wdHko
KSBjb25zdDsKIAogICAgIHZvaWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh1bnNpZ25lZCBrZXlD
b3VudCkgeyBtX2ltcGwucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShrZXlDb3VudCk7IH0KQEAgLTIw
Miw2ICsyMDMsMTIgQEAgaW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46OmNhcGFj
aXR5KCkgY29uc3QKICAgICByZXR1cm4gbV9pbXBsLmNhcGFjaXR5KCk7IAogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgoraW5saW5l
IHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgViwgVz46Om1lbW9yeVVzZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNhcGFjaXR5KCkgKiBzaXplb2YoVCk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CiBpbmxpbmUgYm9vbCBIYXNoU2V0
PFQsIFUsIFYsIFc+Ojppc0VtcHR5KCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL0ludGVyZmVyZW5jZUdyYXBoLmggYi9Tb3VyY2UvV1RGL3d0Zi9JbnRlcmZlcmVuY2VHcmFw
aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uN2VmMjVlNDczMzNk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvSW50ZXJmZXJlbmNlR3JhcGguaApA
QCAtMCwwICsxLDUyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRlIDx3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBU
aGlzIGZpbGUgb2ZmZXJzIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucyBvZiBhIHNpbXBsZSBpbnRl
cmZlcmVuY2UgZ3JhcGgsIHdpdGggdmFyeWluZyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mu
CisvLyBDb25jZXB0dWFsbHkgdGhleSBhcmUganVzdCBzZXRzIG9mIHBhaXJzIG9mIGludGVnZXJz
CisvLyBBbGwgb2YgdGhlbSBoYXZlIHRoZSBzYW1lIGludGVyZmFjZToKKy8vICAgYm9vbCBjb250
YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisvLyAgIGJvb2wgYWRkQW5kUmV0dXJuSXNO
ZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisvLyAgIHZvaWQgYWRkKEluZGV4VHlw
ZSB1LCBJbmRleFR5cGUgdikKKy8vICAgdm9pZCBjbGVhcigpCisvLyAgIHZvaWQgbWF5Q2xlYXIo
SW5kZXhUeXBlIHUpCisvLyAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikKKy8vICAgdm9p
ZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisvLyAgIHVuc2lnbmVkIHNpemUoKQor
Ly8gICB1bnNpZ25lZCBtZW1vcnlVc2UoKQorLy8gICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkK
Ky8vIFRocmVlIHVzZWZ1bCB0eXBlIGFsaWFzZXMgYXJlIGRlZmluZWQ6CisvLyAgIFNtYWxsSW50
ZXJmZXJlbmNlR3JhcGgsIHdoaWNoIGlzIHRoZSBmYXN0ZXN0IGJ1dCBoYXMgcXVhZHJhdGljIG1l
bW9yeSB1c2UgaW4gdGhlIG1heGltdW0gdmVydGV4IGluZGV4IChiZXN0IGZvciBuIDwgNDAwIGFz
IGl0IGlzIGFscmVhZHkgMjBrQiBieSB0aGF0IHBvaW50KQorLy8gICBMYXJnZUludGVyZmVyZW5j
ZUdyYXBoLCBhcyBsb25nIGFzIHRoZSBpbmRpY2VzIGZpdCBpbiBhIHVpbnQxNl90CisvLyAgIEh1
Z2VJbnRlcmZlcmVuY2VHcmFwaCBvdGhlcndpc2UKKy8vIElmIHlvdSBuZWVkIHRvIGl0ZXJhdGUg
b3ZlciB0aGUgaW5kaWNlcyB0aGF0IGludGVyZmVyZSB3aXRoIGEgZ2l2ZW4gaW5kZXgsIHlvdSBt
dXN0IHVzZSB0aGUgZm9sbG93aW5nOgorLy8gICBTbWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3Jh
cGgKKy8vICAgTGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoCisvLyAgIEh1Z2VJdGVyYWJs
ZUludGVyZmVyZW5jZUdyYXBoCisvLyBUaGUgbGFyZ2UgYW5kIGh1Z2UgdmVyc2lvbnMgYXJlIDJ4
IHRoZSBtZW1vcnkgb2YgdGhlaXIgbm9uLWl0ZXJhYmxlIHZlcnNpb25zLCBidXQgb2ZmZXIgYW4g
YWRkaXRpb25hbCBvcGVyYXRvcltdIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhbiBpdGVyYWJsZSBv
YmplY3QKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnRlcmZlcmVuY2VCaXRWZWN0
b3IgeworcHVibGljOgorICAgIHVzaW5nIEluZGV4VHlwZSA9IFQ7CisgICAgYm9vbCBjb250YWlu
cyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICByZXR1cm4gbV9iaXRW
ZWN0b3IucXVpY2tHZXQoaW5kZXgodSwgdikpOworICAgIH0KKworICAgIGJvb2wgYWRkQW5kUmV0
dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBi
b29sIGFscmVhZHlJbiA9IG1fYml0VmVjdG9yLnF1aWNrU2V0KGluZGV4KHUsIHYpKTsKKyAgICAg
ICAgbV9zaXplICs9ICFhbHJlYWR5SW47CisgICAgICAgIHJldHVybiAhYWxyZWFkeUluOworICAg
IH0KKworICAgIHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAg
ICAgICh2b2lkKSBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgIH0KKworICAgIHZv
aWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKKyAgICAg
ICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSkgeyB9
CisKKyAgICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NF
UlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBt
X251bUVsZW1lbnRzID0gbjsKKyAgICAgICAgbV9iaXRWZWN0b3IuZW5zdXJlU2l6ZShuKm4pOwor
ICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChJbmRleFR5cGUg
aSA9IDA7IGkgPCBtX251bUVsZW1lbnRzOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoSW5kZXhU
eXBlIGogPSBpICsgMTsgaiA8IG1fbnVtRWxlbWVudHM7ICsraikgeworICAgICAgICAgICAgICAg
IGlmIChtX2JpdFZlY3Rvci5xdWlja0dldChpbmRleChpLCBqKSkpCisgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdW5z
aWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gKG1fYml0VmVjdG9yLnNpemUoKSArIDcp
ID4+IDM7IH0KKworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2co
bWVtb3J5VXNlKCkvMTAyNCk7IH0KKworICAgIHN0cnVjdCBJdGVyYWJsZSB7CisgICAgICAgIHN0
cnVjdCBpdGVyYXRvciB7CisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IG1faXRlcmFibGUubV9iaXRWZWN0
b3IuZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbmRleFR5cGUgb3BlcmF0b3IqKCkg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
SW5kZXhUeXBlPihtX2luZGV4IC0gbV9pdGVyYWJsZS5tX3N0YXJ0aW5nSW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBq
dXN0IHVzZSBhIG5vcm1hbCBjb21wYXJpc29uIGJleW9uZCBtX2l0ZXJhYmxlLm1fZW5kLCBiZWNh
dXNlIHRoZSBmaW5kQml0IGluIG9wZXJhdG9yKysgbWF5IHNlbmQgdXMgcHJldHR5IG11Y2ggYW55
d2hlcmUKKyAgICAgICAgICAgICAgICAvLyBXb3JzZTogaXQgaXMgcG9zc2libGUgZm9yIHRoZSB1
c2VyIG9mIHRoaXMgaXRlcmF0b3IgdG8gYWRkIGVsZW1lbnRzIHRvIHRoZSBpbnRlcmZlcmVuY2Ug
Z3JhcGggYmV0d2VlbiBjYWxscyB0byArKworICAgICAgICAgICAgICAgIC8vIFRoaXMgd29uJ3Qg
aW52YWxpZGF0ZSB1cy9jYXVzZSBwcm9ibGVtcyBkaXJlY3RseSwgYXMgdGhlIHVzZXIgd29uJ3Qg
YWZmZWN0IHRoZSBzbGljZSBvZiB0aGUgYml0IHZlY3RvciB0aGF0IHdlJ3JlIGl0ZXJhdGluZyBv
dmVyLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGV5IG1heSB3ZWxsIHNldCBiaXRzIGJleW9u
ZCBpdC4gU28gd2UgY2Fubm90IGNvbXB1dGUgYW4gImlkZWFsIiBlbmQgaXRlcmF0b3IgKGJ5IGxv
b2tpbmcgZm9yIHRoZSBmaXJzdCBiaXQgc2V0IGFmdGVyIHRoZSBzbGljZSB3ZSBjYXJlIGFib3V0
KSBhaGVhZCBvZiB0aW1lLgorICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgd2Ugc2V0IG1fZW5k
IHRvIGluZGV4KHUrMSwgMCkgKHNvIGp1c3QgYWZ0ZXIgdGhlIHNsaWNlIG9mIGludGVyZXN0KSwg
YW5kIHdlIHVzZSB0aGlzIHNsaWdodGx5IHdlaXJkIGNvbXBhcmlzb24gb3BlcmF0b3IgdG8gc3Rp
bGwgc3RvcCBpbiB0aW1lIG9uY2Ugd2UgZ28gYmV5b25kIGl0LgorICAgICAgICAgICAgICAgIGlm
IChtX2luZGV4ID49IG1faXRlcmFibGUubV9lbmQgJiYgb3RoZXIubV9pbmRleCA+PSBtX2l0ZXJh
YmxlLm1fZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSXRlcmFibGUmIG1faXRlcmFibGU7
CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgbV9iZWdpbiB9OyB9CisgICAg
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHsgKnRoaXMsIG1fZW5kIH07IH0KKwor
ICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOworICAgICAgICB1bnNpZ25lZCBt
X3N0YXJ0aW5nSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYmVnaW47CisgICAgICAgIHVuc2ln
bmVkIG1fZW5kOworICAgIH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1
KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYmVnaW4gPSBtX2JpdFZlY3Rvci5maW5k
Qml0KGluZGV4KHUsIDApLCB0cnVlKTsKKyAgICAgICAgdW5zaWduZWQgZW5kID0gaW5kZXgodSAr
IDEsIDApOworICAgICAgICByZXR1cm4geyBtX2JpdFZlY3RvciwgaW5kZXgodSwgMCksIGJlZ2lu
LCBlbmQgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgaW5kZXgoSW5kZXhUeXBl
IGksIEluZGV4VHlwZSBqKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251bUVs
ZW1lbnRzICsgajsKKyAgICB9CisKKyAgICBCaXRWZWN0b3IgbV9iaXRWZWN0b3I7CisgICAgdW5z
aWduZWQgbV9zaXplIHswfTsKKyAgICBJbmRleFR5cGUgbV9udW1FbGVtZW50czsKK307CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJVD4KK2NsYXNzIEludGVyZmVyZW5jZVZlY3Rv
ciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gSVQ7CisgICAgYm9vbCBjb250YWlu
cyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0
b3JbdV0uY29udGFpbnModik7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeSA9IG1fdmVjdG9yW3VdLmFkZCh2KS5pc05ld0VudHJ5OworICAgICAgICBtX3NpemUgKz0g
aXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnk7CisgICAgfQorCisgICAgdm9p
ZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgKHZvaWQpIGFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisg
ICAgeworICAgICAgICBtX3ZlY3Rvci5jbGVhcigpOworICAgICAgICBtX3NpemUgPSAwOworICAg
IH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlIHUpIHsgbV92ZWN0b3JbdV0uY2xlYXIo
KTsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAgICAg
ICAgbV92ZWN0b3IucmVzaXplKG4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKSA7ICsraSkg
eworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA6IG1fdmVjdG9yW2ldKQorICAgICAgICAg
ICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdW5zaWduZWQgbWVtb3J5
VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1lbW9yeSA9IDA7CisgICAgICAg
IGZvciAoY29uc3QgVCYgc2V0IDogbV92ZWN0b3IpCisgICAgICAgICAgICBtZW1vcnkgKz0gc2V0
Lm1lbW9yeVVzZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5OworICAgIH0KKworICAgIHZvaWQg
ZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0K
KworICAgIHN0cnVjdCBJdGVyYWJsZSB7CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5h
bWUgVDo6aXRlcmF0b3I7CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9zZXQuYmVnaW4oKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X3NldC5lbmQoKTsgfQorICAgICAgICBjb25zdCBUJiBtX3NldDsKKyAgICB9OworCisgICAgSXRl
cmFibGUgb3BlcmF0b3JbXShJbmRleFR5cGUgdSkgY29uc3QgeyByZXR1cm4geyBtX3ZlY3Rvclt1
XSB9OyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIHVuc2lnbmVk
IG1fc2l6ZSB7MH07Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVW5kaXJlY3Rl
ZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUg
PSB0eXBlbmFtZSBUOjpJbmRleFR5cGU7CisgICAgdXNpbmcgSXRlcmFibGUgPSB0eXBlbmFtZSBU
OjpJdGVyYWJsZTsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikg
eyByZXR1cm4gbV91bmRlcmx5aW5nLmNvbnRhaW5zKHUsIHYpOyB9CisKKyAgICBib29sIGFkZEFu
ZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAg
ICAgYm9vbCBpc05ld0VudHJ5MSA9IG1fdW5kZXJseWluZy5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5
KHUsIHYpOworICAgICAgICBib29sIGlzTmV3RW50cnkyID0gbV91bmRlcmx5aW5nLmFkZEFuZFJl
dHVybklzTmV3RW50cnkodiwgdSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeTIs
IGlzTmV3RW50cnkxID09IGlzTmV3RW50cnkyKTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnkx
OworICAgIH0KKworICAgIHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7
CisgICAgICAgIG1fdW5kZXJseWluZy5hZGQodSwgdik7CisgICAgICAgIG1fdW5kZXJseWluZy5h
ZGQodiwgdSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV91bmRlcmx5aW5nLmNsZWFy
KCk7IH0KKyAgICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KSB7IG1fdW5kZXJseWluZy5tYXlD
bGVhcih1KTsgfQorICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikgeyBtX3VuZGVybHlp
bmcuc2V0TWF4SW5kZXgobik7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeyBtX3VuZGVybHlpbmcuZm9y
RWFjaChmdW5jdG9yKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Vu
ZGVybHlpbmcuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1
cm4gbV91bmRlcmx5aW5nLm1lbW9yeVVzZSgpOyB9CisgICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5L
QigpIGNvbnN0IHsgbV91bmRlcmx5aW5nLmR1bXBNZW1vcnlVc2VJbktCKCk7IH0KKyAgICBJdGVy
YWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmdb
dV07IH0KKworcHJpdmF0ZToKKyAgICBUIG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoaXMgaXMg
Z2VuZXJhbGx5IGJldHRlciB0aGFuIHRoZSBEdXBsaWNhdGluZyB2ZXJzaW9uLCB0aGVyZSBhcmUg
dHdvIHJlYXNvbnMgbm90IHRvIHVzZSBpdCB0aG91Z2g6CisvLyAtIEZvciBCaXRWZWN0b3IsIGl0
IGhhcyBubyBlZmZlY3Qgb24gbWVtb3J5IHVzZSwgYW5kIGFkZHMgYSBicmFuY2ggdG8gZXZlcnkg
Y2FsbCB0byBjb250YWlucy9hZGRBbmRSZXR1cm5Jc05ld0VudHJ5CisvLyAtIEl0IG1ha2VzIGl0
IGltcG9zc2libGUgdG8gaXRlcmF0ZSBvdmVyIHRoZSBpbmRpY2VzIHRoYXQgaW50ZXJmZXJlIHdp
dGggYSBwYXJ0aWN1bGFyIGluZGV4LiBUaGlzIGNhbiBiZSByZXF1aXJlZCBmb3Igc29tZSB1c2Vz
IChzZWUgQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZykKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXIgeworcHVibGljOgorICAgIHVz
aW5nIEluZGV4VHlwZSA9IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAgICBib29sIGNvbnRhaW5z
KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2IDwgdSkKKyAg
ICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fdW5kZXJseWluZy5j
b250YWlucyh1LCB2KTsKKyAgICB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnko
SW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAg
ICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nLmFk
ZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAg
ICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICBtX3VuZGVybHlpbmcuYWRkKHUsIHYpOworICAg
IH0KKworICAgIHZvaWQgY2xlYXIoKSB7IG1fdW5kZXJseWluZy5jbGVhcigpOyB9CisgICAgdm9p
ZCBtYXlDbGVhcihJbmRleFR5cGUgdSkgeyBtX3VuZGVybHlpbmcubWF5Q2xlYXIodSk7IH0KKyAg
ICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVkIG4pIHsgbV91bmRlcmx5aW5nLnNldE1heEluZGV4
KG4pOyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIHsgbV91bmRlcmx5aW5nLmZvckVhY2goZnVuY3Rvcik7
IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nLnNpemUo
KTsgfQorICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJseWlu
Zy5tZW1vcnlVc2UoKTsgfQorICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IG1f
dW5kZXJseWluZy5kdW1wTWVtb3J5VXNlSW5LQigpOyB9CisKK3ByaXZhdGU6CisgICAgVCBtX3Vu
ZGVybHlpbmc7Cit9OworCisvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRz
LCBvciAyMGtCIGZvciBuID0gNDAwLgorY29uc3RleHByIHVuc2lnbmVkIG1heFNpemVGb3JTbWFs
bEludGVyZmVyZW5jZUdyYXBoID0gNDAwOwordXNpbmcgRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNl
R3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI8SW50ZXJmZXJlbmNlQml0
VmVjdG9yPHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5j
ZUdyYXBoID0gRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBEZWZhdWx0TGFy
Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZl
cmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50
MTZfdD4+OwordXNpbmcgRGVmYXVsdEh1Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRF
ZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZElu
dGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50MzJfdD4+OwordXNpbmcgRGVmYXVsdExhcmdlSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJ
bnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+
LCB1aW50MTZfdD4+OwordXNpbmcgRGVmYXVsdEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
ID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxM
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90Pj47CisKKy8v
IFNldCB0byBvbmUgdG8gcnVuIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHBhcmFsbGVs
IHdpdGggdGhlIG9wdGltaXplZCBkYXRhc3RydWN0dXJlLCB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFn
cmVlIG9uIGV2ZXJ5IG1ldGhvZCBjYWxsLgorLy8gQmV3YXJlOiB0aGlzIGlzIG5hdHVyYWxseSBt
dWNoIHNsb3dlciBhbmQgbWVtb3J5IGh1bmdyeQorI2RlZmluZSBURVNUX09QVElNSVpFRF9JTlRF
UkZFUkVOQ0VfR1JBUEggMAorI2lmICFURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgK
KwordXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRTbWFsbEludGVyZmVyZW5j
ZUdyYXBoOwordXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRMYXJnZUludGVy
ZmVyZW5jZUdyYXBoOwordXNpbmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdEh1Z2VJ
bnRlcmZlcmVuY2VHcmFwaDsKKwordXNpbmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
ID0gRGVmYXVsdFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIExhcmdlSXRl
cmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGg7Cit1c2luZyBIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRIdWdl
SXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKKworI2Vsc2UgLy8gVEVTVF9PUFRJTUlaRURfSU5U
RVJGRVJFTkNFX0dSQVBICisKKy8vIFRoaXMgaXMgYW4gdW5vcHRpbWl6ZWQgcmVmZXJlbmNlIGlt
cGxlbWVudGF0aW9uLCBmb3IgdXNlIHdpdGggSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGgg
YmVsb3cKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgSW50ZXJmZXJlbmNlSGFzaFNldCB7
CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gVDsKKyAgICB1c2luZyBJbnRlcmZlcmVu
Y2VFZGdlID0gc3RkOjpwYWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPjsKKyAgICBib29sIGNvbnRh
aW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nl
dC5jb250YWlucyh7IHUsIHYgfSk7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05l
d0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3NldC5hZGQoeyB1LCB2IH0pLmlzTmV3RW50cnk7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5k
ZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgbV9zZXQuYWRkKHsgdSwgdiB9
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFy
KCk7CisgICAgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChuLCBuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+
OjptYXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3Ig
KGF1dG8gZWRnZSA6IG1fc2V0KQorICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9CisKKyAg
ICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdCB7IHJldHVybiBtX3NldC5jYXBhY2l0eSgpICog
c2l6ZW9mKEludGVyZmVyZW5jZUVkZ2UpOyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktC
KCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEwMjQpOyB9CisKK3ByaXZhdGU6CisgICAg
SGFzaFNldDxJbnRlcmZlcmVuY2VFZGdlPiBtX3NldDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVPgorY2xhc3MgSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGggewor
cHVibGljOgorICAgIHVzaW5nIEluZGV4VHlwZSA9IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAg
ICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxJbmRleFR5cGUsIHR5cGVuYW1lIFU6OkluZGV4
VHlwZT46OnZhbHVlKTsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUg
dikKKyAgICB7CisgICAgICAgIGJvb2wgY29udGFpbnNJbkEgPSBtX3NldEEuY29udGFpbnModSwg
dik7CisgICAgICAgIGJvb2wgY29udGFpbnNJbkIgPSBtX3NldEIuY29udGFpbnModSwgdik7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNvbnRhaW5zSW5BID09IGNvbnRhaW5zSW5CKTsKKyAgICAg
ICAgcmV0dXJuIGNvbnRhaW5zSW5BOworICAgIH0KKworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNO
ZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGlz
TmV3RW50cnlBID0gbV9zZXRBLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAg
IGJvb2wgaXNOZXdFbnRyeUIgPSBtX3NldEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOworICAg
ICAgICByZXR1cm4gaXNOZXdFbnRyeUE7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBl
IHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgbV9zZXRBLmFkZCh1LCB2KTsKKyAgICAg
ICAgbV9zZXRCLmFkZCh1LCB2KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7Cisg
ICAgICAgIG1fc2V0QS5jbGVhcigpOworICAgICAgICBtX3NldEIuY2xlYXIoKTsKKyAgICB9CisK
KyAgICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KQorICAgIHsKKyAgICAgICAgbV9zZXRBLm1h
eUNsZWFyKHUpOworICAgICAgICBtX3NldEIubWF5Q2xlYXIodSk7CisgICAgfQorCisgICAgdm9p
ZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6
Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAgICAgICAgbV9zZXRBLnNldE1h
eEluZGV4KG4pOworICAgICAgICBtX3NldEIuc2V0TWF4SW5kZXgobik7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX3NldEEuZm9yRWFjaChmdW5jdG9yKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVk
IHNpemVBID0gbV9zZXRBLnNpemUoKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUIgPSBtX3NldEIu
c2l6ZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBzaXplQik7CisgICAgICAg
IHJldHVybiBzaXplQTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0QS5tZW1vcnlVc2UoKSArIG1fc2V0Qi5tZW1vcnlV
c2UoKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGRhdGFMb2cobV9zZXRBLm1lbW9yeVVzZSgpLzEwMjQsICIgLT4gIiwgbV9zZXRC
Lm1lbW9yeVVzZSgpLzEwMjQpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFQgbV9zZXRBOwor
ICAgIFUgbV9zZXRCOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Citj
bGFzcyBJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoIDogcHVibGljIEluc3Ry
dW1lbnRlZEludGVyZmVyZW5jZUdyYXBoPFQsIFU+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNl
ID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8VCwgVT47CisgICAgdXNpbmcgSW5kZXhU
eXBlID0gdHlwZW5hbWUgQmFzZTo6SW5kZXhUeXBlOworCisgICAgc3RydWN0IEl0ZXJhYmxlIHsK
KyAgICAgICAgSXRlcmFibGUodHlwZW5hbWUgVDo6SXRlcmFibGUgaXRlcmFibGVBLCB0eXBlbmFt
ZSBVOjpJdGVyYWJsZSBpdGVyYWJsZUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoSW5k
ZXhUeXBlIHZhbHVlIDogaXRlcmFibGVBKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVu
ZCh2YWx1ZSk7CisgICAgICAgICAgICBWZWN0b3I8SW5kZXhUeXBlPiB2YWx1ZXNCOworICAgICAg
ICAgICAgZm9yIChJbmRleFR5cGUgdmFsdWUgOiBpdGVyYWJsZUIpCisgICAgICAgICAgICAgICAg
dmFsdWVzQi5hcHBlbmQodmFsdWUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1
ZXMuc2l6ZSgpID09IHZhbHVlc0Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIHN0ZDo6c29ydChtX3Zh
bHVlcy5iZWdpbigpLCBtX3ZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICBzdGQ6OnNvcnQodmFs
dWVzQi5iZWdpbigpLCB2YWx1ZXNCLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChtX3ZhbHVlc1tpXSA9PSB2YWx1ZXNCW2ldKTsKKyAgICAgICAgfQorICAgICAgICB1
c2luZyBpdGVyYXRvciA9IHR5cGVuYW1lIFZlY3RvcjxJbmRleFR5cGU+Ojpjb25zdF9pdGVyYXRv
cjsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlcy5lbmQo
KTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvcjxJbmRleFR5cGU+IG1fdmFsdWVzOworICAg
IH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHsgQmFzZTo6bV9zZXRBW3VdLCBCYXNlOjptX3NldEJbdV0gfTsKKyAg
ICB9Cit9OworCit1c2luZyBSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRF
ZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90Pj47Cit1c2luZyBI
dWdlUmVmZXJlbmNlSW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0
ZXI8SW50ZXJmZXJlbmNlSGFzaFNldDx1aW50MzJfdD4+OworCit1c2luZyBTbWFsbEludGVyZmVy
ZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJlbmNlSW50ZXJm
ZXJlbmNlR3JhcGgsIERlZmF1bHRTbWFsbEludGVyZmVyZW5jZUdyYXBoPjsKK3VzaW5nIExhcmdl
SW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVu
Y2VJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+OwordXNp
bmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8
SHVnZVJlZmVyZW5jZUludGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdy
YXBoPjsKKwordXNpbmcgUmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGly
ZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8SGFzaFNldDx1
aW50MTZfdCwgSW50SGFzaDx1aW50MTZfdD4sIFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRz
PHVpbnQxNl90Pj4sIHVpbnQxNl90Pj47Cit1c2luZyBIdWdlUmVmZXJlbmNlSXRlcmFibGVJbnRl
cmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZl
cmVuY2VWZWN0b3I8SGFzaFNldDx1aW50MzJfdCwgSW50SGFzaDx1aW50MzJfdD4sIFVuc2lnbmVk
V2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4sIHVpbnQzMl90Pj47CisKK3VzaW5nIFNt
YWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGg8UmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNt
YWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBMYXJnZUl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPFJlZmVy
ZW5jZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGg+OwordXNpbmcgSHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0
cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPEh1Z2VSZWZlcmVuY2VJdGVyYWJsZUlu
dGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+Owor
CisjZW5kaWYgLy8gVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICisKK30gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2Vy
U2V0LmgKaW5kZXggOWI2YjNkODdlNzg0Li44OGUzZjQ1MTA5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKKysrIGIvU291cmNlL1dU
Ri93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaApAQCAtNTMsNyArNTMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9taW4oMCkKICAgICAgICAgLCBtX21heCgwKQogICAgIHsKLSAg
ICAgICAgbmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3I7CisgICAgICAgIG5ldyAo
Tm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yOwogICAgIH0KIAogICAgIH5M
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCgpCkBAIC03MCw5ICs3MCwyMiBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9tYXgob3RoZXIubV9tYXgpCiAgICAgewogICAgICAgICBpZiAoaXNCaXRW
ZWN0b3IoKSkKLSAgICAgICAgICAgIG5ldyAoJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9y
KFdURk1vdmUob3RoZXIubV9pbmxpbmUuYml0VmVjdG9yKSk7CisgICAgICAgICAgICBuZXcgKE5v
dE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG90aGVyLm1faW5s
aW5lLmJpdFZlY3RvcikpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgKCZtX2lubGlu
ZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShvdGhlci5tX2lubGluZS5oYXNoU2V0KSk7CisgICAgICAg
ICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShvdGhlci5t
X2lubGluZS5oYXNoU2V0KSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAg
ICAgICBtX3NpemUgPSAwOworICAgICAgICBtX21pbiA9IDA7CisgICAgICAgIG1fbWF4ID0gMDsK
KyAgICAgICAgaWYgKGlzQml0VmVjdG9yKCkpCisgICAgICAgICAgICBtX2lubGluZS5iaXRWZWN0
b3IuY2xlYXJBbGwoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2lubGluZS5oYXNo
U2V0Ln5IYXNoU2V0KCk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5iaXRW
ZWN0b3IpIEJpdFZlY3RvcjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgY29udGFpbnMo
SW5kZXhUeXBlIHZhbHVlKSBjb25zdApAQCAtMTMxLDkgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAg
ICAgSW5kZXhUeXBlIG5ld01pbiA9IHN0ZDo6bWluKG1fbWluLCB2YWx1ZSk7CiAgICAgICAgIElu
ZGV4VHlwZSBuZXdNYXggPSBzdGQ6Om1heChtX21heCwgdmFsdWUpOwogICAgICAgICB1bnNpZ25l
ZCBiaXRWZWN0b3JTaXplID0gKG5ld01heCAtIG5ld01pbikgLyA4OwotICAgICAgICB1bnNpZ25l
ZCBoYXNoU2V0RXN0aW1hdGVkT2NjdXBhbmN5T3ZlcmhlYWQgPSAzOyAvLyBtYXggb2NjdXBhbmN5
IGZvciBhIGxhcmdlIEhhc2hTZXQgaXMgNTAlCi0gICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNo
U2V0Q2FwYWNpdHkgPSBzdGQ6Om1heCg4dSwgbV9zaXplKSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1
cGFuY3lPdmVyaGVhZDsKLSAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRTaXplID0gd291
bGRCZUhhc2hTZXRDYXBhY2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgICAgICB1bnNpZ25l
ZCB3b3VsZEJlSGFzaFNldFNpemUgPSBlc3RpbWF0ZUhhc2hTZXRTaXplKG1fc2l6ZSk7CiAgICAg
ICAgIGlmICh3b3VsZEJlSGFzaFNldFNpemUgKiAyIDwgYml0VmVjdG9yU2l6ZSkgewogICAgICAg
ICAgICAgdHJhbnNpdGlvblRvSGFzaFNldCgpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBt
X2lubGluZS5oYXNoU2V0LmFkZCh2YWx1ZSk7CkBAIC0yNjksNiArMjgwLDEzIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAmJiAhVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8SW5kZXhUeXBl
Pjo6aXNEZWxldGVkVmFsdWUodmFsdWUpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGVzdGltYXRl
SGFzaFNldFNpemUodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGhhc2hTZXRF
c3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFy
Z2UgSGFzaFNldCBpcyA1MCUKKyAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0
eSA9IHN0ZDo6bWF4KDh1LCBuKSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZDsK
KyAgICAgICAgcmV0dXJuIHdvdWxkQmVIYXNoU2V0Q2FwYWNpdHkgKiBzaXplb2YoSW5kZXhUeXBl
KTsKKyAgICB9CisKICAgICB2b2lkIHRyYW5zaXRpb25Ub0hhc2hTZXQoKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKGlzQml0VmVjdG9yKCkpOwpAQCAtMjc4LDcgKzI5Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGZvciAoSW5kZXhUeXBlIG9sZEluZGV4IDogbV9pbmxpbmUuYml0VmVjdG9yKQogICAg
ICAgICAgICAgbmV3U2V0LmFkZChvbGRJbmRleCArIG1fbWluKTsKICAgICAgICAgbV9pbmxpbmUu
Yml0VmVjdG9yLn5CaXRWZWN0b3IoKTsKLSAgICAgICAgbmV3ICgmbV9pbmxpbmUuaGFzaFNldCkg
U2V0KFdURk1vdmUobmV3U2V0KSk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmhh
c2hTZXQpIFNldChXVEZNb3ZlKG5ld1NldCkpOwogICAgICAgICBtX3NpemUgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7CiAKICAgICAgICAgQVNTRVJUKCFpc0JpdFZlY3Rv
cigpKTsKQEAgLTI5Nyw3ICszMTUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIEFT
U0VSVChuZXdCaXRWZWN0b3IucXVpY2tHZXQoMCkpOwogICAgICAgICBtX2lubGluZS5oYXNoU2V0
Ln5TZXQoKTsKLSAgICAgICAgbmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RG
TW92ZShuZXdCaXRWZWN0b3IpKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuYml0
VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShuZXdCaXRWZWN0b3IpKTsKIAogICAgICAgICBBU1NF
UlQoaXNCaXRWZWN0b3IoKSk7CiAgICAgfQo=
</data>
<flag name="commit-queue"
          id="450976"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429786</attachid>
            <date>2021-05-26 13:05:53 -0700</date>
            <delta_ts>2021-05-27 13:19:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>67895</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDU0ZGJlZTkwY2UwNy4uMzczZTZjNGI4NzE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAyMS0wNS0yNiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEFpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3Jpbmcgc2hvdWxkIHVzZSB0aGUgb3B0aW1pemVkIGludGVyZmVyZW5j
ZSBncmFwaHMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gY2hhbmdl
IGluIHRoaXMgcGF0Y2ggaXMgdGhhdCBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIGlz
IG5vdyB1c2luZyB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1Y3R1cmVzIGluIHd0Zi9JbnRlcmZlcmVu
Y2VHcmFwaC5oLgorICAgICAgICBUaGlzIHJlcXVpcmVkIHRlbXBsYXRpbmcgbW9zdCBvZiBpdCBv
dmVyIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGggdXNlZCAoU21hbGwvTGFyZ2UvSHVnZSksIGJ1dCBJ
IHRyaWVkIGtlZXBpbmcgc29tZSBjb21tb24gcGFydHMgb3V0IG9mIHRoZSB0ZW1wbGF0ZWQgY2xh
c3MgdG8gbWluaW1pemUgdGhlIGltcGFjdCBvbiBjb21waWxlIHRpbWVzIGFuZCBiaW5hcnkgc2l6
ZS4KKworICAgICAgICBBIGNvbnNlcXVlbmNlIG9mIHRoYXQgY2hhbmdlIGlzIHRoYXQgY29hbGVz
Y2FibGVNb3ZlcyBhbmQgcmVtYXBwZWRTdGFja1Nsb3RzIG5vdyBzdG9yZSBpbmRpY2VzIGluc3Rl
YWQgb2YgZGlyZWN0IHBvaW50ZXJzIHRvIFN0YWNrU2xvdHMsIHJlc3VsdGluZyBpbiBhIG1lbW9y
eSByZWR1Y3Rpb24gb2YgYWJvdXQgM3ggYXMgd2VsbC4KKworICAgICAgICBBbm90aGVyIGNvbnNl
cXVlbmNlIGlzIHRoYXQgSSBoYWQgdG8gc2xpZ2h0bHkgYWx0ZXIgdGhlIHdheSB0aGF0IGNvYWxl
c2Npbmcgd29ya3M6IGluc3RlYWQgb2YgY2FyZWZ1bGx5IHJlbW92aW5nIHRoZSBpbnRlcmZlcmVu
Y2UgZWRnZXMgb2YgdGhlIGtpbGxlZCBzbG90LCB3ZSBzaW1wbHkgdXNlIG1heUNsZWFyKCkgd2hp
Y2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtb3ZlIGFueXRoaW5nLgorICAgICAgICBJIGJlbGll
dmUgdGhhdCB0aGlzIGlzIHNvdW5kLCBiZWNhdXNlIGV2ZXJ5IHN1YnNlcXVlbnQgYWNjZXNzIHRv
IG1faW50ZXJmZXJlbmNlIGNoZWNrcyB3aGV0aGVyIGEgc2xvdCBoYXMgYmVlbiBjb2FsZXNjZWQg
Zmlyc3QsIHNvIGRyb3BwaW5nIHRoZXNlIGVkZ2VzIGlzIHB1cmVseSBhIG1lbW9yeSBzYXZpbmcs
IGJ1dCBoYXMgbm8gbG9naWNhbCBlZmZlY3QuCisKKyAgICAgICAgU2xpZ2h0bHkgbW9yZSBjb25j
ZXJuaW5nbHksIEkndmUgaGFkIHRvIHNraXAgY29hbGVzY2luZyBzbG90cyB3aGVuIHRoZSBzbG90
VG9LaWxsIGlzIHNlbGYtaW50ZXJmZXJpbmcuIFRoZSBjb2RlIHByZXZpb3VzbHkgaGFkIHNvbWUg
ZmFpcmx5IGludHJpY2F0ZSBjb2RlIGZvciB0aGF0IGNhc2UsIHdoaWNoIGJyb2tlIGp1c3QgYWJv
dXQgZXZlcnkgaW52YXJpYW50IEkgcmVseSBvbiAoaWYgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3Rs
eSB0aGUgZWRnZXMgd2VyZSBubyBsb25nZXIgdW5kaXJlY3RlZCkuIFNpbmNlIGl0IG9ubHkgb2Nj
dXJzIGEgZmV3IHRpbWVzIGluIGFsbCBvZiBKZXRTdHJlYW0yLCBhbmQgaGFzIG5vIGVmZmVjdCBv
biBhdmVyYWdlIGZyYW1lIHNpemUgSSBmZWVsIGNvbWZvcnRhYmxlIHNraXBwaW5nIHRoZSBjb2Fs
ZXNjaW5nIGluIHRoYXQgY2FzZS4KKworICAgICAgICBUaGUgbmV3IGNvZGUgd2FzIHRlc3RlZCBp
biBhIGZldyB3YXlzOgorICAgICAgICAtIHJ1bm5pbmcgb24gSmV0U3RyZWFtMiB3aXRoIGFzYW4K
KyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgd2l0aCBURVNUX09QVElNSVpFRF9JTlRF
UkZFUkVOQ0VfR1JBUEgKKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgYW5kIGxvZ2dp
bmcgdGhlIGZyYW1lIHNpemVzIGF0IHRoZSBlbmQgb2YgdGhpcyBwaGFzZSwgYW5kIGNvbXBhcmlu
ZyB0byB0aGUgcmVzdWx0cyBvZiBkb2luZyB0aGUgc2FtZSBvbiBUb1QgKHNhbWUgYXZlcmFnZSBm
cmFtZSBzaXplKQorCisgICAgICAgIFRoZSB0d28gZnVuY3Rpb25zIHdoZXJlIHRoaXMgY29kZSBo
YWQgdGhlIGxhcmdlc3QgbWVtb3J5IGZvb3RwcmludCBpbiBKZXRTdHJlYW0yIHdlcmUgYm90aCBp
biB0c2Ytd2FzbS4KKyAgICAgICAgT25lIGhhcyA3NTEgc3RhY2sgc2xvdHMsIGFuZCBoYWQgYW4g
aW50ZXJmZXJlbmNlIGdyYXBoIG9mIDIuMU1CIGFuZCBhIGNvYWxlc2NhYmxlTW92ZXMgdmVjdG9y
IG9mIDQ0MGtCCisgICAgICAgIFRoZSBvdGhlciBoYXMgNjczIHN0YWNrIHNsb3RzLCBhbmQgaGFk
IGFuIGludGVyZmVyZW5jZSBncmFwaCBvZiAxLjlNQiBhbmQgYSBjb2FsZXNjYWJsZU1vdmVzIHZl
Y3RvciBvZiA0MjFrQi4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IHJlc3BlY3RpdmVs
eSB1c2UgNzlrQisxNDZrQiBhbmQgNjdrQisxNDBrQgorICAgICAgICBUaGUgZWZmZWN0IG9uIHRo
ZSByZXN0IG9mIEpldFN0cmVhbTIgaXMgbGVzcyBsaWtlbHkgdG8gbWF0dGVyIGFzIGZldyBmdW5j
dGlvbnMgdXNlZCBtb3JlIHRoYW4gYSBmZXcgZG96ZW5zIG9mIGtCIGluIHRoaXMgcGhhc2UsIGJ1
dCBpbiBwZXJjZW50YWdlcyBhcmUganVzdCBhcyBodWdlLgorCisgICAgICAgIE1vcmUgaW1wb3J0
YW50bHkgKGFuZCB0aGUgcmVhc29uIEkgd3JvdGUgdGhpcyBwYXRjaCBpbiB0aGUgZmlyc3QgcGxh
Y2UpLCBJIGNoZWNrZWQgbXJ1Ynktd2FzbS5hb3Rva2kuZGV2IHdoaWNoIHdpdGggYSBmZXcgb3Ro
ZXIgcGFnZXMgZm9yY2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhD
b2xvcmluZyBiZWNhdXNlIG9mIGpldHNhbXMuCisgICAgICAgIEl0IGhhcyB0d28gbWFzc2l2ZSBm
dW5jdGlvbnMgdGhhdCByZWFjaCB0aGlzIHBoYXNlIGlmIEkgaW5jcmVhc2UgT3B0aW9uczo6bWF4
aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nOgorICAgICAgICAtIGFib3V0IDZrIHN0YWNrIHNsb3Rz
IC0+IDIxNU1CICsgNk1CIChpbnRlcmZlcmVuY2UgZ3JhcGggKyBjb2FsZXNjYWJsZU1vdmVzKQor
ICAgICAgICAtIGFib3V0IDlrIHN0YWNrIHNsb3RzIC0+IDM5NU1CICsgNE1CCisgICAgICAgIEFm
dGVyIHRoaXMgcGF0Y2gsIHRoZXkgcmVzcGVjdGl2ZWx5IHVzZSA0LjVNQisyTUIgYW5kIDlNQisx
LjVNQiwgb3Igcm91Z2hseSBhIDQweCBpbXByb3ZlbWVudC4KKyAgICAgICAgQ29tYmluZWQgd2l0
aCB0aGUgcmVjZW50IGltcHJvdmVtZW50cyB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLCBJIGhv
cGUgdG8gYmUgYWJsZSB0byBpbmNyZWFzZSBPcHRpb25zOjptYXhpbXVtVG1wc0ZvckdyYXBoQ29s
b3Jpbmcgc29vbiAoaW4gYSBkaWZmZXJlbnQgcGF0Y2ggZm9yIGVhc2llciBiaXNlY3Rpb24gaWYg
ZWl0aGVyIGNhdXNlIGEgcGVyZiByZWdyZXNzaW9uKS4KKyAgICAgICAgVGhpcyB3b3VsZCBiZSBo
ZWxwZnVsLCBzaW5jZSBpdHMgbG93ZXJpbmcgY3JhdGVyZWQgb3VyIHBlcmZvcm1hbmNlIG9uIHNv
bWUgb3RoZXIgd2FzbSBhcHBsaWNhdGlvbiBieSA4eC4KKworICAgICAgICBJbiB0ZXJtcyBvZiBj
b21waWxlIHRpbWVzLCB0aGlzIHBhdGNoIGxvd2VyZWQgdGhlIHRpbWUgc3BlbnQgaW4gQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZyBvdmVyIHRoZSBjb3Vyc2Ugb2YgYSBydW4gb2YgSmV0U3Ry
ZWFtMiBmcm9tIHJvdWdobHkgMzUwbXMgdG8gcm91Z2hseSAyNzBtcy4KKyAgICAgICAgVGhpcyBp
cyBhbG1vc3QgY2VydGFpbmx5IG5lZ2xpZ2libGUsIGJ1dCBhdCBsZWFzdCBpdCBndWFyYW50ZWVz
IHRoYXQgaXQgZGlkIG5vdCByZWdyZXNzLgorCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcpOgorCiAyMDIxLTA1LTI0ICBSb2JpbiBNb3Jpc3NldCAg
PHJtb3Jpc3NldEBhcHBsZS5jb20+CiAKICAgICAgICAgV2hlbiBydW5uaW5nIHdpdGggLS1yZXBv
cnRUb3RhbFBoYXNlVGltZXM9MSwgd2Ugc2hvdWxkIGFsc28gbG9nIHRoZSBtYXggdGltZSBpbiBh
IHBoYXNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCmluZGV4IDllMTYy
MzdhN2JkYi4uMjZiNDRiNWViMWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9y
aW5nLmNwcApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgIkFpclVzZUNvdW50cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KLSNpbmNs
dWRlIDx3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
SW50ZXJmZXJlbmNlR3JhcGguaD4KICNpbmNsdWRlIDx3dGYvU21hbGxTZXQuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKQEAgLTUyLDIzOCArNTIsNiBAQCBzdGF0aWMgY29uc3RleHByIGJv
b2wgdHJhY2VEZWJ1ZyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydFN0YXRz
ID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgcmVwb3J0SW50ZXJmZXJlbmNlR3JhcGhN
ZW1vcnlVc2UgPSBmYWxzZTsKIAotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4VHlwZT4KLWNsYXNz
IEludGVyZmVyZW5jZUhhc2hTZXQgewotICAgIC8vIEludGVyZmVyZW5jZSBlZGdlcyBhcmUgbm90
IGRpcmVjdGVkLiBBbiBlZGdlIGJldHdlZW4gYW55IHR3byBUbXBzIGlzIHJlcHJlc2VudGVkCi0g
ICAgLy8gYnkgdGhlIGNvbmNhdGVuYXRlZCB2YWx1ZXMgKHRocm91Z2ggVG1wTWFwcGVyKSBvZiB0
aGUgc21hbGxlc3QgVG1wIGZvbGxvd2VkIGJ5IHRoZSBiaWdnZXIgVG1wLgotICAgIHVzaW5nIElu
dGVyZmVyZW5jZUVkZ2UgPSBzdGQ6OnBhaXI8SW5kZXhUeXBlLCBJbmRleFR5cGU+OwotcHVibGlj
OgotICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAg
ICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwotICAgICAgICBy
ZXR1cm4gbV9zZXQuY29udGFpbnMoeyB1LCB2IH0pOwotICAgIH0KLQotICAgIGJvb2wgYWRkQW5k
UmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAg
ICBpZiAodiA8IHUpCi0gICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAgICAgIHJldHVy
biBtX3NldC5hZGQoeyB1LCB2IH0pLmlzTmV3RW50cnk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVh
cigpCi0gICAgewotICAgICAgICBtX3NldC5jbGVhcigpOwotICAgIH0KLQotICAgIHZvaWQgc2V0
TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQobiwg
biA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkpOwotICAgIH0KLQotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgZm9yIChhdXRvIGVkZ2UgOiBtX3NldCkKLSAg
ICAgICAgICAgIGZ1bmN0b3IoZWRnZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0LnNpemUoKTsgfQotCi0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXQuY2FwYWNpdHkoKSAqIHNpemVvZihJbnRlcmZlcmVuY2VFZGdl
KTsgfQotCi0gICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxvZyhtZW1v
cnlVc2UoKS8xMDI0KTsgfQotCi1wcml2YXRlOgotICAgIEhhc2hTZXQ8SW50ZXJmZXJlbmNlRWRn
ZT4gbV9zZXQ7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSW5kZXhUeXBl
PgotY2xhc3MgSW50ZXJmZXJlbmNlVmVjdG9yIHsKLXB1YmxpYzoKLSAgICBib29sIGNvbnRhaW5z
KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAg
ICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fdmVjdG9yW3VdLmNv
bnRhaW5zKHYpOwotICAgIH0KLQotICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRl
eFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICBpZiAodiA8IHUpCi0gICAgICAg
ICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fdmVjdG9y
W3VdLmFkZCh2KS5pc05ld0VudHJ5OwotICAgICAgICBtX3NpemUgKz0gaXNOZXdFbnRyeTsKLSAg
ICAgICAgcmV0dXJuIGlzTmV3RW50cnk7Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAg
ewotICAgICAgICBtX3ZlY3Rvci5jbGVhcigpOwotICAgICAgICBtX3NpemUgPSAwOwotICAgIH0K
LQotICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7Ci0gICAgICAg
IG1fdmVjdG9yLnJlc2l6ZShuKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KLSAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCkgOyArK2kpIHsK
LSAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIGogOiBtX3ZlY3RvcltpXSkKLSAgICAgICAgICAg
ICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLQotICAgIHVuc2lnbmVkIG1lbW9yeVVz
ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICB1bnNpZ25lZCBtZW1vcnkgPSAwOwotICAgICAgICBm
b3IgKGNvbnN0IFQmIHNldCA6IG1fdmVjdG9yKQotICAgICAgICAgICAgbWVtb3J5ICs9IHNldC5t
ZW1vcnlVc2UoKTsKLSAgICAgICAgcmV0dXJuIG1lbW9yeTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1
bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEwMjQpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgVmVjdG9yPFQ+IG1fdmVjdG9yOwotICAgIHVuc2lnbmVkIG1fc2l6ZSB7
MH07Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgotY2xhc3MgSW50ZXJmZXJl
bmNlQml0VmVjdG9yIHsKLXB1YmxpYzoKLSAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2JpdFZlY3Rvci5xdWlja0dldChp
bmRleCh1LCB2KSk7Ci0gICAgfQotCi0gICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KElu
ZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIC8vIE5vdGU6IHdlIGNvdWxk
IGRvIG9ubHkgb25lIHF1aWNrU2V0LCBhdCB0aGUgY29zdCBvZiBvbmUgZXh0cmEgYnJhbmNoIGlu
IGV2ZXJ5IGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkgKHRvIGVuZm9yY2UgdSA8IHYp
Ci0gICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodSwg
dikpOwotICAgICAgICBib29sIGFscmVhZHlJbjIgPSBtX2JpdFZlY3Rvci5xdWlja1NldChpbmRl
eCh2LCB1KSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoYWxyZWFkeUluMiwgYWxyZWFkeUluID09
IGFscmVhZHlJbjIpOwotICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsKLSAgICAgICAgcmV0
dXJuICFhbHJlYWR5SW47Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAg
ICBtX2JpdFZlY3Rvci5jbGVhckFsbCgpOwotICAgICAgICBtX3NpemUgPSAwOwotICAgIH0KLQot
ICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7Ci0gICAgICAgIG1f
bnVtVG1wcyA9IG47Ci0gICAgICAgIG1fYml0VmVjdG9yLmVuc3VyZVNpemUobipuKTsKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2b2lkIGZvckVhY2goY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZvciAoSW5kZXhUeXBlIGkgPSAw
OyBpIDwgbV9udW1UbXBzOyArK2kpIHsKLSAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIGogPSBp
ICsgMTsgaiA8IG1fbnVtVG1wczsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYml0VmVj
dG9yLnF1aWNrR2V0KGluZGV4KGksIGopKSkKLSAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih7
IGksIGogfSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICB1bnNpZ25lZCBtZW1vcnlV
c2UoKSBjb25zdCB7IHJldHVybiAobV9iaXRWZWN0b3Iuc2l6ZSgpICsgNykgPj4gMzsgfQotCi0g
ICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxvZyhtZW1vcnlVc2UoKS8x
MDI0KTsgfQotCi1wcml2YXRlOgotICAgIHVuc2lnbmVkIGluZGV4KEluZGV4VHlwZSBpLCBJbmRl
eFR5cGUgaikKLSAgICB7Ci0gICAgICAgIHJldHVybiBpICogbV9udW1UbXBzICsgajsKLSAgICB9
Ci0KLSAgICBCaXRWZWN0b3IgbV9iaXRWZWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplIHswfTsK
LSAgICBJbmRleFR5cGUgbV9udW1UbXBzOwotfTsKLQotI2RlZmluZSBURVNUX09QVElNSVpFRF9J
TlRFUkZFUkVOQ0VfR1JBUEggMAotI2lmIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQ
SAotdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEluZGV4VHlwZT4K
LWNsYXNzIEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoIHsKLXB1YmxpYzoKLSAgICBib29s
IGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGJvb2wg
Y29udGFpbnNJbkEgPSBtX3NldEEuY29udGFpbnModSwgdik7Ci0gICAgICAgIGJvb2wgY29udGFp
bnNJbkIgPSBtX3NldEIuY29udGFpbnModSwgdik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGNv
bnRhaW5zSW5BID09IGNvbnRhaW5zSW5CKTsKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5zSW5BOwot
ICAgIH0KLQotICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5k
ZXhUeXBlIHYpCi0gICAgewotICAgICAgICBib29sIGlzTmV3RW50cnlBID0gbV9zZXRBLmFkZEFu
ZFJldHVybklzTmV3RW50cnkodSwgdik7Ci0gICAgICAgIGJvb2wgaXNOZXdFbnRyeUIgPSBtX3Nl
dEIuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
aXNOZXdFbnRyeUEgPT0gaXNOZXdFbnRyeUIpOwotICAgICAgICByZXR1cm4gaXNOZXdFbnRyeUE7
Ci0gICAgfQotCi0gICAgdm9pZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3NldEEuY2xlYXIo
KTsKLSAgICAgICAgbV9zZXRCLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNYXhUbXBJ
bmRleCh1bnNpZ25lZCBuKQotICAgIHsKLSAgICAgICAgbV9zZXRBLnNldE1heFRtcEluZGV4KG4p
OwotICAgICAgICBtX3NldEIuc2V0TWF4VG1wSW5kZXgobik7Ci0gICAgfQotCi0gICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCi0gICAgewotICAgICAgICBtX3NldEEuZm9yRWFjaChmdW5jdG9yKTsKLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIHNpemVB
ID0gbV9zZXRBLnNpemUoKTsKLSAgICAgICAgdW5zaWduZWQgc2l6ZUIgPSBtX3NldEIuc2l6ZSgp
OwotICAgICAgICBSRUxFQVNFX0FTU0VSVChzaXplQSA9PSBzaXplQik7Ci0gICAgICAgIHJldHVy
biBzaXplQTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGRhdGFMb2cobV9zZXRBLm1lbW9yeVVzZSgpLzEwMjQsICIgLT4gIiwgbV9z
ZXRCLm1lbW9yeVVzZSgpLzEwMjQpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBUIG1fc2V0QTsK
LSAgICBVIG1fc2V0QjsKLX07Ci0KLXVzaW5nIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRl
cmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+OwotdXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFw
aCA9IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoPEludGVyZmVyZW5jZUhhc2hTZXQ8dWlu
dDE2X3Q+LCBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8
dWludDE2X3Q+LCB1aW50MTZfdD4sIHVpbnQxNl90PjsKLXVzaW5nIEh1Z2VJbnRlcmZlcmVuY2VH
cmFwaCA9IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoPEludGVyZmVyZW5jZUhhc2hTZXQ8
dWludDMyX3Q+LCBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQ8dWludDMyX3Q+LCB1aW50MzJfdD4sIHVpbnQxNl90PjsKLQotI2Vsc2UgLy8gVEVTVF9PUFRJ
TUlaRURfSU5URVJGRVJFTkNFX0dSQVBICi0KLXVzaW5nIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGgg
PSBJbnRlcmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+OwotdXNpbmcgTGFyZ2VJbnRlcmZlcmVu
Y2VHcmFwaCA9IEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dDx1aW50MTZfdD4sIHVpbnQxNl90PjsKLXVzaW5nIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IElu
dGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MzJfdD4s
IHVpbnQzMl90PjsKLQotI2VuZGlmCi0KIC8vIFRoZSBBYnN0cmFjdENvbG9yaW5nQWxsb2NhdG9y
IGRlZmluZXMgYWxsIHRoZSBjb2RlIHRoYXQgaXMgaW5kZXBlbmRhbnQKIC8vIGZyb20gdGhlIGJh
bmsgb3IgcmVnaXN0ZXIgYW5kIGNhbiBiZSBzaGFyZWQgd2hlbiBhbGxvY2F0aW5nIHJlZ2lzdGVy
cy4KIHRlbXBsYXRlPHR5cGVuYW1lIEluZGV4VHlwZSwgdHlwZW5hbWUgSW50ZXJmZXJlbmNlU2V0
LCBCYW5rIGJhbms+CkBAIC0xNTg5LDEyICsxMzU3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIG1faW50ZXJmZXJlbmNlRWRnZXMuc2V0TWF4VG1wSW5k
ZXgoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgobV9jb2RlLm51bVRtcHMo
YmFuaykpKTsKKyAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5zZXRNYXhJbmRleChBYnNvbHV0
ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1dGVJbmRleChtX2NvZGUubnVtVG1wcyhiYW5rKSkpOwog
CiAgICAgICAgIGluaXRpYWxpemVQcmVjb2xvcmVkVG1wKCk7CiAgICAgICAgIGJ1aWxkKCk7CiAK
LSAgICAgICAgaWYgY29uc3RleHByIChyZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVzZSAm
JiAoc3RkOjppc19zYW1lPEludGVyZmVyZW5jZVNldCwgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD46
OnZhbHVlIHx8IHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQsIEh1Z2VJbnRlcmZlcmVuY2VH
cmFwaD46OnZhbHVlKSkgeworICAgICAgICBpZiBjb25zdGV4cHIgKHJlcG9ydEludGVyZmVyZW5j
ZUdyYXBoTWVtb3J5VXNlICYmIChzdGQ6OmlzX3NhbWU8SW50ZXJmZXJlbmNlU2V0LCBXVEY6Okxh
cmdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8SW50ZXJmZXJlbmNl
U2V0LCBXVEY6Okh1Z2VJbnRlcmZlcmVuY2VHcmFwaD46OnZhbHVlKSkgewogICAgICAgICAgICAg
ZGF0YUxvZygibnVtVG1wc3xudW1FZGdlc3xtZW1vcnlVc2Uoa0IpOiAiLCBtX2NvZGUubnVtVG1w
cyhiYW5rKSwgIiB8ICIsIG1faW50ZXJmZXJlbmNlRWRnZXMuc2l6ZSgpLCAiIHwgIik7CiAgICAg
ICAgICAgICBtX2ludGVyZmVyZW5jZUVkZ2VzLmR1bXBNZW1vcnlVc2VJbktCKCk7CiAgICAgICAg
ICAgICBkYXRhTG9nKCJcbiIpOwpAQCAtMjA0MiwzMSArMTgxMCwyOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH07CiAKLSAgICAgICAgICAg
IC8vIFRoZSBiaXQgdmVjdG9yIGFwcHJvYWNoIHVzZXMgbipuIGJpdHMsIG9yIDIwa0IgZm9yIG4g
PSA0MDAuCi0gICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxsSW50
ZXJmZXJlbmNlR3JhcGggPSA0MDA7Ci0gICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFu
aykgPCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgaWYg
KG1fY29kZS5udW1UbXBzKGJhbmspIDwgV1RGOjptYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VH
cmFwaCkgewogICAgICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgewotICAgICAgICAgICAgICAg
ICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJDLCBTbWFsbEludGVyZmVy
ZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5z
cGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWlu
dDE2X3QsIGJhbmssIElSQywgV1RGOjpTbWFsbEludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3Io
bV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAg
ICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVp
bnQxNl90LCBiYW5rLCBCcmlnZ3MsIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvciht
X2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgQnJpZ2dzLCBX
VEY6OlNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgs
IG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25l
ID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDE2X3Q+OjptYXgoKSkgewogICAgICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgewotICAg
ICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJDLCBM
YXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdB
bGxvY2F0b3I8dWludDE2X3QsIGJhbmssIElSQywgV1RGOjpMYXJnZUludGVyZmVyZW5jZUdyYXBo
PiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVU
bXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3Ip
OwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5n
QWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+
IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRt
cHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFu
aywgQnJpZ2dzLCBXVEY6OkxhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUs
IG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAg
ICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBIYXZpbmcgbW9yZSB0
aGFuIDIqKjE2IG51bVRtcHMgY2FuIG9jY3VyIGV2ZW4gd2l0aCBPcHRpb25zOjptYXhUbXBzRm9y
R3JhcGhDb2xvcmluZygpIDwgMioqMTYsIGJlY2F1c2Ugb2Ygc3BpbGxpbmcKICAgICAgICAgICAg
ICAgICBpZiAodXNlSVJDKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0
b3I8dWludDMyX3QsIGJhbmssIElSQywgSHVnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3Io
bV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAg
ICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDMyX3QsIGJhbmssIElSQywgV1RG
OjpIdWdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1f
dXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25lID0g
ZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDMyX3QsIGJhbmssIEJyaWdncywg
SHVnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdB
bGxvY2F0b3I8dWludDMyX3QsIGJhbmssIEJyaWdncywgV1RGOjpIdWdlSW50ZXJmZXJlbmNlR3Jh
cGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJs
ZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRv
cik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhD
b2xvcmluZy5jcHAKaW5kZXggYWU3ODY5MTZiNTZmLi44OWVhYTVjYzE2ODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xv
cmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrQnlHcmFwaENvbG9yaW5nLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBaXJM
aXZlbmVzcy5oIgogI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJBaXJTdGFj
a0FsbG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvSW50ZXJmZXJlbmNlR3JhcGguaD4KICNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgewpAQCAtNDMsNjYgKzQ0LDI2IEBAIG5hbWVzcGFjZSB7CiAKIG5hbWVzcGFj
ZSBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWwgewogc3RhdGljIGNvbnN0
ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKK3N0YXRpYyBjb25zdGV4cHIgYm9vbCByZXBvcnRM
YXJnZU1lbW9yeVVzZXMgPSB0cnVlOwogfQogCi1zdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKLSAg
ICBDb2FsZXNjYWJsZU1vdmUoKQorY2xhc3MgU3RhY2tBbGxvY2F0b3JCYXNlIHsKK3Byb3RlY3Rl
ZDoKKyAgICBTdGFja0FsbG9jYXRvckJhc2UoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUo
Y29kZSkKKyAgICAgICAgLCBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlcyhjb2RlLnN0YWNrU2xv
dHMoKS5zaXplKCkpCiAgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9y
ZW1hcHBlZFN0YWNrU2xvdEluZGljZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3JlbWFw
cGVkU3RhY2tTbG90SW5kaWNlc1tpXSA9IGk7CiAgICAgfQogCi0gICAgQ29hbGVzY2FibGVNb3Zl
KFN0YWNrU2xvdCogc3JjLCBTdGFja1Nsb3QqIGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKLSAgICAg
ICAgOiBzcmMoc3JjKQotICAgICAgICAsIGRzdChkc3QpCi0gICAgICAgICwgZnJlcXVlbmN5KGZy
ZXF1ZW5jeSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
b2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNyYyA9
PSBvdGhlci5zcmMKLSAgICAgICAgICAgICYmIGRzdCA9PSBvdGhlci5kc3QKLSAgICAgICAgICAg
ICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBD
b2FsZXNjYWJsZU1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3JjKSwg
Ii0+IiwgcG9pbnRlckR1bXAoZHN0KSwgIigiLCBmcmVxdWVuY3ksICIpIik7Ci0gICAgfQotICAg
IAotICAgIFN0YWNrU2xvdCogc3JjIHsgbnVsbHB0ciB9OwotICAgIFN0YWNrU2xvdCogZHN0IHsg
bnVsbHB0ciB9OwotICAgIGRvdWJsZSBmcmVxdWVuY3kgeyBQTmFOIH07Ci19OwotCi19IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENv
ZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0
YWNrQnlHcmFwaENvbG9yaW5nIik7Ci0gICAgCi0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7
Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMg
PQotICAgICAgICBhbGxvY2F0ZUFuZEdldEVzY2FwZWRTdGFja1Nsb3RzV2l0aG91dENoYW5naW5n
RnJhbWVTaXplKGNvZGUpOwotCi0gICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMu
Ci0gICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3Rh
Y2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90
cygpLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwotCiAgICAgLy8gV2Ug
d2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2
ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CiAgICAgLy8gY29hbGVzY2FibGUgbW92
ZXMgYW5kIGhhbmRsZSB0aGVtIHNwZWNpYWxseSBpbiBpbnRlcmZlcmVuY2UgYW5hbHlzaXMuCi0g
ICAgYXV0byBpc0NvYWxlc2NhYmxlTW92ZSA9IFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7Cisg
ICAgYm9vbCBpc0NvYWxlc2NhYmxlTW92ZShJbnN0JiBpbnN0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCFPcHRpb25zOjpjb2FsZXNjZVNwaWxsU2xvdHMoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgICAgICBXaWR0aCB3aWR0aDsKICAgICAgICAgc3dpdGNoIChpbnN0Lmtp
bmQub3Bjb2RlKSB7CiAgICAgICAgIGNhc2UgTW92ZToKQEAgLTExOCwxMyArNzksMTAgQEAgdm9p
ZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmICghT3B0aW9uczo6Y29hbGVzY2VTcGlsbFNsb3RzKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9IDMp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFy
Z3NbaV07CiAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCkBAIC0xMzUsMTgyICs5Mywy
OTIgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAg
ICAgICAgICBpZiAoc2xvdC0+Ynl0ZVNpemUoKSAhPSBieXRlcyh3aWR0aCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIH07Ci0gICAgCi0gICAgYXV0byBpc1VzZWxlc3NNb3ZlID0gWyZdIChJbnN0
JiBpbnN0KSAtPiBib29sIHsKKyAgICB9CisKKyAgICBib29sIGlzVXNlbGVzc01vdmUoSW5zdCYg
aW5zdCkgY29uc3QKKyAgICB7CiAgICAgICAgIHJldHVybiBpc0NvYWxlc2NhYmxlTW92ZShpbnN0
KSAmJiBpbnN0LmFyZ3NbMF0gPT0gaW5zdC5hcmdzWzFdOworICAgIH0KKworICAgIHVuc2lnbmVk
IHJlbWFwKHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoOzsp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlbWFwcGVkU2xvdEluZGV4ID0gbV9yZW1hcHBlZFN0
YWNrU2xvdEluZGljZXNbc2xvdEluZGV4XTsKKyAgICAgICAgICAgIGlmIChyZW1hcHBlZFNsb3RJ
bmRleCA9PSBzbG90SW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNsb3RJbmRleDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIFN0YWNrU2xvdCogcmVtYXBTdGFja1Nsb3QoU3RhY2tTbG90
KiBzbG90KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZS5zdGFja1Nsb3RzKClb
cmVtYXAoc2xvdC0+aW5kZXgoKSldOworICAgIH0KKworICAgIGJvb2wgaXNSZW1hcHBlZFNsb3RJ
bmRleCh1bnNpZ25lZCBzbG90SW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9y
ZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xvdEluZGV4XSAhPSBzbG90SW5kZXg7CiAgICAgfTsK
LSAgICAKLSAgICBhdXRvIGFkZEVkZ2UgPSBbJl0gKFN0YWNrU2xvdCogYSwgU3RhY2tTbG90KiBi
KSB7Ci0gICAgICAgIGludGVyZmVyZW5jZVthXS5hZGQoYik7Ci0gICAgICAgIGludGVyZmVyZW5j
ZVtiXS5hZGQoYSk7Ci0gICAgfTsKLSAgICAKLSAgICBWZWN0b3I8Q29hbGVzY2FibGVNb3ZlPiBj
b2FsZXNjYWJsZU1vdmVzOwotCi0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
LSAgICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3Ms
IGJsb2NrKTsKLQotICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAodW5zaWduZWQgaW5zdElu
ZGV4KSB7Ci0gICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0lu
dGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAi
LCBXVEY6OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7Ci0KLSAgICAg
ICAgICAgIEluc3QqIHByZXZJbnN0ID0gYmxvY2stPmdldChpbnN0SW5kZXgpOwotICAgICAgICAg
ICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwotICAgICAgICAg
ICAgaWYgKHByZXZJbnN0ICYmIGlzQ29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKLSAgICAg
ICAgICAgICAgICBDb2FsZXNjYWJsZU1vdmUgbW92ZShwcmV2SW5zdC0+YXJnc1swXS5zdGFja1Ns
b3QoKSwgcHJldkluc3QtPmFyZ3NbMV0uc3RhY2tTbG90KCksIGJsb2NrLT5mcmVxdWVuY3koKSk7
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5hcHBl
bmQobW92ZSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChTdGFja1Ns
b3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG90aGVyU2xvdCAhPSBtb3ZlLnNyYykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVk
Z2UobW92ZS5kc3QsIG90aGVyU2xvdCk7CisKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9y
PHVuc2lnbmVkPiBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlczsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEludGVyZmVyZW5jZUdyYXBoPgorY2xhc3MgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2Nh
dG9yIGZpbmFsIDogcHVibGljIFN0YWNrQWxsb2NhdG9yQmFzZSB7CisgICAgdXNpbmcgSW5kZXhU
eXBlID0gdHlwZW5hbWUgSW50ZXJmZXJlbmNlR3JhcGg6OkluZGV4VHlwZTsKK3B1YmxpYzoKKyAg
ICBHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3IoQ29kZSYgY29kZSkKKyAgICAgICAgOiBTdGFj
a0FsbG9jYXRvckJhc2UoY29kZSkKKyAgICAgICAgLCBtX2ludGVyZmVyZW5jZSgpCisgICAgICAg
ICwgbV9jb2FsZXNjYWJsZU1vdmVzKCkKKyAgICB7CisgICAgICAgIG1faW50ZXJmZXJlbmNlLnNl
dE1heEluZGV4KG1fY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICB9CisKKyAgICB2b2lk
IHJ1bihjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMp
CisgICAgeworICAgICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhtX2NvZGUpOworCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIFN0
YWNrU2xvdExpdmVuZXNzOjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisK
KyAgICAgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsK
KyAgICAgICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVy
bmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmluZzog
IiwgV1RGOjpwb2ludGVyTGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOworCisgICAg
ICAgICAgICAgICAgSW5zdCogcHJldkluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCk7CisgICAg
ICAgICAgICAgICAgSW5zdCogbmV4dEluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCArIDEpOwor
ICAgICAgICAgICAgICAgIGlmIChwcmV2SW5zdCAmJiBpc0NvYWxlc2NhYmxlTW92ZSgqcHJldklu
c3QpKSB7CisgICAgICAgICAgICAgICAgICAgIENvYWxlc2NhYmxlTW92ZSBtb3ZlKHByZXZJbnN0
LT5hcmdzWzBdLnN0YWNrU2xvdCgpLT5pbmRleCgpLCBwcmV2SW5zdC0+YXJnc1sxXS5zdGFja1Ns
b3QoKS0+aW5kZXgoKSwgYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAgICAgICAgICAgICAg
ICBtX2NvYWxlc2NhYmxlTW92ZXMuYXBwZW5kKG1vdmUpOworCisgICAgICAgICAgICAgICAgICAg
IGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBvdGhlclNsb3RJbmRleCA9IG90aGVyU2xvdC0+aW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdGhlclNsb3RJbmRleCAhPSBtb3Zl
LnNyYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQobW92
ZS5kc3QsIG90aGVyU2xvdEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgIHByZXZJbnN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJldkluc3QgPSBudWxscHRyOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxBcmc+KAotICAgICAgICAgICAg
ICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBB
cmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
U3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKQotICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAoU3RhY2tT
bG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgYWRkRWRnZShzbG90LCBvdGhlclNsb3QpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhD
b2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5
emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwotCi0gICAgICAgICAgICAvLyBL
aWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtp
bGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUKLSAgICAgICAgICAgIC8vIGRlZnMgYW5kIHRob3Nl
IGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQgbm93LiBXZSBvbmx5
IGRvIHRoYXQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2Yg
ZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgotICAgICAgICAgICAgSW5zdCYgaW5z
dCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFy
Z0VmZmVjdHMoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFy
ZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6
aXNMYXRlRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgIEluc3Q6OmZvckVhY2hEZWY8QXJnPigK
KyAgICAgICAgICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6
OlNwaWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3Bp
bGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2
ZShzbG90KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxv
Y2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcmZlcmVu
Y2UuYWRkKHNsb3QtPmluZGV4KCksIG90aGVyU2xvdC0+aW5kZXgoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGlmIChvaykKLSAgICAgICAgICAgICAgICAgICAg
aW5zdCA9IEluc3QoKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6dmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQo
aW5zdEluZGV4KSwgIlxuIik7CisKKyAgICAgICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVz
LiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhh
cyBvbmx5IGxhdGUKKyAgICAgICAgICAgICAgICAvLyBkZWZzIGFuZCB0aG9zZSBsYXRlIGRlZnMg
YXJlIHRvIHRoaW5ncyB0aGF0IGFyZSBkZWFkIHJpZ2h0IG5vdy4gV2Ugb25seSBkbyB0aGF0Cisg
ICAgICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0J3MgdGhlIG9ubHkga2luZCBvZiBkZWFkIHN0
YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUuCisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghaW5zdC5oYXNOb25B
cmdFZmZlY3RzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFyZzo6aXNMYXRlRGVmKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKHNsb3Qp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKG9rKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKKyAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnRlcmZlcmUoaW5zdEluZGV4KTsKLSAgICAgICAg
ICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnRlcmZlcmUo
LTEpOworCisgICAgICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKKyAg
ICAgICAgICAgICAgICBbJl0gKGNvbnN0IEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIWluc3Q7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0K
LSAgICAgICAgaW50ZXJmZXJlKC0xKTsKLSAgICAgICAgCi0gICAgICAgIGJsb2NrLT5pbnN0cygp
LnJlbW92ZUFsbE1hdGNoaW5nKAotICAgICAgICAgICAgWyZdIChjb25zdCBJbnN0JiBpbnN0KSAt
PiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gIWluc3Q7Ci0gICAgICAgICAgICB9KTsK
LSAgICB9CiAKLSAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFs
Ojp2ZXJib3NlKSB7Ci0gICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Ns
b3RzKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1
bXAoc2xvdCksICI6ICIsIHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vbc2xvdF0pLCAiXG4i
KTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IHRyeSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgot
ICAgIHN0ZDo6c29ydCgKLSAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5iZWdpbigpLCBjb2FsZXNj
YWJsZU1vdmVzLmVuZCgpLAotICAgICAgICBbJl0gKENvYWxlc2NhYmxlTW92ZSYgYSwgQ29hbGVz
Y2FibGVNb3ZlJiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+
IGIuZnJlcXVlbmN5OwotICAgICAgICB9KTsKLSAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3Qq
LCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgp
KTsKLSAgICBhdXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCog
ewotICAgICAgICBpZiAoIXNsb3QpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgZm9yICg7OykgewotICAgICAgICAgICAgU3RhY2tTbG90KiByZW1hcHBlZFNsb3QgPSByZW1h
cHBlZFN0YWNrU2xvdHNbc2xvdF07Ci0gICAgICAgICAgICBpZiAoIXJlbWFwcGVkU2xvdCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gc2xvdDsKLSAgICAgICAgICAgIHNsb3QgPSByZW1hcHBlZFNs
b3Q7CisgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6
OnJlcG9ydExhcmdlTWVtb3J5VXNlcyAmJiBtX2ludGVyZmVyZW5jZS5tZW1vcnlVc2UoKSA+IDEw
MjQpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvciBz
dGFja1Nsb3RzLCBpbnRlcmZlcmVuY2VHcmFwaChrQiksIGNvYWxlc2NhYmxlIG1vdmVzKGtCKTog
IiwgbV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCksICIgOiAiKTsKKyAgICAgICAgICAgIG1faW50
ZXJmZXJlbmNlLmR1bXBNZW1vcnlVc2VJbktCKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIsICIs
IChtX2NvYWxlc2NhYmxlTW92ZXMuc2l6ZSgpICogc2l6ZW9mKENvYWxlc2NhYmxlTW92ZSkpIC8g
MTAyNCk7CisgICAgICAgICAgICBkYXRhTG9nTG4oKTsKICAgICAgICAgfQotICAgIH07Ci0gICAg
Ci0gICAgZm9yIChDb2FsZXNjYWJsZU1vdmUmIG1vdmUgOiBjb2FsZXNjYWJsZU1vdmVzKSB7Ci0g
ICAgICAgIG1vdmUuc3JjID0gcmVtYXAobW92ZS5zcmMpOwotICAgICAgICBtb3ZlLmRzdCA9IHJl
bWFwKG1vdmUuZHN0KTsKLSAgICAgICAgaWYgKG1vdmUuc3JjID09IG1vdmUuZHN0KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbnRlcmZlcmVuY2VbbW92ZS5zcmNdLmNvbnRh
aW5zKG1vdmUuZHN0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAg
U3RhY2tTbG90KiBzbG90VG9LaWxsID0gbW92ZS5zcmM7Ci0gICAgICAgIFN0YWNrU2xvdCogc2xv
dFRvS2VlcCA9IG1vdmUuZHN0OwotICAgICAgICAKLSAgICAgICAgcmVtYXBwZWRTdGFja1Nsb3Rz
W3Nsb3RUb0tpbGxdID0gc2xvdFRvS2VlcDsKLSAgICAgICAgZm9yIChTdGFja1Nsb3QqIGludGVy
ZmVyaW5nU2xvdCA6IGludGVyZmVyZW5jZVtzbG90VG9LaWxsXSkgewotICAgICAgICAgICAgaWYg
KGludGVyZmVyaW5nU2xvdCA9PSBzbG90VG9LaWxsKQorCisgICAgICAgIGlmIChBaXJBbGxvY2F0
ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgIGZv
ciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIik7
CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzbG90SW5kZXggOiBtX2ludGVyZmVyZW5j
ZVtzbG90LT5pbmRleCgpXSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhwb2ludGVyRHVt
cChtX2NvZGUuc3RhY2tTbG90cygpW3Nsb3RJbmRleF0pKTsKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHRy
eSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAg
ICBtX2NvYWxlc2NhYmxlTW92ZXMuYmVnaW4oKSwgbV9jb2FsZXNjYWJsZU1vdmVzLmVuZCgpLAor
ICAgICAgICAgICAgWyZdIChDb2FsZXNjYWJsZU1vdmUmIGEsIENvYWxlc2NhYmxlTW92ZSYgYikg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVu
Y3k7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBmb3IgKGNvbnN0IENvYWxlc2NhYmxlTW92
ZSYgbW92ZSA6IG1fY29hbGVzY2FibGVNb3ZlcykgeworICAgICAgICAgICAgSW5kZXhUeXBlIHNs
b3RUb0tpbGwgPSByZW1hcChtb3ZlLnNyYyk7CisgICAgICAgICAgICBJbmRleFR5cGUgc2xvdFRv
S2VlcCA9IHJlbWFwKG1vdmUuZHN0KTsKKyAgICAgICAgICAgIGlmIChzbG90VG9LaWxsID09IHNs
b3RUb0tlZXApCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcmZl
cmVuY2VbaW50ZXJmZXJpbmdTbG90XS5yZW1vdmUoc2xvdFRvS2lsbCk7Ci0gICAgICAgICAgICBp
bnRlcmZlcmVuY2VbaW50ZXJmZXJpbmdTbG90XS5hZGQoc2xvdFRvS2VlcCk7CisgICAgICAgICAg
ICBpZiAobV9pbnRlcmZlcmVuY2UuY29udGFpbnMoc2xvdFRvS2lsbCwgc2xvdFRvS2VlcCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAobV9pbnRlcmZlcmVuY2Uu
Y29udGFpbnMoc2xvdFRvS2lsbCwgc2xvdFRvS2lsbCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgICAgIG1fcmVtYXBwZWRTdGFja1Nsb3RJbmRpY2VzW3Nsb3RUb0tpbGxd
ID0gc2xvdFRvS2VlcDsKKworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaW50ZXJmZXJpbmdT
bG90IDogbV9pbnRlcmZlcmVuY2Vbc2xvdFRvS2lsbF0pCisgICAgICAgICAgICAgICAgbV9pbnRl
cmZlcmVuY2UuYWRkKGludGVyZmVyaW5nU2xvdCwgc2xvdFRvS2VlcCk7CisgICAgICAgICAgICBt
X2ludGVyZmVyZW5jZS5tYXlDbGVhcihzbG90VG9LaWxsKTsKICAgICAgICAgfQotICAgICAgICBp
bnRlcmZlcmVuY2Vbc2xvdFRvS2VlcF0uYWRkKGludGVyZmVyZW5jZVtzbG90VG9LaWxsXS5iZWdp
bigpLCBpbnRlcmZlcmVuY2Vbc2xvdFRvS2lsbF0uZW5kKCkpOwotICAgICAgICBpbnRlcmZlcmVu
Y2Vbc2xvdFRvS2lsbF0uY2xlYXIoKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0g
ICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGFyZy5pc1N0YWNrKCkpCi0gICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6c3RhY2so
cmVtYXAoYXJnLnN0YWNrU2xvdCgpKSwgYXJnLm9mZnNldCgpKTsKKworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhcmcuaXNTdGFjaygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXJnID0gQXJnOjpzdGFjayhyZW1hcFN0YWNrU2xvdChhcmcuc3RhY2tTbG90KCkp
LCBhcmcub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
aXNVc2VsZXNzTW92ZShpbnN0KSkKKyAgICAgICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpc1VzZWxlc3NNb3ZlKGluc3QpKQotICAg
ICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cg
d2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlz
IGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAorICAgICAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3
YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGls
ZSBlbnN1cmluZyBubworICAgICAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0
aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVy
U2xvdHMgPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzOworICAgICAgICBmb3IgKFN0YWNrU2xv
dCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgICAgIGlmIChpc1JlbWFw
cGVkU2xvdEluZGV4KHNsb3QtPmluZGV4KCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWdu
ZWRFc2NhcGVkU3RhY2tTbG90cy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBv
dGhlclNsb3RJbmRleCA6IG1faW50ZXJmZXJlbmNlW3Nsb3QtPmluZGV4KCldKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGlzUmVtYXBwZWRTbG90SW5kZXgob3RoZXJTbG90SW5kZXgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIG90aGVy
U2xvdCA9IG1fY29kZS5zdGFja1Nsb3RzKClbb3RoZXJTbG90SW5kZXhdOworICAgICAgICAgICAg
ICAgIG90aGVyU2xvdHMuYXBwZW5kKG90aGVyU2xvdCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
LSAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMg
YWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAotICAgIC8vIFN0YWNrU2xvdCB3
ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6
ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCi0gICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xv
dHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCi0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVy
U2xvdHMgPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzOworCitwcml2YXRlOgorICAgIHN0cnVj
dCBDb2FsZXNjYWJsZU1vdmUgeworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoSW5kZXhUeXBlIHNyYywgSW5k
ZXhUeXBlIGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICAgICAgICAgIDogc3JjKHNyYykKKyAg
ICAgICAgICAgICwgZHN0KGRzdCkKKyAgICAgICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5jeSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENv
YWxlc2NhYmxlTW92ZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBzcmMgPT0gb3RoZXIuc3JjCisgICAgICAgICAgICAgICAgJiYgZHN0ID09IG90aGVyLmRzdAor
ICAgICAgICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNjYWJsZU1vdmUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQoc3JjLCAiLT4iLCBkc3QsICIoIiwgZnJl
cXVlbmN5LCAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgSW5kZXhUeXBlIHNyYyB7IHN0ZDo6
bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgSW5kZXhUeXBlIGRz
dCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgZmxv
YXQgZnJlcXVlbmN5IHsgMC4wIH07CisgICAgfTsKKworICAgIEludGVyZmVyZW5jZUdyYXBoIG1f
aW50ZXJmZXJlbmNlOworICAgIFZlY3RvcjxDb2FsZXNjYWJsZU1vdmU+IG1fY29hbGVzY2FibGVN
b3ZlczsKK307CisKKy8vIFdlIHRyeSB0byBhdm9pZCBjb21wdXRpbmcgdGhlIGxpdmVuZXNzIGlu
Zm9ybWF0aW9uIGlmIHRoZXJlIGlzIG5vIHNwaWxsIHNsb3QgdG8gYWxsb2NhdGUKK2Jvb2wgdHJ5
VHJpdmlhbFN0YWNrQWxsb2NhdGlvbihDb2RlJiBjb2RlKQorewogICAgIGZvciAoU3RhY2tTbG90
KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHJlbWFwcGVkU3RhY2tT
bG90c1tzbG90XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYg
KHNsb3QtPm9mZnNldEZyb21GUCgpKSB7Ci0gICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVk
IGFuIG9mZnNldC4KKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAot
ICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJl
bmNlW3Nsb3RdOwotICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZEVzY2FwZWRTdGFj
a1Nsb3RzLnNpemUoKSk7Ci0gICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBl
ZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5zaXplKCkpOwotICAgICAgICB1
bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNpemUoKTsKLSAg
ICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCi0gICAg
ICAgICAgICBvdGhlclNsb3RzW25leHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7Cit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUm
IGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nIik7CisKKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAg
IFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzID0KKyAgICAgICAg
YWxsb2NhdGVBbmRHZXRFc2NhcGVkU3RhY2tTbG90c1dpdGhvdXRDaGFuZ2luZ0ZyYW1lU2l6ZShj
b2RlKTsKKworICAgIGlmICghdHJ5VHJpdmlhbFN0YWNrQWxsb2NhdGlvbihjb2RlKSkgeworICAg
ICAgICBpZiAoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpIDwgV1RGOjptYXhTaXplRm9yU21hbGxJ
bnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2Nh
dG9yPFdURjo6U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IoY29kZSk7
CisgICAgICAgICAgICBhbGxvY2F0b3IucnVuKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpOwor
ICAgICAgICB9IGVsc2UgaWYgKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSA8IHN0ZDo6bnVtZXJp
Y19saW1pdHM8dWludDE2X3Q+OjptYXgoKSkgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0
YWNrQWxsb2NhdG9yPFdURjo6TGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0
b3IoY29kZSk7CisgICAgICAgICAgICBhbGxvY2F0b3IucnVuKGFzc2lnbmVkRXNjYXBlZFN0YWNr
U2xvdHMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNr
QWxsb2NhdG9yPFdURjo6SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihj
b2RlKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5ydW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90
cyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tT
bG90cyhjb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKaW5kZXggZTZmYjliODA4YWZlLi43NzViZjlmNWNiNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTEwIEBACisyMDIxLTA1LTI2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyBzaG91bGQgdXNl
IHRoZSBvcHRpbWl6ZWQgaW50ZXJmZXJlbmNlIGdyYXBocyBmcm9tIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYyNTgKKworICAgICAgICBJIG1vdmVkIHRoZSBpbnRlcmZlcmVuY2UgZ3Jh
cGhzIGRhdGFzdHJ1Y3R1cmVzIGZyb20gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jp
bmcgdG8gdGhlaXIgb3duIHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oIGZpbGUuCisgICAgICAgIFRo
ZXJlIGFyZSB0aHJlZSBvZiB0aGVtOgorICAgICAgICAtIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGgs
IGJlc3QgZm9yIG4gPCA0MDAKKyAgICAgICAgLSBMYXJnZUludGVyZmVyZW5jZUdyYXBoLCBmb3Ig
biA8IDIqKjE2CisgICAgICAgIC0gSHVnZUludGVyZmVyZW5jZUdyYXBoLCBmb3IgbiB1cCB0byAy
KiozMgorICAgICAgICBJIGFsc28gYWRkZWQgIkl0ZXJhYmxlIiB2ZXJzaW9ucyBvZiB0aGVtLCB0
aGF0IGhhdmUgYW4gb3BlcmF0b3JbXSBtZXRob2Qgd2hvc2UgcmVzdWx0IHlvdSBjYW4gaXRlcmF0
ZSBvbiB0byBnZXQgYWxsIHRoZSBpbmRpY2VzIHdoaWNoIGludGVyZmVyZSB3aXRoIGEgZ2l2ZW4g
aW5kZXguCisgICAgICAgIFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCBpcyB0aGUgc2Ft
ZSBhcyB0aGUgbm9uLWl0ZXJhYmxlIHZlcnNpb24sIGJ1dCB0aGUgTGFyZ2UgYW5kIEh1Z2UgdmVy
c2lvbnMgYXJlIGEgYml0IHNsb3dlciB0aGFuIHRoZWlyIGNvdW50ZXJwYXJ0cyBhbmQgdXNlIDJ4
IG1lbW9yeS4KKworICAgICAgICBBbGwgb2YgdGhlc2Ugd2VyZSB0ZXN0ZWQgYnkgcnVubmluZyBK
ZXRTdHJlYW0yIHdpdGggdGhlIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSCBzZXQg
dG8gMS4KKyAgICAgICAgVGhpcyBmbGFnIG1ha2VzIHRoZSBvcHRpbWl6ZWQgZGF0YXN0cnVjdHVy
ZXMgcnVuIGluIHBhcmFsbGVsIHdpdGggYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIGFuZCB0
aGVpciByZXN1bHRzIGFyZSBjaGVja2VkIGZvciBlcXVhbGl0eSBvbiBldmVyeSBtZXRob2QgY2Fs
bC4KKyAgICAgICAgVGhlcmUgaXMgb25lIHNtYWxsIGRpZmZlcmVuY2UgYWxsb3dlZDogaXRlcmF0
aW9uIGlzIG5vdCBndWFyYW50ZWVkIHRvIGdvIHRocm91Z2ggZWxlbWVudHMgaW4gdGhlIHNhbWUg
b3JkZXIuCisKKyAgICAgICAgSSBhbHNvIGFkZGVkIGEgY2xlYXIoKSBtZXRob2QgdG8gTGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQsIGFuZCBhZGRlZCB0aGUgTm90TnVsbCBmbGFnIHRvIGl0
cyB2YXJpb3VzIHVzZXMgb2YgcGxhY2VtZW50IG5ldy4KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6bWVtb3J5VXNlIGNvbnN0KToK
KyAgICAgICAgKiB3dGYvSW50ZXJmZXJlbmNlR3JhcGguaDogQWRkZWQuCisgICAgICAgIChXVEY6
OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRlcmZl
cmVuY2VCaXRWZWN0b3I6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJ
bnRlcmZlcmVuY2VCaXRWZWN0b3I6OmFkZCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJp
dFZlY3Rvcjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Om1h
eUNsZWFyKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpzZXRNYXhJbmRl
eCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6Zm9yRWFjaCk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChX
VEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVy
YXRvcisrKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6
aXRlcmF0b3I6Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJp
dFZlY3Rvcjo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAg
KFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9y
IT0gY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Okl0ZXJhYmxl
OjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6SXRl
cmFibGU6OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6
b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6
aW5kZXggY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmNvbnRhaW5z
KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjphZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjphZGQpOgorICAgICAgICAo
V1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJl
bmNlVmVjdG9yOjptYXlDbGVhcik6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6
c2V0TWF4SW5kZXgpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmZvckVhY2gp
OgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OnNpemUgY29uc3QpOgorICAgICAg
ICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6Om1lbW9yeVVzZSBjb25zdCk6CisgICAgICAgIChX
VEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6ZHVtcE1lbW9yeVVzZUluS0IgY29uc3QpOgorICAgICAg
ICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6Okl0ZXJhYmxlOjpiZWdpbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6SXRlcmFibGU6OmVuZCBjb25zdCk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAg
IChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6Y29udGFpbnMpOgorICAg
ICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OmFkZEFuZFJldHVy
bklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0Fk
YXB0ZXI6OmFkZCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRh
cHRlcjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0Fk
YXB0ZXI6Om1heUNsZWFyKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRp
bmdBZGFwdGVyOjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1
cGxpY2F0aW5nQWRhcHRlcjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdl
c0R1cGxpY2F0aW5nQWRhcHRlcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0
ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpkdW1wTWVtb3J5VXNlSW5LQiBj
b25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6
b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRh
cHRlcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0
ZXI6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRn
ZXNEZWR1cEFkYXB0ZXI6OmFkZCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVw
QWRhcHRlcjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0
ZXI6Om1heUNsZWFyKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVy
OjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRl
cjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6
c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6
bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFw
dGVyOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5j
ZUhhc2hTZXQ6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hT
ZXQ6OmFkZCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmNsZWFyKToKKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6c2V0TWF4SW5kZXgpOgorICAgICAgICAo
V1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0Ojpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6SW50ZXJm
ZXJlbmNlSGFzaFNldDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhh
c2hTZXQ6Om1lbW9yeVVzZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hT
ZXQ6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVk
SW50ZXJmZXJlbmNlR3JhcGg6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVk
SW50ZXJmZXJlbmNlR3JhcGg6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RG
OjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6YWRkKToKKyAgICAgICAgKFdURjo6SW5z
dHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6OmNsZWFyKToKKyAgICAgICAgKFdURjo6SW5zdHJ1
bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6Om1heUNsZWFyKToKKyAgICAgICAgKFdURjo6SW5zdHJ1
bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6SW5z
dHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6OmZvckVhY2gpOgorICAgICAgICAoV1RGOjpJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
c3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAo
V1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6ZHVtcE1lbW9yeVVzZUluS0IgY29u
c3QpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
OjpJdGVyYWJsZTo6SXRlcmFibGUpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJdGVyYWJs
ZUludGVyZmVyZW5jZUdyYXBoOjpJdGVyYWJsZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RG
OjpJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOjpJdGVyYWJsZTo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFw
aDo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgICogd3RmL0xpa2VseURlbnNlVW5zaWduZWRJ
bnRlZ2VyU2V0Lmg6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
OjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCk6CisgICAgICAgIChXVEY6Okxpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDo6ZXN0aW1hdGVIYXNoU2V0U2l6ZSk6CisgICAgICAgIChXVEY6Okxpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojp0cmFuc2l0aW9uVG9IYXNoU2V0KToKKyAgICAgICAg
KFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OnRyYW5zaXRpb25Ub0JpdFZlY3Rv
cik6CisKIDIwMjEtMDUtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBTdG9wIHVzaW5nIFVuY2hlY2tlZExvY2sgaW4gV1RGOjpSZWN1cnNpdmVMb2NrCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzODI0MWJiNjA5ODguLmZj
Yzg4MmIwN2Y4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zNzEsNiArMzcxLDcgQEAKIAkJMzEzRURFQzk3NzhFNDlDOUJFQTkxQ0ZDIC8qIFN0YWNrVHJh
Y2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3RhY2tUcmFjZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzN0IyRDY4MjY1NDZFQUEwMERERkQz
RCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0ZENDgxMTI2NUNCMzgwMDBBQkU0
RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJmZXJlbmNlR3Jh
cGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDN0NDMjkxRUE0MEE3MzAwN0JE
OTU2IC8qIFdlYWtMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YWtMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM4MjAyOUUyNDZDODRC
MDA5OUZENjc2NCAvKiBBU0NJSUxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVNDSUlMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM5MUJE
NkJBNEQxNjRGRDI5NEY5QTkzRCAvKiBTdGRNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3RkTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDc5LDYg
KzEwODAsNyBAQAogCQkJCTMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRleFNldC5oICov
LAogCQkJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNldC5oICovLAog
CQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywKKwkJCQkzM0ZE
NDgxMTI2NUNCMzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywKIAkJCQlBNzBE
QTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJNTE4MkMyMkMxRjJC
QzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICovLAogCQkJCTBGN0VCODVCMUZBOEZG
NDEwMEYxQUJDQiAvKiBJc29NYWxsb2MuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKaW5kZXggNWU3
YmNjNzQwOWU1Li4wNmE0MGY0MGU1YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBAIC0xMDAsNiAr
MTAwLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIElubGluZUFTTS5oCiAgICAgSW5z
ZXJ0aW9uLmgKICAgICBJbnN0YW5jZUNvdW50ZWQuaAorICAgIEludGVyZmVyZW5jZUdyYXBoLmgK
ICAgICBJc29NYWxsb2MuaAogICAgIElzb01hbGxvY0lubGluZXMuaAogICAgIEl0ZXJhdG9yQWRh
cHRvcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIvU291cmNlL1dU
Ri93dGYvSGFzaFNldC5oCmluZGV4IGE0MDJjZTI3Mzc1YS4uMmEyNzI4MDYwZjViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvSGFzaFNl
dC5oCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dDsKICAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OworICAgIHVuc2lnbmVkIG1lbW9yeVVz
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCiAgICAgdm9pZCByZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KSB7IG1faW1wbC5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGtleUNvdW50KTsgfQpAQCAtMjAyLDYgKzIwMywxMiBAQCBpbmxpbmUgdW5zaWdu
ZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2FwYWNpdHkoKSBjb25zdAogICAgIHJldHVybiBtX2lt
cGwuY2FwYWNpdHkoKTsgCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5
cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBX
Pjo6bWVtb3J5VXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2FwYWNpdHkoKSAqIHNpemVvZihU
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlw
ZW5hbWUgVz4KIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzRW1wdHkoKSBjb25z
dAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50ZXJmZXJlbmNlR3JhcGguaCBiL1Nv
dXJjZS9XVEYvd3RmL0ludGVyZmVyZW5jZUdyYXBoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwLi43MTc1ZjgzMGU0YjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oCkBAIC0wLDAgKzEsNTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0
Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgZmlsZSBvZmZlcnMgbXVsdGlwbGUgaW1w
bGVtZW50YXRpb25zIG9mIGEgc2ltcGxlIGludGVyZmVyZW5jZSBncmFwaCwgd2l0aCB2YXJ5aW5n
IHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KKy8vIENvbmNlcHR1YWxseSB0aGV5IGFyZSBq
dXN0IHNldHMgb2YgcGFpcnMgb2YgaW50ZWdlcnMKKy8vIEFsbCBvZiB0aGVtIGhhdmUgdGhlIHNh
bWUgaW50ZXJmYWNlOgorLy8gICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUg
dikKKy8vICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5
cGUgdikKKy8vICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorLy8gICB2b2lk
IGNsZWFyKCkKKy8vICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUgdSkKKy8vICAgdm9pZCBzZXRN
YXhJbmRleCh1bnNpZ25lZCBuKQorLy8gICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKy8vICAgdW5zaWduZWQgc2l6ZSgpCisvLyAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpCisv
LyAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKQorLy8gVGhyZWUgdXNlZnVsIHR5cGUgYWxpYXNl
cyBhcmUgZGVmaW5lZDoKKy8vICAgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCwgd2hpY2ggaXMgdGhl
IGZhc3Rlc3QgYnV0IGhhcyBxdWFkcmF0aWMgbWVtb3J5IHVzZSBpbiB0aGUgbWF4aW11bSB2ZXJ0
ZXggaW5kZXggKGJlc3QgZm9yIG4gPCA0MDAgYXMgaXQgaXMgYWxyZWFkeSAyMGtCIGJ5IHRoYXQg
cG9pbnQpCisvLyAgIExhcmdlSW50ZXJmZXJlbmNlR3JhcGgsIGFzIGxvbmcgYXMgdGhlIGluZGlj
ZXMgZml0IGluIGEgdWludDE2X3QKKy8vICAgSHVnZUludGVyZmVyZW5jZUdyYXBoIG90aGVyd2lz
ZQorLy8gSWYgeW91IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBpbmRpY2VzIHRoYXQgaW50ZXJm
ZXJlIHdpdGggYSBnaXZlbiBpbmRleCwgeW91IG11c3QgdXNlIHRoZSBmb2xsb3dpbmc6CisvLyAg
IFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gICBMYXJnZUl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGgKKy8vICAgSHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgKKy8vIFRoZSBs
YXJnZSBhbmQgaHVnZSB2ZXJzaW9ucyBhcmUgMnggdGhlIG1lbW9yeSBvZiB0aGVpciBub24taXRl
cmFibGUgdmVyc2lvbnMsIGJ1dCBvZmZlciBhbiBhZGRpdGlvbmFsIG9wZXJhdG9yW10gbWV0aG9k
LCB3aGljaCByZXR1cm5zIGFuIGl0ZXJhYmxlIG9iamVjdAorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2NsYXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5k
ZXhUeXBlID0gVDsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdFZlY3Rvci5xdWlja0dldChpbmRleCh1LCB2KSk7
CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9iaXRWZWN0b3Iu
cXVpY2tTZXQoaW5kZXgodSwgdikpOworICAgICAgICBtX3NpemUgKz0gIWFscmVhZHlJbjsKKyAg
ICAgICAgcmV0dXJuICFhbHJlYWR5SW47CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBl
IHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgKHZvaWQpIGFkZEFuZFJldHVybklzTmV3
RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBt
X2JpdFZlY3Rvci5jbGVhckFsbCgpOworICAgICAgICBtX3NpemUgPSAwOworICAgIH0KKworICAg
IHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlKSB7IH0KKworICAgIHZvaWQgc2V0TWF4SW5kZXgodW5z
aWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJ
bmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fbnVtRWxlbWVudHMgPSBuOworICAgICAgICBt
X2JpdFZlY3Rvci5lbnN1cmVTaXplKG4qbik7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtRWxlbWVudHM7ICsr
aSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA9IGkgKyAxOyBqIDwgbV9udW1FbGVt
ZW50czsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1aWNrR2V0KGlu
ZGV4KGksIGopKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdCB7IHJl
dHVybiAobV9iaXRWZWN0b3Iuc2l6ZSgpICsgNykgPj4gMzsgfQorCisgICAgdm9pZCBkdW1wTWVt
b3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxvZyhtZW1vcnlVc2UoKSAvIDEwMjQpOyB9CisKKyAg
ICBzdHJ1Y3QgSXRlcmFibGUgeworICAgICAgICBzdHJ1Y3QgaXRlcmF0b3IgeworICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1faW5kZXggPSBtX2l0ZXJhYmxlLm1fYml0VmVjdG9yLmZpbmRCaXQobV9pbmRleCArIDEsIHRy
dWUpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4VHlwZT4obV9pbmRleCAtIG1faXRl
cmFibGUubV9zdGFydGluZ0luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAvLyBXZSBjYW5ub3QganVzdCB1c2UgYSBub3JtYWwgY29tcGFyaXNv
biBiZXlvbmQgbV9pdGVyYWJsZS5tX2VuZCwgYmVjYXVzZSB0aGUgZmluZEJpdCBpbiBvcGVyYXRv
cisrIG1heSBzZW5kIHVzIHByZXR0eSBtdWNoIGFueXdoZXJlCisgICAgICAgICAgICAgICAgLy8g
V29yc2U6IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciBvZiB0aGlzIGl0ZXJhdG9yIHRvIGFk
ZCBlbGVtZW50cyB0byB0aGUgaW50ZXJmZXJlbmNlIGdyYXBoIGJldHdlZW4gY2FsbHMgdG8gKysK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIHdvbid0IGludmFsaWRhdGUgdXMvY2F1c2UgcHJvYmxl
bXMgZGlyZWN0bHksIGFzIHRoZSB1c2VyIHdvbid0IGFmZmVjdCB0aGUgc2xpY2Ugb2YgdGhlIGJp
dCB2ZWN0b3IgdGhhdCB3ZSdyZSBpdGVyYXRpbmcgb3Zlci4KKyAgICAgICAgICAgICAgICAvLyBC
dXQgdGhleSBtYXkgd2VsbCBzZXQgYml0cyBiZXlvbmQgaXQuIFNvIHdlIGNhbm5vdCBjb21wdXRl
IGFuICJpZGVhbCIgZW5kIGl0ZXJhdG9yIChieSBsb29raW5nIGZvciB0aGUgZmlyc3QgYml0IHNl
dCBhZnRlciB0aGUgc2xpY2Ugd2UgY2FyZSBhYm91dCkgYWhlYWQgb2YgdGltZS4KKyAgICAgICAg
ICAgICAgICAvLyBJbnN0ZWFkIHdlIHNldCBtX2VuZCB0byBpbmRleCh1KzEsIDApIChzbyBqdXN0
IGFmdGVyIHRoZSBzbGljZSBvZiBpbnRlcmVzdCksIGFuZCB3ZSB1c2UgdGhpcyBzbGlnaHRseSB3
ZWlyZCBjb21wYXJpc29uIG9wZXJhdG9yIHRvIHN0aWxsIHN0b3AgaW4gdGltZSBvbmNlIHdlIGdv
IGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2l0ZXJhYmxlLm1f
ZW5kICYmIG90aGVyLm1faW5kZXggPj0gbV9pdGVyYWJsZS5tX2VuZCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGNvbnN0IEl0ZXJhYmxlJiBtX2l0ZXJhYmxlOworICAgICAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIHsgKnRoaXMsIG1fYmVnaW4gfTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiB7ICp0aGlzLCBtX2VuZCB9OyB9CisKKyAgICAgICAgY29uc3QgQml0VmVjdG9yJiBt
X2JpdFZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgbV9zdGFydGluZ0luZGV4OworICAgICAgICB1
bnNpZ25lZCBtX2JlZ2luOworICAgICAgICB1bnNpZ25lZCBtX2VuZDsKKyAgICB9OworCisgICAg
SXRlcmFibGUgb3BlcmF0b3JbXShJbmRleFR5cGUgdSkgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIGJlZ2luID0gbV9iaXRWZWN0b3IuZmluZEJpdChpbmRleCh1LCAwKSwgdHJ1ZSk7Cisg
ICAgICAgIHVuc2lnbmVkIGVuZCA9IGluZGV4KHUgKyAxLCAwKTsKKyAgICAgICAgcmV0dXJuIHsg
bV9iaXRWZWN0b3IsIGluZGV4KHUsIDApLCBiZWdpbiwgZW5kIH07CisgICAgfQorCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIGluZGV4KEluZGV4VHlwZSBpLCBJbmRleFR5cGUgaikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpICogbV9udW1FbGVtZW50cyArIGo7CisgICAgfQorCisgICAg
Qml0VmVjdG9yIG1fYml0VmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07CisgICAgSW5k
ZXhUeXBlIG1fbnVtRWxlbWVudHM7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgSVQ+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3IgeworcHVibGljOgorICAgIHVzaW5nIElu
ZGV4VHlwZSA9IElUOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW3VdLmNvbnRhaW5zKHYpOworICAgIH0K
KworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCisgICAgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodiku
aXNOZXdFbnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAgICAgIHJldHVy
biBpc05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5
cGUgdikKKyAgICB7CisgICAgICAgICh2b2lkKSBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuY2xl
YXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIG1heUNsZWFyKElu
ZGV4VHlwZSB1KSB7IG1fdmVjdG9yW3VdLmNsZWFyKCk7IH0KKworICAgIHZvaWQgc2V0TWF4SW5k
ZXgodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xp
bWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShuKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2go
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCkgOyArK2kpIHsKKyAgICAgICAgICAgIGZvciAoSW5kZXhU
eXBlIGogOiBtX3ZlY3RvcltpXSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0CisgICAgeworICAgICAg
ICB1bnNpZ25lZCBtZW1vcnkgPSAwOworICAgICAgICBmb3IgKGNvbnN0IFQmIHNldCA6IG1fdmVj
dG9yKQorICAgICAgICAgICAgbWVtb3J5ICs9IHNldC5tZW1vcnlVc2UoKTsKKyAgICAgICAgcmV0
dXJuIG1lbW9yeTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3Qg
eyBkYXRhTG9nKG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworICAgIHN0cnVjdCBJdGVyYWJsZSB7
CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgVDo6aXRlcmF0b3I7CisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuYmVnaW4oKTsgfQorICAgICAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NldC5lbmQoKTsgfQorICAgICAgICBj
b25zdCBUJiBtX3NldDsKKyAgICB9OworCisgICAgSXRlcmFibGUgb3BlcmF0b3JbXShJbmRleFR5
cGUgdSkgY29uc3QgeyByZXR1cm4geyBtX3ZlY3Rvclt1XSB9OyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVy
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBUOjpJbmRleFR5cGU7
CisgICAgdXNpbmcgSXRlcmFibGUgPSB0eXBlbmFtZSBUOjpJdGVyYWJsZTsKKyAgICBib29sIGNv
bnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikgeyByZXR1cm4gbV91bmRlcmx5aW5nLmNv
bnRhaW5zKHUsIHYpOyB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhU
eXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5MSA9IG1f
dW5kZXJseWluZy5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBib29sIGlz
TmV3RW50cnkyID0gbV91bmRlcmx5aW5nLmFkZEFuZFJldHVybklzTmV3RW50cnkodiwgdSk7Cisg
ICAgICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeTIsIGlzTmV3RW50cnkxID09IGlzTmV3RW50
cnkyKTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnkxOworICAgIH0KKworICAgIHZvaWQgYWRk
KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIG1fdW5kZXJseWluZy5h
ZGQodSwgdik7CisgICAgICAgIG1fdW5kZXJseWluZy5hZGQodiwgdSk7CisgICAgfQorCisgICAg
dm9pZCBjbGVhcigpIHsgbV91bmRlcmx5aW5nLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1heUNsZWFy
KEluZGV4VHlwZSB1KSB7IG1fdW5kZXJseWluZy5tYXlDbGVhcih1KTsgfQorICAgIHZvaWQgc2V0
TWF4SW5kZXgodW5zaWduZWQgbikgeyBtX3VuZGVybHlpbmcuc2V0TWF4SW5kZXgobik7IH0KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgeyBtX3VuZGVybHlpbmcuZm9yRWFjaChmdW5jdG9yKTsgfQorICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmcuc2l6ZSgpOyB9CisgICAg
dW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nLm1lbW9yeVVz
ZSgpOyB9CisgICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgbV91bmRlcmx5aW5n
LmR1bXBNZW1vcnlVc2VJbktCKCk7IH0KKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlw
ZSB1KSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmdbdV07IH0KKworcHJpdmF0ZToKKyAgICBU
IG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoaXMgaXMgZ2VuZXJhbGx5IGJldHRlciB0aGFuIHRo
ZSBEdXBsaWNhdGluZyB2ZXJzaW9uLCB0aGVyZSBhcmUgdHdvIHJlYXNvbnMgbm90IHRvIHVzZSBp
dCB0aG91Z2g6CisvLyAtIEZvciBCaXRWZWN0b3IsIGl0IGhhcyBubyBlZmZlY3Qgb24gbWVtb3J5
IHVzZSwgYW5kIGFkZHMgYSBicmFuY2ggdG8gZXZlcnkgY2FsbCB0byBjb250YWlucy9hZGRBbmRS
ZXR1cm5Jc05ld0VudHJ5CisvLyAtIEl0IG1ha2VzIGl0IGltcG9zc2libGUgdG8gaXRlcmF0ZSBv
dmVyIHRoZSBpbmRpY2VzIHRoYXQgaW50ZXJmZXJlIHdpdGggYSBwYXJ0aWN1bGFyIGluZGV4LiBU
aGlzIGNhbiBiZSByZXF1aXJlZCBmb3Igc29tZSB1c2VzIChzZWUgQWlyQWxsb2NhdGVTdGFja0J5
R3JhcGhDb2xvcmluZykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBVbmRpcmVjdGVkRWRn
ZXNEZWR1cEFkYXB0ZXIgeworcHVibGljOgorICAgIHVzaW5nIEluZGV4VHlwZSA9IHR5cGVuYW1l
IFQ6OkluZGV4VHlwZTsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUg
dikKKyAgICB7CisgICAgICAgIGlmICh2IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2
KTsKKyAgICAgICAgcmV0dXJuIG1fdW5kZXJseWluZy5jb250YWlucyh1LCB2KTsKKyAgICB9CisK
KyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2
KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYp
OworICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwg
dik7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAg
IHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAg
ICAgICBtX3VuZGVybHlpbmcuYWRkKHUsIHYpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKSB7
IG1fdW5kZXJseWluZy5jbGVhcigpOyB9CisgICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUgdSkg
eyBtX3VuZGVybHlpbmcubWF5Q2xlYXIodSk7IH0KKyAgICB2b2lkIHNldE1heEluZGV4KHVuc2ln
bmVkIG4pIHsgbV91bmRlcmx5aW5nLnNldE1heEluZGV4KG4pOyB9CisgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
IHsgbV91bmRlcmx5aW5nLmZvckVhY2goZnVuY3Rvcik7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIG1lbW9y
eVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJseWluZy5tZW1vcnlVc2UoKTsgfQorICAgIHZv
aWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IG1fdW5kZXJseWluZy5kdW1wTWVtb3J5VXNl
SW5LQigpOyB9CisKK3ByaXZhdGU6CisgICAgVCBtX3VuZGVybHlpbmc7Cit9OworCisvLyBUaGUg
Yml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAyMGtCIGZvciBuID0gNDAwLgor
Y29uc3RleHByIHVuc2lnbmVkIG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gNDAw
OwordXNpbmcgRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNE
dXBsaWNhdGluZ0FkYXB0ZXI8SW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90Pj47Cit1c2lu
ZyBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdFNtYWxsSW50
ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBEZWZhdWx0TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVu
ZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VV
bnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD4+OwordXNpbmcgRGVmYXVsdEh1
Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZl
cmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50
MzJfdD4+OwordXNpbmcgRGVmYXVsdExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVu
ZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD4+OwordXNpbmcgRGVm
YXVsdEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGlj
YXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldDx1aW50MzJfdD4sIHVpbnQzMl90Pj47CisKKy8vIFNldCB0byBvbmUgdG8gcnVuIGEgcmVm
ZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHBhcmFsbGVsIHdpdGggdGhlIG9wdGltaXplZCBkYXRh
c3RydWN0dXJlLCB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFncmVlIG9uIGV2ZXJ5IG1ldGhvZCBjYWxs
LgorLy8gQmV3YXJlOiB0aGlzIGlzIG5hdHVyYWxseSBtdWNoIHNsb3dlciBhbmQgbWVtb3J5IGh1
bmdyeQorI2RlZmluZSBURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEggMAorI2lmICFU
RVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKKwordXNpbmcgU21hbGxJbnRlcmZlcmVu
Y2VHcmFwaCA9IERlZmF1bHRTbWFsbEludGVyZmVyZW5jZUdyYXBoOwordXNpbmcgTGFyZ2VJbnRl
cmZlcmVuY2VHcmFwaCA9IERlZmF1bHRMYXJnZUludGVyZmVyZW5jZUdyYXBoOwordXNpbmcgSHVn
ZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdEh1Z2VJbnRlcmZlcmVuY2VHcmFwaDsKKwordXNp
bmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdFNtYWxsSXRlcmFibGVJ
bnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9
IERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBIdWdlSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFw
aDsKKworI2Vsc2UgLy8gVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICisKKy8vIFRo
aXMgaXMgYW4gdW5vcHRpbWl6ZWQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLCBmb3IgdXNlIHdp
dGggSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGggYmVsb3cKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorY2xhc3MgSW50ZXJmZXJlbmNlSGFzaFNldCB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5k
ZXhUeXBlID0gVDsKKyAgICB1c2luZyBJbnRlcmZlcmVuY2VFZGdlID0gc3RkOjpwYWlyPEluZGV4
VHlwZSwgSW5kZXhUeXBlPjsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5
cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5jb250YWlucyh7IHUsIHYgfSk7Cisg
ICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRl
eFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoeyB1LCB2IH0pLmlzTmV3
RW50cnk7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
ICAgIHsKKyAgICAgICAgbV9zZXQuYWRkKHsgdSwgdiB9KTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBz
ZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuLCBu
IDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKGF1dG8gZWRnZSA6IG1fc2V0KQorICAg
ICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBj
b25zdCB7IHJldHVybiBtX3NldC5jYXBhY2l0eSgpICogc2l6ZW9mKEludGVyZmVyZW5jZUVkZ2Up
OyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9y
eVVzZSgpIC8gMTAyNCk7IH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PEludGVyZmVyZW5jZUVk
Z2U+IG1fc2V0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitjbGFz
cyBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5k
ZXhUeXBlID0gdHlwZW5hbWUgVDo6SW5kZXhUeXBlOworICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19zYW1lPEluZGV4VHlwZSwgdHlwZW5hbWUgVTo6SW5kZXhUeXBlPjo6dmFsdWUpOworICAgIGJv
b2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgYm9v
bCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1LCB2KTsKKyAgICAgICAgYm9vbCBjb250
YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQo
Y29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAgICAgICByZXR1cm4gY29udGFpbnNJbkE7
CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeUEgPSBtX3NldEEuYWRk
QW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5QiA9IG1f
c2V0Qi5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChpc05ld0VudHJ5QSA9PSBpc05ld0VudHJ5Qik7CisgICAgICAgIHJldHVybiBpc05ld0VudHJ5
QTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAg
eworICAgICAgICBtX3NldEEuYWRkKHUsIHYpOworICAgICAgICBtX3NldEIuYWRkKHUsIHYpOwor
ICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zZXRBLmNsZWFyKCk7
CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5k
ZXhUeXBlIHUpCisgICAgeworICAgICAgICBtX3NldEEubWF5Q2xlYXIodSk7CisgICAgICAgIG1f
c2V0Qi5tYXlDbGVhcih1KTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVk
IG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOworICAgICAgICBtX3NldEEuc2V0TWF4SW5kZXgobik7CisgICAgICAgIG1f
c2V0Qi5zZXRNYXhJbmRleChuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUEgPSBtX3NldEEuc2l6ZSgp
OworICAgICAgICB1bnNpZ25lZCBzaXplQiA9IG1fc2V0Qi5zaXplKCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHNpemVBID09IHNpemVCKTsKKyAgICAgICAgcmV0dXJuIHNpemVBOworICAgIH0K
KworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9zZXRBLm1lbW9yeVVzZSgpICsgbV9zZXRCLm1lbW9yeVVzZSgpOworICAgIH0KKworICAgIHZv
aWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdAorICAgIHsKKyAgICAgICAgZGF0YUxvZyhtX3Nl
dEEubWVtb3J5VXNlKCkgLyAxMDI0LCAiIC0+ICIsIG1fc2V0Qi5tZW1vcnlVc2UoKSAvIDEwMjQp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFQgbV9zZXRBOworICAgIFUgbV9zZXRCOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitjbGFzcyBJbnN0cnVtZW50ZWRJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoIDogcHVibGljIEluc3RydW1lbnRlZEludGVyZmVyZW5j
ZUdyYXBoPFQsIFU+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSW5zdHJ1bWVudGVkSW50
ZXJmZXJlbmNlR3JhcGg8VCwgVT47CisgICAgdXNpbmcgSW5kZXhUeXBlID0gdHlwZW5hbWUgQmFz
ZTo6SW5kZXhUeXBlOworCisgICAgc3RydWN0IEl0ZXJhYmxlIHsKKyAgICAgICAgSXRlcmFibGUo
dHlwZW5hbWUgVDo6SXRlcmFibGUgaXRlcmFibGVBLCB0eXBlbmFtZSBVOjpJdGVyYWJsZSBpdGVy
YWJsZUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIHZhbHVlIDogaXRl
cmFibGVBKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7CisgICAgICAg
ICAgICBWZWN0b3I8SW5kZXhUeXBlPiB2YWx1ZXNCOworICAgICAgICAgICAgZm9yIChJbmRleFR5
cGUgdmFsdWUgOiBpdGVyYWJsZUIpCisgICAgICAgICAgICAgICAgdmFsdWVzQi5hcHBlbmQodmFs
dWUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZXMuc2l6ZSgpID09IHZhbHVl
c0Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIHN0ZDo6c29ydChtX3ZhbHVlcy5iZWdpbigpLCBtX3Zh
bHVlcy5lbmQoKSk7CisgICAgICAgICAgICBzdGQ6OnNvcnQodmFsdWVzQi5iZWdpbigpLCB2YWx1
ZXNCLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVl
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlc1tp
XSA9PSB2YWx1ZXNCW2ldKTsKKyAgICAgICAgfQorICAgICAgICB1c2luZyBpdGVyYXRvciA9IHR5
cGVuYW1lIFZlY3RvcjxJbmRleFR5cGU+Ojpjb25zdF9pdGVyYXRvcjsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlcy5lbmQoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIFZlY3RvcjxJbmRleFR5cGU+IG1fdmFsdWVzOworICAgIH07CisKKyAgICBJdGVyYWJs
ZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHsg
QmFzZTo6bV9zZXRBW3VdLCBCYXNlOjptX3NldEJbdV0gfTsKKyAgICB9Cit9OworCit1c2luZyBS
ZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJ
bnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90Pj47Cit1c2luZyBIdWdlUmVmZXJlbmNlSW50ZXJm
ZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI8SW50ZXJmZXJlbmNlSGFz
aFNldDx1aW50MzJfdD4+OworCit1c2luZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1
bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJlbmNlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1
bHRTbWFsbEludGVyZmVyZW5jZUdyYXBoPjsKK3VzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGgg
PSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFw
aCwgRGVmYXVsdExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+OwordXNpbmcgSHVnZUludGVyZmVyZW5j
ZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8SHVnZVJlZmVyZW5jZUludGVy
ZmVyZW5jZUdyYXBoLCBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdyYXBoPjsKKwordXNpbmcgUmVm
ZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0
aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8SGFzaFNldDx1aW50MTZfdCwgSW50SGFzaDx1
aW50MTZfdD4sIFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQxNl90Pj4sIHVpbnQx
Nl90Pj47Cit1c2luZyBIdWdlUmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVu
ZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8SGFzaFNl
dDx1aW50MzJfdCwgSW50SGFzaDx1aW50MzJfdD4sIFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJh
aXRzPHVpbnQzMl90Pj4sIHVpbnQzMl90Pj47CisKK3VzaW5nIFNtYWxsSXRlcmFibGVJbnRlcmZl
cmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJl
bmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNtYWxsSXRlcmFibGVJbnRlcmZl
cmVuY2VHcmFwaD47Cit1c2luZyBMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0
cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPFJlZmVyZW5jZUl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGgsIERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+OwordXNp
bmcgSHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJdGVyYWJsZUlu
dGVyZmVyZW5jZUdyYXBoPEh1Z2VSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoLCBE
ZWZhdWx0SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+OworCisjZW5kaWYgLy8gVEVTVF9P
UFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICisKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaCBiL1Nv
dXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKaW5kZXggOWI2YjNk
ODdlNzg0Li44OGUzZjQ1MTA5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0xpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VV
bnNpZ25lZEludGVnZXJTZXQuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICwg
bV9taW4oMCkKICAgICAgICAgLCBtX21heCgwKQogICAgIHsKLSAgICAgICAgbmV3ICgmbV9pbmxp
bmUuYml0VmVjdG9yKSBCaXRWZWN0b3I7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5l
LmJpdFZlY3RvcikgQml0VmVjdG9yOwogICAgIH0KIAogICAgIH5MaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldCgpCkBAIC03MCw5ICs3MCwyMiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9tYXgo
b3RoZXIubV9tYXgpCiAgICAgewogICAgICAgICBpZiAoaXNCaXRWZWN0b3IoKSkKLSAgICAgICAg
ICAgIG5ldyAoJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yKFdURk1vdmUob3RoZXIubV9p
bmxpbmUuYml0VmVjdG9yKSk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5i
aXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG90aGVyLm1faW5saW5lLmJpdFZlY3RvcikpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgKCZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RG
TW92ZShvdGhlci5tX2lubGluZS5oYXNoU2V0KSk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGws
ICZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShvdGhlci5tX2lubGluZS5oYXNoU2V0KSk7
CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NpemUgPSAwOwor
ICAgICAgICBtX21pbiA9IDA7CisgICAgICAgIG1fbWF4ID0gMDsKKyAgICAgICAgaWYgKGlzQml0
VmVjdG9yKCkpCisgICAgICAgICAgICBtX2lubGluZS5iaXRWZWN0b3IuY2xlYXJBbGwoKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2lubGluZS5oYXNoU2V0Ln5IYXNoU2V0KCk7Cisg
ICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcjsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHZhbHVlKSBj
b25zdApAQCAtMTMxLDkgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5kZXhUeXBlIG5ld01p
biA9IHN0ZDo6bWluKG1fbWluLCB2YWx1ZSk7CiAgICAgICAgIEluZGV4VHlwZSBuZXdNYXggPSBz
dGQ6Om1heChtX21heCwgdmFsdWUpOwogICAgICAgICB1bnNpZ25lZCBiaXRWZWN0b3JTaXplID0g
KG5ld01heCAtIG5ld01pbikgLyA4OwotICAgICAgICB1bnNpZ25lZCBoYXNoU2V0RXN0aW1hdGVk
T2NjdXBhbmN5T3ZlcmhlYWQgPSAzOyAvLyBtYXggb2NjdXBhbmN5IGZvciBhIGxhcmdlIEhhc2hT
ZXQgaXMgNTAlCi0gICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNoU2V0Q2FwYWNpdHkgPSBzdGQ6
Om1heCg4dSwgbV9zaXplKSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZDsKLSAg
ICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRTaXplID0gd291bGRCZUhhc2hTZXRDYXBhY2l0
eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgICAgICB1bnNpZ25lZCB3b3VsZEJlSGFzaFNldFNp
emUgPSBlc3RpbWF0ZUhhc2hTZXRTaXplKG1fc2l6ZSk7CiAgICAgICAgIGlmICh3b3VsZEJlSGFz
aFNldFNpemUgKiAyIDwgYml0VmVjdG9yU2l6ZSkgewogICAgICAgICAgICAgdHJhbnNpdGlvblRv
SGFzaFNldCgpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2lubGluZS5oYXNoU2V0LmFk
ZCh2YWx1ZSk7CkBAIC0yNjksNiArMjgwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAmJiAh
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8SW5kZXhUeXBlPjo6aXNEZWxldGVkVmFsdWUo
dmFsdWUpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGVzdGltYXRlSGFzaFNldFNpemUodW5zaWdu
ZWQgbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lP
dmVyaGVhZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFyZ2UgSGFzaFNldCBpcyA1MCUK
KyAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0eSA9IHN0ZDo6bWF4KDh1LCBu
KSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZDsKKyAgICAgICAgcmV0dXJuIHdv
dWxkQmVIYXNoU2V0Q2FwYWNpdHkgKiBzaXplb2YoSW5kZXhUeXBlKTsKKyAgICB9CisKICAgICB2
b2lkIHRyYW5zaXRpb25Ub0hhc2hTZXQoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQml0VmVj
dG9yKCkpOwpAQCAtMjc4LDcgKzI5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoSW5kZXhU
eXBlIG9sZEluZGV4IDogbV9pbmxpbmUuYml0VmVjdG9yKQogICAgICAgICAgICAgbmV3U2V0LmFk
ZChvbGRJbmRleCArIG1fbWluKTsKICAgICAgICAgbV9pbmxpbmUuYml0VmVjdG9yLn5CaXRWZWN0
b3IoKTsKLSAgICAgICAgbmV3ICgmbV9pbmxpbmUuaGFzaFNldCkgU2V0KFdURk1vdmUobmV3U2V0
KSk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmhhc2hTZXQpIFNldChXVEZNb3Zl
KG5ld1NldCkpOwogICAgICAgICBtX3NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVk
Pjo6bWF4KCk7CiAKICAgICAgICAgQVNTRVJUKCFpc0JpdFZlY3RvcigpKTsKQEAgLTI5Nyw3ICsz
MTUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChuZXdCaXRWZWN0b3Iu
cXVpY2tHZXQoMCkpOwogICAgICAgICBtX2lubGluZS5oYXNoU2V0Ln5TZXQoKTsKLSAgICAgICAg
bmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShuZXdCaXRWZWN0b3Ip
KTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3Io
V1RGTW92ZShuZXdCaXRWZWN0b3IpKTsKIAogICAgICAgICBBU1NFUlQoaXNCaXRWZWN0b3IoKSk7
CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429915</attachid>
            <date>2021-05-27 13:19:26 -0700</date>
            <delta_ts>2021-05-27 15:05:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>67879</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uZDdkYWJmZjkyNzhiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAyMS0wNS0yNiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEFpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3Jpbmcgc2hvdWxkIHVzZSB0aGUgb3B0aW1pemVkIGludGVyZmVyZW5j
ZSBncmFwaHMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gY2hhbmdl
IGluIHRoaXMgcGF0Y2ggaXMgdGhhdCBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIGlz
IG5vdyB1c2luZyB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1Y3R1cmVzIGluIHd0Zi9JbnRlcmZlcmVu
Y2VHcmFwaC5oLgorICAgICAgICBUaGlzIHJlcXVpcmVkIHRlbXBsYXRpbmcgbW9zdCBvZiBpdCBv
dmVyIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGggdXNlZCAoU21hbGwvTGFyZ2UvSHVnZSksIGJ1dCBJ
IHRyaWVkIGtlZXBpbmcgc29tZSBjb21tb24gcGFydHMgb3V0IG9mIHRoZSB0ZW1wbGF0ZWQgY2xh
c3MgdG8gbWluaW1pemUgdGhlIGltcGFjdCBvbiBjb21waWxlIHRpbWVzIGFuZCBiaW5hcnkgc2l6
ZS4KKworICAgICAgICBBIGNvbnNlcXVlbmNlIG9mIHRoYXQgY2hhbmdlIGlzIHRoYXQgY29hbGVz
Y2FibGVNb3ZlcyBhbmQgcmVtYXBwZWRTdGFja1Nsb3RzIG5vdyBzdG9yZSBpbmRpY2VzIGluc3Rl
YWQgb2YgZGlyZWN0IHBvaW50ZXJzIHRvIFN0YWNrU2xvdHMsIHJlc3VsdGluZyBpbiBhIG1lbW9y
eSByZWR1Y3Rpb24gb2YgYWJvdXQgM3ggYXMgd2VsbC4KKworICAgICAgICBBbm90aGVyIGNvbnNl
cXVlbmNlIGlzIHRoYXQgSSBoYWQgdG8gc2xpZ2h0bHkgYWx0ZXIgdGhlIHdheSB0aGF0IGNvYWxl
c2Npbmcgd29ya3M6IGluc3RlYWQgb2YgY2FyZWZ1bGx5IHJlbW92aW5nIHRoZSBpbnRlcmZlcmVu
Y2UgZWRnZXMgb2YgdGhlIGtpbGxlZCBzbG90LCB3ZSBzaW1wbHkgdXNlIG1heUNsZWFyKCkgd2hp
Y2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtb3ZlIGFueXRoaW5nLgorICAgICAgICBJIGJlbGll
dmUgdGhhdCB0aGlzIGlzIHNvdW5kLCBiZWNhdXNlIGV2ZXJ5IHN1YnNlcXVlbnQgYWNjZXNzIHRv
IG1faW50ZXJmZXJlbmNlIGNoZWNrcyB3aGV0aGVyIGEgc2xvdCBoYXMgYmVlbiBjb2FsZXNjZWQg
Zmlyc3QsIHNvIGRyb3BwaW5nIHRoZXNlIGVkZ2VzIGlzIHB1cmVseSBhIG1lbW9yeSBzYXZpbmcs
IGJ1dCBoYXMgbm8gbG9naWNhbCBlZmZlY3QuCisKKyAgICAgICAgU2xpZ2h0bHkgbW9yZSBjb25j
ZXJuaW5nbHksIEkndmUgaGFkIHRvIHNraXAgY29hbGVzY2luZyBzbG90cyB3aGVuIHRoZSBzbG90
VG9LaWxsIGlzIHNlbGYtaW50ZXJmZXJpbmcuIFRoZSBjb2RlIHByZXZpb3VzbHkgaGFkIHNvbWUg
ZmFpcmx5IGludHJpY2F0ZSBjb2RlIGZvciB0aGF0IGNhc2UsIHdoaWNoIGJyb2tlIGp1c3QgYWJv
dXQgZXZlcnkgaW52YXJpYW50IEkgcmVseSBvbiAoaWYgSSB1bmRlcnN0YW5kIGl0IGNvcnJlY3Rs
eSB0aGUgZWRnZXMgd2VyZSBubyBsb25nZXIgdW5kaXJlY3RlZCkuIFNpbmNlIGl0IG9ubHkgb2Nj
dXJzIGEgZmV3IHRpbWVzIGluIGFsbCBvZiBKZXRTdHJlYW0yLCBhbmQgaGFzIG5vIGVmZmVjdCBv
biBhdmVyYWdlIGZyYW1lIHNpemUgSSBmZWVsIGNvbWZvcnRhYmxlIHNraXBwaW5nIHRoZSBjb2Fs
ZXNjaW5nIGluIHRoYXQgY2FzZS4KKworICAgICAgICBUaGUgbmV3IGNvZGUgd2FzIHRlc3RlZCBp
biBhIGZldyB3YXlzOgorICAgICAgICAtIHJ1bm5pbmcgb24gSmV0U3RyZWFtMiB3aXRoIGFzYW4K
KyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgd2l0aCBURVNUX09QVElNSVpFRF9JTlRF
UkZFUkVOQ0VfR1JBUEgKKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgYW5kIGxvZ2dp
bmcgdGhlIGZyYW1lIHNpemVzIGF0IHRoZSBlbmQgb2YgdGhpcyBwaGFzZSwgYW5kIGNvbXBhcmlu
ZyB0byB0aGUgcmVzdWx0cyBvZiBkb2luZyB0aGUgc2FtZSBvbiBUb1QgKHNhbWUgYXZlcmFnZSBm
cmFtZSBzaXplKQorCisgICAgICAgIFRoZSB0d28gZnVuY3Rpb25zIHdoZXJlIHRoaXMgY29kZSBo
YWQgdGhlIGxhcmdlc3QgbWVtb3J5IGZvb3RwcmludCBpbiBKZXRTdHJlYW0yIHdlcmUgYm90aCBp
biB0c2Ytd2FzbS4KKyAgICAgICAgT25lIGhhcyA3NTEgc3RhY2sgc2xvdHMsIGFuZCBoYWQgYW4g
aW50ZXJmZXJlbmNlIGdyYXBoIG9mIDIuMU1CIGFuZCBhIGNvYWxlc2NhYmxlTW92ZXMgdmVjdG9y
IG9mIDQ0MGtCCisgICAgICAgIFRoZSBvdGhlciBoYXMgNjczIHN0YWNrIHNsb3RzLCBhbmQgaGFk
IGFuIGludGVyZmVyZW5jZSBncmFwaCBvZiAxLjlNQiBhbmQgYSBjb2FsZXNjYWJsZU1vdmVzIHZl
Y3RvciBvZiA0MjFrQi4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IHJlc3BlY3RpdmVs
eSB1c2UgNzlrQisxNDZrQiBhbmQgNjdrQisxNDBrQgorICAgICAgICBUaGUgZWZmZWN0IG9uIHRo
ZSByZXN0IG9mIEpldFN0cmVhbTIgaXMgbGVzcyBsaWtlbHkgdG8gbWF0dGVyIGFzIGZldyBmdW5j
dGlvbnMgdXNlZCBtb3JlIHRoYW4gYSBmZXcgZG96ZW5zIG9mIGtCIGluIHRoaXMgcGhhc2UsIGJ1
dCBpbiBwZXJjZW50YWdlcyBhcmUganVzdCBhcyBodWdlLgorCisgICAgICAgIE1vcmUgaW1wb3J0
YW50bHkgKGFuZCB0aGUgcmVhc29uIEkgd3JvdGUgdGhpcyBwYXRjaCBpbiB0aGUgZmlyc3QgcGxh
Y2UpLCBJIGNoZWNrZWQgbXJ1Ynktd2FzbS5hb3Rva2kuZGV2IHdoaWNoIHdpdGggYSBmZXcgb3Ro
ZXIgcGFnZXMgZm9yY2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3JhcGhD
b2xvcmluZyBiZWNhdXNlIG9mIGpldHNhbXMuCisgICAgICAgIEl0IGhhcyB0d28gbWFzc2l2ZSBm
dW5jdGlvbnMgdGhhdCByZWFjaCB0aGlzIHBoYXNlIGlmIEkgaW5jcmVhc2UgT3B0aW9uczo6bWF4
aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nOgorICAgICAgICAtIGFib3V0IDZrIHN0YWNrIHNsb3Rz
IC0+IDIxNU1CICsgNk1CIChpbnRlcmZlcmVuY2UgZ3JhcGggKyBjb2FsZXNjYWJsZU1vdmVzKQor
ICAgICAgICAtIGFib3V0IDlrIHN0YWNrIHNsb3RzIC0+IDM5NU1CICsgNE1CCisgICAgICAgIEFm
dGVyIHRoaXMgcGF0Y2gsIHRoZXkgcmVzcGVjdGl2ZWx5IHVzZSA0LjVNQisyTUIgYW5kIDlNQisx
LjVNQiwgb3Igcm91Z2hseSBhIDQweCBpbXByb3ZlbWVudC4KKyAgICAgICAgQ29tYmluZWQgd2l0
aCB0aGUgcmVjZW50IGltcHJvdmVtZW50cyB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLCBJIGhv
cGUgdG8gYmUgYWJsZSB0byBpbmNyZWFzZSBPcHRpb25zOjptYXhpbXVtVG1wc0ZvckdyYXBoQ29s
b3Jpbmcgc29vbiAoaW4gYSBkaWZmZXJlbnQgcGF0Y2ggZm9yIGVhc2llciBiaXNlY3Rpb24gaWYg
ZWl0aGVyIGNhdXNlIGEgcGVyZiByZWdyZXNzaW9uKS4KKyAgICAgICAgVGhpcyB3b3VsZCBiZSBo
ZWxwZnVsLCBzaW5jZSBpdHMgbG93ZXJpbmcgY3JhdGVyZWQgb3VyIHBlcmZvcm1hbmNlIG9uIHNv
bWUgb3RoZXIgd2FzbSBhcHBsaWNhdGlvbiBieSA4eC4KKworICAgICAgICBJbiB0ZXJtcyBvZiBj
b21waWxlIHRpbWVzLCB0aGlzIHBhdGNoIGxvd2VyZWQgdGhlIHRpbWUgc3BlbnQgaW4gQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZyBvdmVyIHRoZSBjb3Vyc2Ugb2YgYSBydW4gb2YgSmV0U3Ry
ZWFtMiBmcm9tIHJvdWdobHkgMzUwbXMgdG8gcm91Z2hseSAyNzBtcy4KKyAgICAgICAgVGhpcyBp
cyBhbG1vc3QgY2VydGFpbmx5IG5lZ2xpZ2libGUsIGJ1dCBhdCBsZWFzdCBpdCBndWFyYW50ZWVz
IHRoYXQgaXQgZGlkIG5vdCByZWdyZXNzLgorCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRl
UmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcpOgorCiAyMDIxLTA1LTI3ICBBZHJpYW4gUGVyZXogZGUg
Q2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVpbGQg
Zml4ZXMsIGxhdGUgTWF5IDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENv
bG9yaW5nLmNwcAppbmRleCA5ZTE2MjM3YTdiZGIuLjI2YjQ0YjVlYjFhYyAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhD
b2xvcmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNsdWRl
ICJBaXJVc2VDb3VudHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2Vy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0ludGVyZmVyZW5jZUdyYXBoLmg+CiAjaW5jbHVkZSA8d3Rm
L1NtYWxsU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01MiwyMzggKzUyLDYg
QEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcgPSBmYWxzZTsKIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIHJl
cG9ydEludGVyZmVyZW5jZUdyYXBoTWVtb3J5VXNlID0gZmFsc2U7CiAKLXRlbXBsYXRlIDx0eXBl
bmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKLSAgICAvLyBJbnRl
cmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0d28g
VG1wcyBpcyByZXByZXNlbnRlZAotICAgIC8vIGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVzICh0
aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUgYmln
Z2VyIFRtcC4KLSAgICB1c2luZyBJbnRlcmZlcmVuY2VFZGdlID0gc3RkOjpwYWlyPEluZGV4VHlw
ZSwgSW5kZXhUeXBlPjsKLXB1YmxpYzoKLSAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0ZDo6
c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsKLSAg
ICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4
VHlwZSB2KQotICAgIHsKLSAgICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2Fw
KHUsIHYpOwotICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5pc05ld0VudHJ5Owot
ICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9zZXQuY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCi0gICAgewotICAg
ICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46
Om1heCgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2
b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZvciAo
YXV0byBlZGdlIDogbV9zZXQpCi0gICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXplKCk7IH0KLQotICAg
IHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmNhcGFjaXR5KCkgKiBz
aXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0Io
KSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAgICBI
YXNoU2V0PEludGVyZmVyZW5jZUVkZ2U+IG1fc2V0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIEluZGV4VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7Ci1wdWJs
aWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewot
ICAgICAgICBpZiAodiA8IHUpCi0gICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAgICAg
IHJldHVybiBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKLSAgICB9Ci0KLSAgICBib29sIGFkZEFu
ZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAg
ICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwotICAgICAgICBib29s
IGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdFbnRyeTsKLSAgICAgICAgbV9z
aXplICs9IGlzTmV3RW50cnk7Ci0gICAgICAgIHJldHVybiBpc05ld0VudHJ5OwotICAgIH0KLQot
ICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuY2xlYXIoKTsKLSAgICAg
ICAgbV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVk
IG4pCi0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOwotICAgICAgICBtX3ZlY3Rvci5yZXNpemUobik7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92
ZWN0b3Iuc2l6ZSgpIDsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDogbV92
ZWN0b3JbaV0pCi0gICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0K
LSAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWduZWQg
bWVtb3J5ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBUJiBzZXQgOiBtX3ZlY3RvcikKLSAgICAg
ICAgICAgIG1lbW9yeSArPSBzZXQubWVtb3J5VXNlKCk7Ci0gICAgICAgIHJldHVybiBtZW1vcnk7
Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxvZyht
ZW1vcnlVc2UoKS8xMDI0KTsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxUPiBtX3ZlY3RvcjsK
LSAgICB1bnNpZ25lZCBtX3NpemUgezB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIEluZGV4
VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBj
b250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICByZXR1cm4g
bV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgodSwgdikpOwotICAgIH0KLQotICAgIGJvb2wgYWRk
QW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAg
ICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBkbyBvbmx5IG9uZSBxdWlja1NldCwgYXQgdGhlIGNvc3Qg
b2Ygb25lIGV4dHJhIGJyYW5jaCBpbiBldmVyeSBjb250YWlucy9hZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5ICh0byBlbmZvcmNlIHUgPCB2KQotICAgICAgICBib29sIGFscmVhZHlJbiA9IG1fYml0VmVj
dG9yLnF1aWNrU2V0KGluZGV4KHUsIHYpKTsKLSAgICAgICAgYm9vbCBhbHJlYWR5SW4yID0gbV9i
aXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodiwgdSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGFs
cmVhZHlJbjIsIGFscmVhZHlJbiA9PSBhbHJlYWR5SW4yKTsKLSAgICAgICAgbV9zaXplICs9ICFh
bHJlYWR5SW47Ci0gICAgICAgIHJldHVybiAhYWxyZWFkeUluOwotICAgIH0KLQotICAgIHZvaWQg
Y2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKLSAgICAgICAg
bV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4p
Ci0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBl
Pjo6bWF4KCkpOwotICAgICAgICBtX251bVRtcHMgPSBuOwotICAgICAgICBtX2JpdFZlY3Rvci5l
bnN1cmVTaXplKG4qbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAg
ICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtVG1wczsgKytpKSB7Ci0gICAgICAgICAg
ICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bVRtcHM7ICsraikgewotICAgICAg
ICAgICAgICAgIGlmIChtX2JpdFZlY3Rvci5xdWlja0dldChpbmRleChpLCBqKSkpCi0gICAgICAg
ICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQot
Ci0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gKG1fYml0VmVjdG9yLnNp
emUoKSArIDcpID4+IDM7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7
IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBp
bmRleChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCi0gICAgewotICAgICAgICByZXR1cm4gaSAq
IG1fbnVtVG1wcyArIGo7Ci0gICAgfQotCi0gICAgQml0VmVjdG9yIG1fYml0VmVjdG9yOwotICAg
IHVuc2lnbmVkIG1fc2l6ZSB7MH07Ci0gICAgSW5kZXhUeXBlIG1fbnVtVG1wczsKLX07Ci0KLSNk
ZWZpbmUgVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBIIDAKLSNpZiBURVNUX09QVElN
SVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aCB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYp
Ci0gICAgewotICAgICAgICBib29sIGNvbnRhaW5zSW5BID0gbV9zZXRBLmNvbnRhaW5zKHUsIHYp
OwotICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRCLmNvbnRhaW5zKHUsIHYpOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBjb250YWluc0luQik7Ci0gICAgICAg
IHJldHVybiBjb250YWluc0luQTsKLSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklzTmV3
RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgYm9vbCBpc05l
d0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwotICAgICAgICBi
b29sIGlzTmV3RW50cnlCID0gbV9zZXRCLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTmV3RW50cnlBID09IGlzTmV3RW50cnlCKTsKLSAgICAg
ICAgcmV0dXJuIGlzTmV3RW50cnlBOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsK
LSAgICAgICAgbV9zZXRBLmNsZWFyKCk7Ci0gICAgICAgIG1fc2V0Qi5jbGVhcigpOwotICAgIH0K
LQotICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAgIG1f
c2V0QS5zZXRNYXhUbXBJbmRleChuKTsKLSAgICAgICAgbV9zZXRCLnNldE1heFRtcEluZGV4KG4p
OwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgbV9zZXRBLmZvckVh
Y2goZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICB1bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7Ci0gICAgICAgIHVuc2lnbmVk
IHNpemVCID0gbV9zZXRCLnNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZUEgPT0g
c2l6ZUIpOwotICAgICAgICByZXR1cm4gc2l6ZUE7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wTWVt
b3J5VXNlSW5LQigpIGNvbnN0Ci0gICAgewotICAgICAgICBkYXRhTG9nKG1fc2V0QS5tZW1vcnlV
c2UoKS8xMDI0LCAiIC0+ICIsIG1fc2V0Qi5tZW1vcnlVc2UoKS8xMDI0KTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgVCBtX3NldEE7Ci0gICAgVSBtX3NldEI7Ci19OwotCi11c2luZyBTbWFsbElu
dGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90PjsKLXVzaW5n
IExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxJ
bnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExpa2VseURl
bnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQxNl90PiwgdWludDE2X3Q+LCB1aW50MTZfdD47Ci11
c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aDxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQzMl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMyX3Q+LCB1aW50MTZfdD47
Ci0KLSNlbHNlIC8vIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSAotCi11c2luZyBT
bWFsbEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90PjsK
LXVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD47Ci11c2luZyBIdWdl
SW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50MzJfdD47Ci0KLSNlbmRpZgotCiAvLyBUaGUgQWJz
dHJhY3RDb2xvcmluZ0FsbG9jYXRvciBkZWZpbmVzIGFsbCB0aGUgY29kZSB0aGF0IGlzIGluZGVw
ZW5kYW50CiAvLyBmcm9tIHRoZSBiYW5rIG9yIHJlZ2lzdGVyIGFuZCBjYW4gYmUgc2hhcmVkIHdo
ZW4gYWxsb2NhdGluZyByZWdpc3RlcnMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGUsIHR5
cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgpAQCAtMTU4OSwxMiArMTM1NywxMiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX2ludGVyZmVy
ZW5jZUVkZ2VzLnNldE1heFRtcEluZGV4KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0
ZUluZGV4KG1fY29kZS5udW1UbXBzKGJhbmspKSk7CisgICAgICAgIG1faW50ZXJmZXJlbmNlRWRn
ZXMuc2V0TWF4SW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgobV9j
b2RlLm51bVRtcHMoYmFuaykpKTsKIAogICAgICAgICBpbml0aWFsaXplUHJlY29sb3JlZFRtcCgp
OwogICAgICAgICBidWlsZCgpOwogCi0gICAgICAgIGlmIGNvbnN0ZXhwciAocmVwb3J0SW50ZXJm
ZXJlbmNlR3JhcGhNZW1vcnlVc2UgJiYgKHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQsIExh
cmdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8SW50ZXJmZXJlbmNl
U2V0LCBIdWdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2YWx1ZSkpIHsKKyAgICAgICAgaWYgY29uc3Rl
eHByIChyZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVzZSAmJiAoc3RkOjppc19zYW1lPElu
dGVyZmVyZW5jZVNldCwgV1RGOjpMYXJnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUgfHwgc3Rk
Ojppc19zYW1lPEludGVyZmVyZW5jZVNldCwgV1RGOjpIdWdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2
YWx1ZSkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIm51bVRtcHN8bnVtRWRnZXN8bWVtb3J5VXNl
KGtCKTogIiwgbV9jb2RlLm51bVRtcHMoYmFuayksICIgfCAiLCBtX2ludGVyZmVyZW5jZUVkZ2Vz
LnNpemUoKSwgIiB8ICIpOwogICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5kdW1wTWVt
b3J5VXNlSW5LQigpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKQEAgLTIwNDIsMzEgKzE4
MTAsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICB9OwogCi0gICAgICAgICAgICAvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4q
biBiaXRzLCBvciAyMGtCIGZvciBuID0gNDAwLgotICAgICAgICAgICAgY29uc3RleHByIHVuc2ln
bmVkIG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gNDAwOwotICAgICAgICAgICAg
aWYgKG1fY29kZS5udW1UbXBzKGJhbmspIDwgbWF4U2l6ZUZvclNtYWxsSW50ZXJmZXJlbmNlR3Jh
cGgpIHsKKyAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IFdURjo6bWF4U2l6
ZUZvclNtYWxsSW50ZXJmZXJlbmNlR3JhcGgpIHsKICAgICAgICAgICAgICAgICBpZiAodXNlSVJD
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3QsIGJh
bmssIElSQywgU21hbGxJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBX
aWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAg
IENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIFdURjo6U21hbGxJbnRlcmZl
cmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVu
c3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24o
YWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgQnJpZ2dzLCBTbWFsbEludGVyZmVy
ZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5z
cGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWlu
dDE2X3QsIGJhbmssIEJyaWdncywgV1RGOjpTbWFsbEludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0
b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAg
ICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykg
PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpIHsKICAgICAgICAgICAgICAg
ICBpZiAodXNlSVJDKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8
dWludDE2X3QsIGJhbmssIElSQywgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1f
Y29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAg
ICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIFdURjo6
TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91
c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBk
b0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgQnJpZ2dzLCBM
YXJnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3Vz
ZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKKyAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdB
bGxvY2F0b3I8dWludDE2X3QsIGJhbmssIEJyaWdncywgV1RGOjpMYXJnZUludGVyZmVyZW5jZUdy
YXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFi
bGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0
b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gSGF2aW5nIG1vcmUgdGhhbiAyKioxNiBudW1UbXBzIGNhbiBvY2N1ciBldmVuIHdp
dGggT3B0aW9uczo6bWF4VG1wc0ZvckdyYXBoQ29sb3JpbmcoKSA8IDIqKjE2LCBiZWNhdXNlIG9m
IHNwaWxsaW5nCiAgICAgICAgICAgICAgICAgaWYgKHVzZUlSQygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQzMl90LCBiYW5rLCBJUkMsIEh1Z2VJbnRlcmZl
cmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVu
c3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVp
bnQzMl90LCBiYW5rLCBJUkMsIFdURjo6SHVnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3Io
bV9jb2RlLCBtX3RtcFdpZHRoLCBtX3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAg
ICAgICAgICAgICAgICAgZG9uZSA9IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVp
bnQzMl90LCBiYW5rLCBCcmlnZ3MsIEh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1f
Y29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAg
ICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQzMl90LCBiYW5rLCBCcmlnZ3MsIFdU
Rjo6SHVnZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IobV9jb2RlLCBtX3RtcFdpZHRoLCBt
X3VzZUNvdW50cywgdW5zcGlsbGFibGVUbXBzKTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9
IGRvQWxsb2NhdGlvbihhbGxvY2F0b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFja0J5R3JhcGhDb2xvcmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCmluZGV4IGFlNzg2OTE2YjU2Zi4uYTBj
MjUyN2QzNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNSw2ICsz
NSw3IEBACiAjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJBaXJQaGFzZVNjb3Bl
LmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tBbGxvY2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0ludGVy
ZmVyZW5jZUdyYXBoLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKQEAgLTQzLDY2ICs0NCwyNiBAQCBu
YW1lc3BhY2UgewogCiBuYW1lc3BhY2UgQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0lu
dGVybmFsIHsKIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CitzdGF0aWMg
Y29uc3RleHByIGJvb2wgcmVwb3J0TGFyZ2VNZW1vcnlVc2VzID0gZmFsc2U7CiB9CiAKLXN0cnVj
dCBDb2FsZXNjYWJsZU1vdmUgewotICAgIENvYWxlc2NhYmxlTW92ZSgpCitjbGFzcyBTdGFja0Fs
bG9jYXRvckJhc2UgeworcHJvdGVjdGVkOgorICAgIFN0YWNrQWxsb2NhdG9yQmFzZShDb2RlJiBj
b2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fcmVtYXBwZWRTdGFja1Ns
b3RJbmRpY2VzKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSkKICAgICB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlcy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG1fcmVtYXBwZWRTdGFja1Nsb3RJbmRpY2VzW2ldID0gaTsKICAgICB9
CiAKLSAgICBDb2FsZXNjYWJsZU1vdmUoU3RhY2tTbG90KiBzcmMsIFN0YWNrU2xvdCogZHN0LCBk
b3VibGUgZnJlcXVlbmN5KQotICAgICAgICA6IHNyYyhzcmMpCi0gICAgICAgICwgZHN0KGRzdCkK
LSAgICAgICAgLCBmcmVxdWVuY3koZnJlcXVlbmN5KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENvYWxlc2NhYmxlTW92ZSYgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gc3JjID09IG90aGVyLnNyYwotICAgICAgICAgICAgJiYgZHN0ID09
IG90aGVyLmRzdAotICAgICAgICAgICAgJiYgZnJlcXVlbmN5ID09IG90aGVyLmZyZXF1ZW5jeTsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvYWxlc2NhYmxlTW92ZSYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0g
ICAgfQotICAgIAotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuICp0aGlzICE9IENvYWxlc2NhYmxlTW92ZSgpOwotICAgIH0KLSAgICAKLSAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIG91dC5w
cmludChwb2ludGVyRHVtcChzcmMpLCAiLT4iLCBwb2ludGVyRHVtcChkc3QpLCAiKCIsIGZyZXF1
ZW5jeSwgIikiKTsKLSAgICB9Ci0gICAgCi0gICAgU3RhY2tTbG90KiBzcmMgeyBudWxscHRyIH07
Ci0gICAgU3RhY2tTbG90KiBkc3QgeyBudWxscHRyIH07Ci0gICAgZG91YmxlIGZyZXF1ZW5jeSB7
IFBOYU4gfTsKLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi12b2lkIGFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKLXsKLSAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmciKTsKLSAgICAKLSAgICBo
YW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKLSAgICAKLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNz
aWduZWRFc2NhcGVkU3RhY2tTbG90cyA9Ci0gICAgICAgIGFsbG9jYXRlQW5kR2V0RXNjYXBlZFN0
YWNrU2xvdHNXaXRob3V0Q2hhbmdpbmdGcmFtZVNpemUoY29kZSk7Ci0KLSAgICAvLyBOb3cgd2Ug
aGFuZGxlIHRoZSBzcGlsbCBzbG90cy4KLSAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhj
b2RlKTsKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRl
cmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKLSAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gc2xvdHM7Ci0KICAgICAvLyBXZSB3aWxsIHBlcmZvcm0gc29tZSBzcGlsbCBjb2FsZXNjaW5n
LiBUbyBtYWtlIHRoYXQgZWZmZWN0aXZlLCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gaWRlbnRpZnkK
ICAgICAvLyBjb2FsZXNjYWJsZSBtb3ZlcyBhbmQgaGFuZGxlIHRoZW0gc3BlY2lhbGx5IGluIGlu
dGVyZmVyZW5jZSBhbmFseXNpcy4KLSAgICBhdXRvIGlzQ29hbGVzY2FibGVNb3ZlID0gWyZdIChJ
bnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICBib29sIGlzQ29hbGVzY2FibGVNb3ZlKEluc3QmIGlu
c3QpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIU9wdGlvbnM6OmNvYWxlc2NlU3BpbGxTbG90
cygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIFdpZHRoIHdpZHRoOwog
ICAgICAgICBzd2l0Y2ggKGluc3Qua2luZC5vcGNvZGUpIHsKICAgICAgICAgY2FzZSBNb3ZlOgpA
QCAtMTE4LDEzICs3OSwxMCBAQCB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcoQ29k
ZSYgY29kZSkKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFPcHRpb25zOjpjb2FsZXNjZVNwaWxsU2xv
dHMoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgaWYg
KGluc3QuYXJncy5zaXplKCkgIT0gMykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCisKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI7ICsraSkgewogICAgICAg
ICAgICAgQXJnIGFyZyA9IGluc3QuYXJnc1tpXTsKICAgICAgICAgICAgIGlmICghYXJnLmlzU3Rh
Y2soKSkKQEAgLTEzNSwxODIgKzkzLDI5MiBAQCB2b2lkIGFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmcoQ29kZSYgY29kZSkKICAgICAgICAgICAgIGlmIChzbG90LT5ieXRlU2l6ZSgpICE9IGJ5
dGVzKHdpZHRoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfTsKLSAgICAKLSAgICBhdXRvIGlz
VXNlbGVzc01vdmUgPSBbJl0gKEluc3QmIGluc3QpIC0+IGJvb2wgeworICAgIH0KKworICAgIGJv
b2wgaXNVc2VsZXNzTW92ZShJbnN0JiBpbnN0KSBjb25zdAorICAgIHsKICAgICAgICAgcmV0dXJu
IGlzQ29hbGVzY2FibGVNb3ZlKGluc3QpICYmIGluc3QuYXJnc1swXSA9PSBpbnN0LmFyZ3NbMV07
CisgICAgfQorCisgICAgdW5zaWduZWQgcmVtYXAodW5zaWduZWQgc2xvdEluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdW5zaWduZWQgcmVtYXBwZWRT
bG90SW5kZXggPSBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tzbG90SW5kZXhdOworICAgICAg
ICAgICAgaWYgKHJlbWFwcGVkU2xvdEluZGV4ID09IHNsb3RJbmRleCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc2xvdEluZGV4OworICAgICAgICB9CisgICAgfQorCisgICAgU3RhY2tTbG90KiBy
ZW1hcFN0YWNrU2xvdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2RlLnN0YWNrU2xvdHMoKVtyZW1hcChzbG90LT5pbmRleCgpKV07CisgICAgfQorCisg
ICAgYm9vbCBpc1JlbWFwcGVkU2xvdEluZGV4KHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tzbG90SW5kZXhd
ICE9IHNsb3RJbmRleDsKICAgICB9OwotICAgIAotICAgIGF1dG8gYWRkRWRnZSA9IFsmXSAoU3Rh
Y2tTbG90KiBhLCBTdGFja1Nsb3QqIGIpIHsKLSAgICAgICAgaW50ZXJmZXJlbmNlW2FdLmFkZChi
KTsKLSAgICAgICAgaW50ZXJmZXJlbmNlW2JdLmFkZChhKTsKLSAgICB9OwotICAgIAotICAgIFZl
Y3RvcjxDb2FsZXNjYWJsZU1vdmU+IGNvYWxlc2NhYmxlTW92ZXM7Ci0KLSAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBTdGFja1Nsb3RMaXZlbmVzczo6TG9jYWxD
YWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwotCi0gICAgICAgIGF1dG8gaW50ZXJmZXJl
ID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0
ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAg
ZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5s
aXZlKCkpLCAiXG4iKTsKLQotICAgICAgICAgICAgSW5zdCogcHJldkluc3QgPSBibG9jay0+Z2V0
KGluc3RJbmRleCk7Ci0gICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5z
dEluZGV4ICsgMSk7Ci0gICAgICAgICAgICBpZiAocHJldkluc3QgJiYgaXNDb2FsZXNjYWJsZU1v
dmUoKnByZXZJbnN0KSkgewotICAgICAgICAgICAgICAgIENvYWxlc2NhYmxlTW92ZSBtb3ZlKHBy
ZXZJbnN0LT5hcmdzWzBdLnN0YWNrU2xvdCgpLCBwcmV2SW5zdC0+YXJnc1sxXS5zdGFja1Nsb3Qo
KSwgYmxvY2stPmZyZXF1ZW5jeSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBjb2FsZXNjYWJsZU1vdmVzLmFwcGVuZChtb3ZlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJTbG90ICE9IG1vdmUuc3JjKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkRWRnZShtb3ZlLmRzdCwgb3RoZXJTbG90KTsKKworICAgIENv
ZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcmVtYXBwZWRTdGFja1Nsb3RJbmRp
Y2VzOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmZXJlbmNlR3JhcGg+CitjbGFzcyBH
cmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgU3RhY2tBbGxvY2F0b3JC
YXNlIHsKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBJbnRlcmZlcmVuY2VHcmFwaDo6
SW5kZXhUeXBlOworcHVibGljOgorICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcihDb2Rl
JiBjb2RlKQorICAgICAgICA6IFN0YWNrQWxsb2NhdG9yQmFzZShjb2RlKQorICAgICAgICAsIG1f
aW50ZXJmZXJlbmNlKCkKKyAgICAgICAgLCBtX2NvYWxlc2NhYmxlTW92ZXMoKQorICAgIHsKKyAg
ICAgICAgbV9pbnRlcmZlcmVuY2Uuc2V0TWF4SW5kZXgobV9jb2RlLnN0YWNrU2xvdHMoKS5zaXpl
KCkpOworICAgIH0KKworICAgIHZvaWQgcnVuKGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgYXNz
aWduZWRFc2NhcGVkU3RhY2tTbG90cykKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdExpdmVuZXNz
IGxpdmVuZXNzKG1fY29kZSk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENh
bGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0g
KHVuc2lnbmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0
YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBXVEY6OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMu
bGl2ZSgpKSwgIlxuIik7CisKKyAgICAgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJsb2Nr
LT5nZXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2Nr
LT5nZXQoaW5zdEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZJbnN0ICYmIGlz
Q29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29hbGVz
Y2FibGVNb3ZlIG1vdmUocHJldkluc3QtPmFyZ3NbMF0uc3RhY2tTbG90KCktPmluZGV4KCksIHBy
ZXZJbnN0LT5hcmdzWzFdLnN0YWNrU2xvdCgpLT5pbmRleCgpLCBibG9jay0+ZnJlcXVlbmN5KCkp
OworCisgICAgICAgICAgICAgICAgICAgIG1fY29hbGVzY2FibGVNb3Zlcy5hcHBlbmQobW92ZSk7
CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2Fs
Q2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG90aGVyU2xv
dEluZGV4ID0gb3RoZXJTbG90LT5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG90aGVyU2xvdEluZGV4ICE9IG1vdmUuc3JjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW50ZXJmZXJlbmNlLmFkZChtb3ZlLmRzdCwgb3RoZXJTbG90SW5kZXgpOworICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHJldkluc3QgPSBudWxscHRyOwog
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBwcmV2
SW5zdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBJbnN0Ojpmb3JFYWNo
RGVmPEFyZz4oCi0gICAgICAgICAgICAgICAgcHJldkluc3QsIG5leHRJbnN0LAotICAgICAgICAg
ICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFuaywgV2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tT
bG90KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90
S2luZDo6U3BpbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRFZGdlKHNsb3QsIG90aGVyU2xvdCk7Ci0gICAg
ICAgICAgICAgICAgfSk7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKLSAgICAgICAgICAgIGlmIChB
aXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAg
ICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxu
Iik7Ci0KLSAgICAgICAgICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdl
IHNheSB0aGF0IGEgc3RvcmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQotICAgICAg
ICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUg
ZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAotICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGF0J3MgdGhlIG9ubHkga2luZCBvZiBkZWFkIHN0YWNrIHN0b3JlIHdlIHdpbGwgc2VlIGhlcmUu
Ci0gICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Ci0gICAgICAg
ICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7Ci0gICAgICAgICAgICAgICAgYm9v
bCBvayA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAg
ICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRWFybHlEZWYocm9sZSkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAg
SW5zdDo6Zm9yRWFjaERlZjxBcmc+KAorICAgICAgICAgICAgICAgICAgICBwcmV2SW5zdCwgbmV4
dEluc3QsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSwgQmFu
aywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ayA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xv
dCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5r
aW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQo
KSAhPSBTdGFja1Nsb3RLaW5kOjpTcGlsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChsb2NhbENhbGMuaXNMaXZlKHNsb3QpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0
YWNrU2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQoc2xvdC0+aW5kZXgoKSwgb3RoZXJTbG90LT5p
bmRleCgpKTsKICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgaWYgKG9r
KQotICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfTsKKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0
SW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhD
b2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJB
bmFseXppbmc6ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsKKworICAgICAgICAgICAg
ICAgIC8vIEtpbGwgZGVhZCBzdG9yZXMuIEZvciBzaW1wbGljaXR5IHdlIHNheSB0aGF0IGEgc3Rv
cmUgaXMga2lsbGFibGUgaWYgaXQgaGFzIG9ubHkgbGF0ZQorICAgICAgICAgICAgICAgIC8vIGRl
ZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQg
bm93LiBXZSBvbmx5IGRvIHRoYXQKKyAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQncyB0
aGUgb25seSBraW5kIG9mIGRlYWQgc3RhY2sgc3RvcmUgd2Ugd2lsbCBzZWUgaGVyZS4KKyAgICAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAg
ICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgeworICAgICAgICAgICAgICAgICAg
ICBib29sIG9rID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAor
ICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJh
bmssIFdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNFYXJs
eURlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjpp
c0xhdGVEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFj
a1Nsb3RLaW5kOjpTcGlsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGxvY2FsQ2FsYy5pc0xpdmUoc2xvdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgICAgICBpZiAob2spCisgICAgICAgICAgICAgICAgICAgICAgICBp
bnN0ID0gSW5zdCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGludGVy
ZmVyZShpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3RJ
bmRleCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGludGVyZmVy
ZShpbnN0SW5kZXgpOwotICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgIGludGVyZmVyZSgtMSk7CisKKyAgICAgICAgICAgIGJsb2NrLT5pbnN0cygp
LnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5z
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAhaW5zdDsKKyAgICAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQotICAgICAgICBpbnRlcmZlcmUoLTEpOwotICAgICAgICAK
LSAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCi0gICAgICAgICAgICBb
Jl0gKGNvbnN0IEluc3QmIGluc3QpIC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiAh
aW5zdDsKLSAgICAgICAgICAgIH0pOwotICAgIH0KIAotICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpIHsKLSAgICAgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkKLSAgICAgICAgICAgIGRhdGFMb2coIkludGVy
ZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgcG9pbnRlckxpc3REdW1wKGlu
dGVyZmVyZW5jZVtzbG90XSksICJcbiIpOwotICAgIH0KLSAgICAKLSAgICAvLyBOb3cgdHJ5IHRv
IGNvYWxlc2NlIHNvbWUgbW92ZXMuCi0gICAgc3RkOjpzb3J0KAotICAgICAgICBjb2FsZXNjYWJs
ZU1vdmVzLmJlZ2luKCksIGNvYWxlc2NhYmxlTW92ZXMuZW5kKCksCi0gICAgICAgIFsmXSAoQ29h
bGVzY2FibGVNb3ZlJiBhLCBDb2FsZXNjYWJsZU1vdmUmIGIpIC0+IGJvb2wgewotICAgICAgICAg
ICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7Ci0gICAgICAgIH0pOwotICAgIAot
ICAgIEluZGV4TWFwPFN0YWNrU2xvdCosIFN0YWNrU2xvdCo+IHJlbWFwcGVkU3RhY2tTbG90cyhj
b2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwotICAgIGF1dG8gcmVtYXAgPSBbJl0gKFN0YWNrU2xv
dCogc2xvdCkgLT4gU3RhY2tTbG90KiB7Ci0gICAgICAgIGlmICghc2xvdCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAgICAgICBTdGFja1Ns
b3QqIHJlbWFwcGVkU2xvdCA9IHJlbWFwcGVkU3RhY2tTbG90c1tzbG90XTsKLSAgICAgICAgICAg
IGlmICghcmVtYXBwZWRTbG90KQotICAgICAgICAgICAgICAgIHJldHVybiBzbG90OwotICAgICAg
ICAgICAgc2xvdCA9IHJlbWFwcGVkU2xvdDsKKyAgICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tC
eUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6cmVwb3J0TGFyZ2VNZW1vcnlVc2VzICYmIG1faW50ZXJm
ZXJlbmNlLm1lbW9yeVVzZSgpID4gMTAyNCkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGhD
b2xvcmluZ1N0YWNrQWxsb2NhdG9yIHN0YWNrU2xvdHMsIGludGVyZmVyZW5jZUdyYXBoKGtCKSwg
Y29hbGVzY2FibGUgbW92ZXMoa0IpOiAiLCBtX2NvZGUuc3RhY2tTbG90cygpLnNpemUoKSwgIiA6
ICIpOworICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2UuZHVtcE1lbW9yeVVzZUluS0IoKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIiwgIiwgKG1fY29hbGVzY2FibGVNb3Zlcy5zaXplKCkgKiBzaXpl
b2YoQ29hbGVzY2FibGVNb3ZlKSkgLyAxMDI0KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOwog
ICAgICAgICB9Ci0gICAgfTsKLSAgICAKLSAgICBmb3IgKENvYWxlc2NhYmxlTW92ZSYgbW92ZSA6
IGNvYWxlc2NhYmxlTW92ZXMpIHsKLSAgICAgICAgbW92ZS5zcmMgPSByZW1hcChtb3ZlLnNyYyk7
Ci0gICAgICAgIG1vdmUuZHN0ID0gcmVtYXAobW92ZS5kc3QpOwotICAgICAgICBpZiAobW92ZS5z
cmMgPT0gbW92ZS5kc3QpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGludGVy
ZmVyZW5jZVttb3ZlLnNyY10uY29udGFpbnMobW92ZS5kc3QpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIAotICAgICAgICBTdGFja1Nsb3QqIHNsb3RUb0tpbGwgPSBtb3ZlLnNyYzsK
LSAgICAgICAgU3RhY2tTbG90KiBzbG90VG9LZWVwID0gbW92ZS5kc3Q7Ci0gICAgICAgIAotICAg
ICAgICByZW1hcHBlZFN0YWNrU2xvdHNbc2xvdFRvS2lsbF0gPSBzbG90VG9LZWVwOwotICAgICAg
ICBmb3IgKFN0YWNrU2xvdCogaW50ZXJmZXJpbmdTbG90IDogaW50ZXJmZXJlbmNlW3Nsb3RUb0tp
bGxdKSB7Ci0gICAgICAgICAgICBpZiAoaW50ZXJmZXJpbmdTbG90ID09IHNsb3RUb0tpbGwpCisK
KyAgICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6dmVy
Ym9zZSkgeworICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tT
bG90cygpKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJlbmNlIG9mICIsIHBv
aW50ZXJEdW1wKHNsb3QpLCAiOiAiKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHNs
b3RJbmRleCA6IG1faW50ZXJmZXJlbmNlW3Nsb3QtPmluZGV4KCldKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKHBvaW50ZXJEdW1wKG1fY29kZS5zdGFja1Nsb3RzKClbc2xvdEluZGV4XSkp
OworICAgICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICAvLyBOb3cgdHJ5IHRvIGNvYWxlc2NlIHNvbWUgbW92ZXMuCisgICAgICAg
IHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fY29hbGVzY2FibGVNb3Zlcy5iZWdpbigpLCBtX2Nv
YWxlc2NhYmxlTW92ZXMuZW5kKCksCisgICAgICAgICAgICBbJl0gKENvYWxlc2NhYmxlTW92ZSYg
YSwgQ29hbGVzY2FibGVNb3ZlJiBiKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YS5mcmVxdWVuY3kgPiBiLmZyZXF1ZW5jeTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgIGZv
ciAoY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBtb3ZlIDogbV9jb2FsZXNjYWJsZU1vdmVzKSB7Cisg
ICAgICAgICAgICBJbmRleFR5cGUgc2xvdFRvS2lsbCA9IHJlbWFwKG1vdmUuc3JjKTsKKyAgICAg
ICAgICAgIEluZGV4VHlwZSBzbG90VG9LZWVwID0gcmVtYXAobW92ZS5kc3QpOworICAgICAgICAg
ICAgaWYgKHNsb3RUb0tpbGwgPT0gc2xvdFRvS2VlcCkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGludGVyZmVyZW5jZVtpbnRlcmZlcmluZ1Nsb3RdLnJlbW92ZShzbG90
VG9LaWxsKTsKLSAgICAgICAgICAgIGludGVyZmVyZW5jZVtpbnRlcmZlcmluZ1Nsb3RdLmFkZChz
bG90VG9LZWVwKTsKKyAgICAgICAgICAgIGlmIChtX2ludGVyZmVyZW5jZS5jb250YWlucyhzbG90
VG9LaWxsLCBzbG90VG9LZWVwKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIGlmIChtX2ludGVyZmVyZW5jZS5jb250YWlucyhzbG90VG9LaWxsLCBzbG90VG9LaWxsKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgbV9yZW1hcHBlZFN0YWNr
U2xvdEluZGljZXNbc2xvdFRvS2lsbF0gPSBzbG90VG9LZWVwOworCisgICAgICAgICAgICBmb3Ig
KEluZGV4VHlwZSBpbnRlcmZlcmluZ1Nsb3QgOiBtX2ludGVyZmVyZW5jZVtzbG90VG9LaWxsXSkK
KyAgICAgICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQoaW50ZXJmZXJpbmdTbG90LCBzbG90
VG9LZWVwKTsKKyAgICAgICAgICAgIG1faW50ZXJmZXJlbmNlLm1heUNsZWFyKHNsb3RUb0tpbGwp
OwogICAgICAgICB9Ci0gICAgICAgIGludGVyZmVyZW5jZVtzbG90VG9LZWVwXS5hZGQoaW50ZXJm
ZXJlbmNlW3Nsb3RUb0tpbGxdLmJlZ2luKCksIGludGVyZmVyZW5jZVtzbG90VG9LaWxsXS5lbmQo
KSk7Ci0gICAgICAgIGludGVyZmVyZW5jZVtzbG90VG9LaWxsXS5jbGVhcigpOwotICAgIH0KLSAg
ICAKLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAg
ICAgICAgYXJnID0gQXJnOjpzdGFjayhyZW1hcChhcmcuc3RhY2tTbG90KCkpLCBhcmcub2Zmc2V0
KCkpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAo
QXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5pc1N0
YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwU3Rh
Y2tTbG90KGFyZy5zdGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChpc1VzZWxlc3NNb3ZlKGluc3QpKQorICAgICAgICAgICAg
ICAgICAgICBpbnN0ID0gSW5zdCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGlz
VXNlbGVzc01vdmUoaW5zdCkpCi0gICAgICAgICAgICAgICAgaW5zdCA9IEluc3QoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMg
aGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgICAg
IC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRoYXQg
aXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgICAgIC8vIG92ZXJsYXAg
d2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgICAgICBW
ZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90cyA9IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7
CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkgewor
ICAgICAgICAgICAgaWYgKGlzUmVtYXBwZWRTbG90SW5kZXgoc2xvdC0+aW5kZXgoKSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9t
RlAoKSkgeworICAgICAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0Lgor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNpemUoKSk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG90aGVyU2xvdEluZGV4IDogbV9pbnRlcmZlcmVuY2Vbc2xv
dC0+aW5kZXgoKV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZW1hcHBlZFNsb3RJbmRleChv
dGhlclNsb3RJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogb3RoZXJTbG90ID0gbV9jb2RlLnN0YWNrU2xvdHMoKVtvdGhlclNs
b3RJbmRleF07CisgICAgICAgICAgICAgICAgb3RoZXJTbG90cy5hcHBlbmQob3RoZXJTbG90KTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOwog
ICAgICAgICB9CiAgICAgfQotICAgIAotICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRp
b25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBl
YWNoCi0gICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9t
RlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KLSAgICAvLyBvdmVy
bGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KLSAgICBW
ZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90cyA9IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7
CisKK3ByaXZhdGU6CisgICAgc3RydWN0IENvYWxlc2NhYmxlTW92ZSB7CisgICAgICAgIENvYWxl
c2NhYmxlTW92ZSgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENvYWxlc2NhYmxl
TW92ZShJbmRleFR5cGUgc3JjLCBJbmRleFR5cGUgZHN0LCBkb3VibGUgZnJlcXVlbmN5KQorICAg
ICAgICAgICAgOiBzcmMoc3JjKQorICAgICAgICAgICAgLCBkc3QoZHN0KQorICAgICAgICAgICAg
LCBmcmVxdWVuY3koZnJlcXVlbmN5KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHNyYyA9PSBvdGhlci5zcmMKKyAgICAgICAgICAgICAg
ICAmJiBkc3QgPT0gb3RoZXIuZHN0CisgICAgICAgICAgICAgICAgJiYgZnJlcXVlbmN5ID09IG90
aGVyLmZyZXF1ZW5jeTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICp0aGlz
ICE9IENvYWxlc2NhYmxlTW92ZSgpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludChz
cmMsICItPiIsIGRzdCwgIigiLCBmcmVxdWVuY3ksICIpIik7CisgICAgICAgIH0KKworICAgICAg
ICBJbmRleFR5cGUgc3JjIHsgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSB9
OworICAgICAgICBJbmRleFR5cGUgZHN0IHsgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+
OjptYXgoKSB9OworICAgICAgICBmbG9hdCBmcmVxdWVuY3kgeyAwLjAgfTsKKyAgICB9OworCisg
ICAgSW50ZXJmZXJlbmNlR3JhcGggbV9pbnRlcmZlcmVuY2U7CisgICAgVmVjdG9yPENvYWxlc2Nh
YmxlTW92ZT4gbV9jb2FsZXNjYWJsZU1vdmVzOworfTsKKworLy8gV2UgdHJ5IHRvIGF2b2lkIGNv
bXB1dGluZyB0aGUgbGl2ZW5lc3MgaW5mb3JtYXRpb24gaWYgdGhlcmUgaXMgbm8gc3BpbGwgc2xv
dCB0byBhbGxvY2F0ZQorYm9vbCB0cnlUcml2aWFsU3RhY2tBbGxvY2F0aW9uKENvZGUmIGNvZGUp
Cit7CiAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgewotICAg
ICAgICBpZiAocmVtYXBwZWRTdGFja1Nsb3RzW3Nsb3RdKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIAotICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKLSAgICAgICAg
ICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICBpZiAoc2xvdC0+b2Zm
c2V0RnJvbUZQKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVy
ZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07Ci0gICAgICAgIG90aGVyU2xvdHMucmVz
aXplKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuc2l6ZSgpKTsKLSAgICAgICAgb3RoZXJTbG90
cy5yZXNpemUoYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Ns
b3RzLnNpemUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkRXNjYXBl
ZFN0YWNrU2xvdHMuc2l6ZSgpOwotICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDog
aW50ZXJmZXJpbmdTbG90cykKLSAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0g
b3RoZXJTbG90OworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgICAgIGFzc2lnbihzbG90LCBv
dGhlclNsb3RzKTsKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3Rh
Y2tCeUdyYXBoQ29sb3JpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmciKTsKKworICAgIGhhbmRsZUNh
bGxlZVNhdmVzKGNvZGUpOworCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBl
ZFN0YWNrU2xvdHMgPQorICAgICAgICBhbGxvY2F0ZUFuZEdldEVzY2FwZWRTdGFja1Nsb3RzV2l0
aG91dENoYW5naW5nRnJhbWVTaXplKGNvZGUpOworCisgICAgaWYgKCF0cnlUcml2aWFsU3RhY2tB
bGxvY2F0aW9uKGNvZGUpKSB7CisgICAgICAgIGlmIChjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkg
PCBXVEY6Om1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CisgICAgICAgICAgICBH
cmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3I8V1RGOjpTbWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGg+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5ydW4oYXNzaWdu
ZWRFc2NhcGVkU3RhY2tTbG90cyk7CisgICAgICAgIH0gZWxzZSBpZiAoY29kZS5zdGFja1Nsb3Rz
KCkuc2l6ZSgpIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7CisgICAg
ICAgICAgICBHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3I8V1RGOjpMYXJnZUl0ZXJhYmxlSW50
ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5y
dW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3I8V1RGOjpIdWdlSXRlcmFibGVJbnRlcmZl
cmVuY2VHcmFwaD4gYWxsb2NhdG9yKGNvZGUpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJ1bihh
c3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHVwZGF0
ZUZyYW1lU2l6ZUJhc2VkT25TdGFja1Nsb3RzKGNvZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCA5Nzk3ZDVlYTg5NjMuLmRi
Yzk1MzdhNTJlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMjEtMDUtMjYgIFJvYmluIE1vcmlz
c2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAgICBBaXJBbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nIHNob3VsZCB1c2UgdGhlIG9wdGltaXplZCBpbnRlcmZlcmVuY2UgZ3JhcGhz
IGZyb20gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjI1OAorCisgICAgICAgIEkgbW92
ZWQgdGhlIGludGVyZmVyZW5jZSBncmFwaHMgZGF0YXN0cnVjdHVyZXMgZnJvbSBBaXJBbGxvY2F0
ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB0byB0aGVpciBvd24gd3RmL0ludGVyZmVyZW5jZUdy
YXBoLmggZmlsZS4KKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG9mIHRoZW06CisgICAgICAgIC0g
U21hbGxJbnRlcmZlcmVuY2VHcmFwaCwgYmVzdCBmb3IgbiA8IDQwMAorICAgICAgICAtIExhcmdl
SW50ZXJmZXJlbmNlR3JhcGgsIGZvciBuIDwgMioqMTYKKyAgICAgICAgLSBIdWdlSW50ZXJmZXJl
bmNlR3JhcGgsIGZvciBuIHVwIHRvIDIqKjMyCisgICAgICAgIEkgYWxzbyBhZGRlZCAiSXRlcmFi
bGUiIHZlcnNpb25zIG9mIHRoZW0sIHRoYXQgaGF2ZSBhbiBvcGVyYXRvcltdIG1ldGhvZCB3aG9z
ZSByZXN1bHQgeW91IGNhbiBpdGVyYXRlIG9uIHRvIGdldCBhbGwgdGhlIGluZGljZXMgd2hpY2gg
aW50ZXJmZXJlIHdpdGggYSBnaXZlbiBpbmRleC4KKyAgICAgICAgU21hbGxJdGVyYWJsZUludGVy
ZmVyZW5jZUdyYXBoIGlzIHRoZSBzYW1lIGFzIHRoZSBub24taXRlcmFibGUgdmVyc2lvbiwgYnV0
IHRoZSBMYXJnZSBhbmQgSHVnZSB2ZXJzaW9ucyBhcmUgYSBiaXQgc2xvd2VyIHRoYW4gdGhlaXIg
Y291bnRlcnBhcnRzIGFuZCB1c2UgMnggbWVtb3J5LgorCisgICAgICAgIEFsbCBvZiB0aGVzZSB3
ZXJlIHRlc3RlZCBieSBydW5uaW5nIEpldFN0cmVhbTIgd2l0aCB0aGUgVEVTVF9PUFRJTUlaRURf
SU5URVJGRVJFTkNFX0dSQVBIIHNldCB0byAxLgorICAgICAgICBUaGlzIGZsYWcgbWFrZXMgdGhl
IG9wdGltaXplZCBkYXRhc3RydWN0dXJlcyBydW4gaW4gcGFyYWxsZWwgd2l0aCBhIHJlZmVyZW5j
ZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZWlyIHJlc3VsdHMgYXJlIGNoZWNrZWQgZm9yIGVxdWFs
aXR5IG9uIGV2ZXJ5IG1ldGhvZCBjYWxsLgorICAgICAgICBUaGVyZSBpcyBvbmUgc21hbGwgZGlm
ZmVyZW5jZSBhbGxvd2VkOiBpdGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gZ28gdGhyb3Vn
aCBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KKworICAgICAgICBJIGFsc28gYWRkZWQgYSBj
bGVhcigpIG1ldGhvZCB0byBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCwgYW5kIGFkZGVk
IHRoZSBOb3ROdWxsIGZsYWcgdG8gaXRzIHZhcmlvdXMgdXNlcyBvZiBwbGFjZW1lbnQgbmV3Lgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6
Olc+OjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAqIHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5o
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpjb250YWlucyk6
CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6YWRkQW5kUmV0dXJuSXNOZXdF
bnRyeSk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6YWRkKToKKyAgICAg
ICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6Oklu
dGVyZmVyZW5jZUJpdFZlY3Rvcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVu
Y2VCaXRWZWN0b3I6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0
VmVjdG9yOjpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjptZW1vcnlV
c2UgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6OmR1bXBNZW1v
cnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJ
dGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVu
Y2VCaXRWZWN0b3I6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Okl0ZXJh
YmxlOjppdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVy
ZW5jZUJpdFZlY3Rvcjo6SXRlcmFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50ZXJmZXJlbmNlQml0VmVjdG9yOjppbmRleCBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVy
ZmVyZW5jZVZlY3Rvcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0
b3I6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VW
ZWN0b3I6OmFkZCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6Y2xlYXIpOgor
ICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6Om1heUNsZWFyKToKKyAgICAgICAgKFdU
Rjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OkludGVy
ZmVyZW5jZVZlY3Rvcjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rv
cjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6bWVtb3J5
VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpkdW1wTWVtb3J5
VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6SXRlcmFi
bGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpJdGVy
YWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpvcGVy
YXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdB
ZGFwdGVyOjpjb250YWlucyk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0
aW5nQWRhcHRlcjo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OlVuZGly
ZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6YWRkKToKKyAgICAgICAgKFdURjo6VW5kaXJl
Y3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlVuZGly
ZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpV
bmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OnNldE1heEluZGV4KToKKyAgICAgICAg
KFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpmb3JFYWNoKToKKyAgICAg
ICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjptZW1vcnlV
c2UgY29uc3QpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0
ZXI6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVk
Z2VzRHVwbGljYXRpbmdBZGFwdGVyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6
VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpjb250YWlucyk6CisgICAgICAgIChXVEY6OlVu
ZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAg
ICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6YWRkKToKKyAgICAgICAgKFdU
Rjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlVu
ZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRp
cmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6VW5k
aXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6VW5kaXJl
Y3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJl
Y3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpV
bmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6Y29udGFpbnMpOgorICAgICAgICAoV1RG
OjpJbnRlcmZlcmVuY2VIYXNoU2V0OjphZGRBbmRSZXR1cm5Jc05ld0VudHJ5KToKKyAgICAgICAg
KFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6YWRkKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJl
bmNlSGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0Ojpz
ZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmZvckVhY2gp
OgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6ZHVtcE1lbW9yeVVzZUluS0IgY29uc3QpOgorICAg
ICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Y29udGFpbnMpOgorICAg
ICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6YWRkQW5kUmV0dXJuSXNO
ZXdFbnRyeSk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjph
ZGQpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Y2xlYXIp
OgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6bWF5Q2xlYXIp
OgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6c2V0TWF4SW5k
ZXgpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Zm9yRWFj
aCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6Om1lbW9y
eVVzZSBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBo
OjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0
ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChX
VEY6Okluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjpiZWdp
biBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGg6Okl0ZXJhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiB3
dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaDoKKyAgICAgICAgKFdURjo6TGlrZWx5
RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0KToK
KyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmNsZWFyKToKKyAg
ICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmFkZCk6CisgICAgICAg
IChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojplc3RpbWF0ZUhhc2hTZXRTaXpl
KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OnRyYW5zaXRp
b25Ub0hhc2hTZXQpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dDo6dHJhbnNpdGlvblRvQml0VmVjdG9yKToKKwogMjAyMS0wNS0yNiAgQ2FtZXJvbiBNY0Nvcm1h
Y2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQgc2JpeCBnbHlwaHMgZnJv
bSBiZWluZyByZW5kZXJlZCBpbiB0aGUgR1BVIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM4MjQxYmI2MDk4OC4uZmNjODgyYjA3Zjg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MSw2ICszNzEsNyBA
QAogCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGFja1RyYWNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzM3QjJENjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM3QjJE
NjkyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVu
Y2VHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcmZlcmVuY2VHcmFwaC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzN0M3Q0MyOTFFQTQwQTczMDA3QkQ5NTYgLyogV2Vha0xpbmtp
bmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0xpbmtpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzgyMDI5RTI0NkM4NEIwMDk5RkQ2NzY0IC8qIEFT
Q0lJTGl0ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU0NJSUxpdGVy
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzkxQkQ2QkE0RDE2NEZEMjk0RjlB
OTNEIC8qIFN0ZE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRNYXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzksNiArMTA4MCw3IEBACiAJCQkJ
MzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUx
QzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCiAJCQkJQThBNDcyQkMxNTFB
ODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAorCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFC
RTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUy
OUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk1MTgyQzIyQzFGMkJDN0U2MDA1OUJBN0MgLyog
SW5zdGFuY2VDb3VudGVkLmggKi8sCiAJCQkJMEY3RUI4NUIxRkE4RkY0MTAwRjFBQkNCIC8qIElz
b01hbGxvYy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMTBkOWU4MGQzNzguLmRkMGU4
NjgyYjlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIv
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoV1RG
X1BVQkxJQ19IRUFERVJTCiAgICAgSW5saW5lQVNNLmgKICAgICBJbnNlcnRpb24uaAogICAgIElu
c3RhbmNlQ291bnRlZC5oCisgICAgSW50ZXJmZXJlbmNlR3JhcGguaAogICAgIElzb01hbGxvYy5o
CiAgICAgSXNvTWFsbG9jSW5saW5lcy5oCiAgICAgSXRlcmF0b3JBZGFwdG9ycy5oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgK
aW5kZXggYTQwMmNlMjczNzVhLi4yYTI3MjgwNjBmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTY1LDYgKzY1
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVk
IGNhcGFjaXR5KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3Q7CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHko
dW5zaWduZWQga2V5Q291bnQpIHsgbV9pbXBsLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5Q291
bnQpOyB9CkBAIC0yMDIsNiArMjAzLDEyIEBAIGlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUs
IFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAK
IH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5h
bWUgVz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjptZW1vcnlVc2UoKSBj
b25zdAoreworICAgIHJldHVybiBjYXBhY2l0eSgpICogc2l6ZW9mKFQpOworfQorCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogaW5saW5l
IGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oIGIvU291cmNlL1dURi93dGYvSW50
ZXJmZXJlbmNlR3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
LjcxNzVmODMwZTRiMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludGVyZmVy
ZW5jZUdyYXBoLmgKQEAgLTAsMCArMSw1MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0xpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworLy8gVGhpcyBmaWxlIG9mZmVycyBtdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgb2Yg
YSBzaW1wbGUgaW50ZXJmZXJlbmNlIGdyYXBoLCB3aXRoIHZhcnlpbmcgcGVyZm9ybWFuY2UgY2hh
cmFjdGVyaXN0aWNzLgorLy8gQ29uY2VwdHVhbGx5IHRoZXkgYXJlIGp1c3Qgc2V0cyBvZiBwYWly
cyBvZiBpbnRlZ2VycworLy8gQWxsIG9mIHRoZW0gaGF2ZSB0aGUgc2FtZSBpbnRlcmZhY2U6Cisv
LyAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorLy8gICBib29sIGFk
ZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorLy8gICB2b2lk
IGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisvLyAgIHZvaWQgY2xlYXIoKQorLy8gICB2
b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KQorLy8gICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVk
IG4pCisvLyAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorLy8gICB1bnNp
Z25lZCBzaXplKCkKKy8vICAgdW5zaWduZWQgbWVtb3J5VXNlKCkKKy8vICAgdm9pZCBkdW1wTWVt
b3J5VXNlSW5LQigpCisvLyBUaHJlZSB1c2VmdWwgdHlwZSBhbGlhc2VzIGFyZSBkZWZpbmVkOgor
Ly8gICBTbWFsbEludGVyZmVyZW5jZUdyYXBoLCB3aGljaCBpcyB0aGUgZmFzdGVzdCBidXQgaGFz
IHF1YWRyYXRpYyBtZW1vcnkgdXNlIGluIHRoZSBtYXhpbXVtIHZlcnRleCBpbmRleCAoYmVzdCBm
b3IgbiA8IDQwMCBhcyBpdCBpcyBhbHJlYWR5IDIwa0IgYnkgdGhhdCBwb2ludCkKKy8vICAgTGFy
Z2VJbnRlcmZlcmVuY2VHcmFwaCwgYXMgbG9uZyBhcyB0aGUgaW5kaWNlcyBmaXQgaW4gYSB1aW50
MTZfdAorLy8gICBIdWdlSW50ZXJmZXJlbmNlR3JhcGggb3RoZXJ3aXNlCisvLyBJZiB5b3UgbmVl
ZCB0byBpdGVyYXRlIG92ZXIgdGhlIGluZGljZXMgdGhhdCBpbnRlcmZlcmUgd2l0aCBhIGdpdmVu
IGluZGV4LCB5b3UgbXVzdCB1c2UgdGhlIGZvbGxvd2luZzoKKy8vICAgU21hbGxJdGVyYWJsZUlu
dGVyZmVyZW5jZUdyYXBoCisvLyAgIExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8g
ICBIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gVGhlIGxhcmdlIGFuZCBodWdlIHZl
cnNpb25zIGFyZSAyeCB0aGUgbWVtb3J5IG9mIHRoZWlyIG5vbi1pdGVyYWJsZSB2ZXJzaW9ucywg
YnV0IG9mZmVyIGFuIGFkZGl0aW9uYWwgb3BlcmF0b3JbXSBtZXRob2QsIHdoaWNoIHJldHVybnMg
YW4gaXRlcmFibGUgb2JqZWN0CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgSW50ZXJm
ZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSBUOworICAg
IGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CisKKyAgICBi
b29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAg
IHsKKyAgICAgICAgYm9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5xdWlja1NldChpbmRleCh1
LCB2KSk7CisgICAgICAgIG1fc2l6ZSArPSAhYWxyZWFkeUluOworICAgICAgICByZXR1cm4gIWFs
cmVhZHlJbjsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYp
CisgICAgeworICAgICAgICAodm9pZCkgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAg
ICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFy
QWxsKCk7CisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBtYXlDbGVhcihJ
bmRleFR5cGUpIHsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgp
KTsKKyAgICAgICAgbV9udW1FbGVtZW50cyA9IG47CisgICAgICAgIG1fYml0VmVjdG9yLmVuc3Vy
ZVNpemUobipuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZv
ciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1FbGVtZW50czsgKytpKSB7CisgICAgICAgICAg
ICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bUVsZW1lbnRzOyArK2opIHsKKyAg
ICAgICAgICAgICAgICBpZiAobV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgoaSwgaikpKQorICAg
ICAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIChtX2JpdFZlY3Rv
ci5zaXplKCkgKyA3KSA+PiAzOyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29u
c3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworICAgIHN0cnVjdCBJdGVyYWJs
ZSB7CisgICAgICAgIHN0cnVjdCBpdGVyYXRvciB7CisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IG1faXRl
cmFibGUubV9iaXRWZWN0b3IuZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbmRleFR5
cGUgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5kZXhUeXBlPihtX2luZGV4IC0gbV9pdGVyYWJsZS5tX3N0YXJ0aW5n
SW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IC8vIFdlIGNhbm5vdCBqdXN0IHVzZSBhIG5vcm1hbCBjb21wYXJpc29uIGJleW9uZCBtX2l0ZXJh
YmxlLm1fZW5kLCBiZWNhdXNlIHRoZSBmaW5kQml0IGluIG9wZXJhdG9yKysgbWF5IHNlbmQgdXMg
cHJldHR5IG11Y2ggYW55d2hlcmUKKyAgICAgICAgICAgICAgICAvLyBXb3JzZTogaXQgaXMgcG9z
c2libGUgZm9yIHRoZSB1c2VyIG9mIHRoaXMgaXRlcmF0b3IgdG8gYWRkIGVsZW1lbnRzIHRvIHRo
ZSBpbnRlcmZlcmVuY2UgZ3JhcGggYmV0d2VlbiBjYWxscyB0byArKworICAgICAgICAgICAgICAg
IC8vIFRoaXMgd29uJ3QgaW52YWxpZGF0ZSB1cy9jYXVzZSBwcm9ibGVtcyBkaXJlY3RseSwgYXMg
dGhlIHVzZXIgd29uJ3QgYWZmZWN0IHRoZSBzbGljZSBvZiB0aGUgYml0IHZlY3RvciB0aGF0IHdl
J3JlIGl0ZXJhdGluZyBvdmVyLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGV5IG1heSB3ZWxs
IHNldCBiaXRzIGJleW9uZCBpdC4gU28gd2UgY2Fubm90IGNvbXB1dGUgYW4gImlkZWFsIiBlbmQg
aXRlcmF0b3IgKGJ5IGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBiaXQgc2V0IGFmdGVyIHRoZSBzbGlj
ZSB3ZSBjYXJlIGFib3V0KSBhaGVhZCBvZiB0aW1lLgorICAgICAgICAgICAgICAgIC8vIEluc3Rl
YWQgd2Ugc2V0IG1fZW5kIHRvIGluZGV4KHUrMSwgMCkgKHNvIGp1c3QgYWZ0ZXIgdGhlIHNsaWNl
IG9mIGludGVyZXN0KSwgYW5kIHdlIHVzZSB0aGlzIHNsaWdodGx5IHdlaXJkIGNvbXBhcmlzb24g
b3BlcmF0b3IgdG8gc3RpbGwgc3RvcCBpbiB0aW1lIG9uY2Ugd2UgZ28gYmV5b25kIGl0LgorICAg
ICAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1faXRlcmFibGUubV9lbmQgJiYgb3RoZXIubV9p
bmRleCA+PSBtX2l0ZXJhYmxlLm1fZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSXRlcmFi
bGUmIG1faXRlcmFibGU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgbV9i
ZWdpbiB9OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHsgKnRoaXMs
IG1fZW5kIH07IH0KKworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOworICAg
ICAgICB1bnNpZ25lZCBtX3N0YXJ0aW5nSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYmVnaW47
CisgICAgICAgIHVuc2lnbmVkIG1fZW5kOworICAgIH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRv
cltdKEluZGV4VHlwZSB1KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYmVnaW4gPSBt
X2JpdFZlY3Rvci5maW5kQml0KGluZGV4KHUsIDApLCB0cnVlKTsKKyAgICAgICAgdW5zaWduZWQg
ZW5kID0gaW5kZXgodSArIDEsIDApOworICAgICAgICByZXR1cm4geyBtX2JpdFZlY3RvciwgaW5k
ZXgodSwgMCksIGJlZ2luLCBlbmQgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQg
aW5kZXgoSW5kZXhUeXBlIGksIEluZGV4VHlwZSBqKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGkgKiBtX251bUVsZW1lbnRzICsgajsKKyAgICB9CisKKyAgICBCaXRWZWN0b3IgbV9iaXRW
ZWN0b3I7CisgICAgdW5zaWduZWQgbV9zaXplIHswfTsKKyAgICBJbmRleFR5cGUgbV9udW1FbGVt
ZW50czsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJVD4KK2NsYXNzIElu
dGVyZmVyZW5jZVZlY3RvciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gSVQ7Cisg
ICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbdV0uY29udGFpbnModik7CisgICAgfQorCisgICAgYm9vbCBhZGRB
bmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAg
ICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fdmVjdG9yW3VdLmFkZCh2KS5pc05ld0VudHJ5OworICAg
ICAgICBtX3NpemUgKz0gaXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnk7Cisg
ICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAg
ICAgICAgKHZvaWQpIGFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgfQorCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5jbGVhcigpOworICAgICAgICBt
X3NpemUgPSAwOworICAgIH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlIHUpIHsgbV92
ZWN0b3JbdV0uY2xlYXIoKTsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46
Om1heCgpKTsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKG4pOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9y
LnNpemUoKSA7ICsraSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA6IG1fdmVjdG9y
W2ldKQorICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAgICAgICB9CisgICAg
fQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAg
dW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1lbW9y
eSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgVCYgc2V0IDogbV92ZWN0b3IpCisgICAgICAgICAg
ICBtZW1vcnkgKz0gc2V0Lm1lbW9yeVVzZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5OworICAg
IH0KKworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5
VXNlKCkgLyAxMDI0KTsgfQorCisgICAgc3RydWN0IEl0ZXJhYmxlIHsKKyAgICAgICAgdXNpbmcg
aXRlcmF0b3IgPSB0eXBlbmFtZSBUOjppdGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3NldC5iZWdpbigpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0LmVuZCgpOyB9CisgICAgICAgIGNvbnN0IFQmIG1fc2V0Owor
ICAgIH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdCB7IHJl
dHVybiB7IG1fdmVjdG9yW3VdIH07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VD4gbV92ZWN0
b3I7CisgICAgdW5zaWduZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXIgeworcHVibGljOgorICAg
IHVzaW5nIEluZGV4VHlwZSA9IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAgICB1c2luZyBJdGVy
YWJsZSA9IHR5cGVuYW1lIFQ6Okl0ZXJhYmxlOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBl
IHUsIEluZGV4VHlwZSB2KSB7IHJldHVybiBtX3VuZGVybHlpbmcuY29udGFpbnModSwgdik7IH0K
KworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCisgICAgeworICAgICAgICBib29sIGlzTmV3RW50cnkxID0gbV91bmRlcmx5aW5nLmFkZEFu
ZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeTIgPSBtX3Vu
ZGVybHlpbmcuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh2LCB1KTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChpc05ld0VudHJ5MiwgaXNOZXdFbnRyeTEgPT0gaXNOZXdFbnRyeTIpOworICAgICAgICBy
ZXR1cm4gaXNOZXdFbnRyeTE7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgbV91bmRlcmx5aW5nLmFkZCh1LCB2KTsKKyAgICAg
ICAgbV91bmRlcmx5aW5nLmFkZCh2LCB1KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkgeyBt
X3VuZGVybHlpbmcuY2xlYXIoKTsgfQorICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlIHUpIHsg
bV91bmRlcmx5aW5nLm1heUNsZWFyKHUpOyB9CisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25l
ZCBuKSB7IG1fdW5kZXJseWluZy5zZXRNYXhJbmRleChuKTsgfQorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7
IG1fdW5kZXJseWluZy5mb3JFYWNoKGZ1bmN0b3IpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdW5kZXJseWluZy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBtZW1vcnlV
c2UoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmcubWVtb3J5VXNlKCk7IH0KKyAgICB2b2lk
IGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBtX3VuZGVybHlpbmcuZHVtcE1lbW9yeVVzZUlu
S0IoKTsgfQorICAgIEl0ZXJhYmxlIG9wZXJhdG9yW10oSW5kZXhUeXBlIHUpIGNvbnN0IHsgcmV0
dXJuIG1fdW5kZXJseWluZ1t1XTsgfQorCitwcml2YXRlOgorICAgIFQgbV91bmRlcmx5aW5nOwor
fTsKKworLy8gVGhpcyBpcyBnZW5lcmFsbHkgYmV0dGVyIHRoYW4gdGhlIER1cGxpY2F0aW5nIHZl
cnNpb24sIHRoZXJlIGFyZSB0d28gcmVhc29ucyBub3QgdG8gdXNlIGl0IHRob3VnaDoKKy8vIC0g
Rm9yIEJpdFZlY3RvciwgaXQgaGFzIG5vIGVmZmVjdCBvbiBtZW1vcnkgdXNlLCBhbmQgYWRkcyBh
IGJyYW5jaCB0byBldmVyeSBjYWxsIHRvIGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkK
Ky8vIC0gSXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBpdGVyYXRlIG92ZXIgdGhlIGluZGljZXMg
dGhhdCBpbnRlcmZlcmUgd2l0aCBhIHBhcnRpY3VsYXIgaW5kZXguIFRoaXMgY2FuIGJlIHJlcXVp
cmVkIGZvciBzb21lIHVzZXMgKHNlZSBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKQor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlciB7
CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gdHlwZW5hbWUgVDo6SW5kZXhUeXBlOwor
ICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAg
ICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1
cm4gbV91bmRlcmx5aW5nLmNvbnRhaW5zKHUsIHYpOworICAgIH0KKworICAgIGJvb2wgYWRkQW5k
UmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAg
ICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVy
biBtX3VuZGVybHlpbmcuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAo
diA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIG1fdW5kZXJseWlu
Zy5hZGQodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV91bmRlcmx5aW5nLmNs
ZWFyKCk7IH0KKyAgICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KSB7IG1fdW5kZXJseWluZy5t
YXlDbGVhcih1KTsgfQorICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikgeyBtX3VuZGVy
bHlpbmcuc2V0TWF4SW5kZXgobik7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeyBtX3VuZGVybHlpbmcu
Zm9yRWFjaChmdW5jdG9yKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3VuZGVybHlpbmcuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV91bmRlcmx5aW5nLm1lbW9yeVVzZSgpOyB9CisgICAgdm9pZCBkdW1wTWVtb3J5VXNl
SW5LQigpIGNvbnN0IHsgbV91bmRlcmx5aW5nLmR1bXBNZW1vcnlVc2VJbktCKCk7IH0KKworcHJp
dmF0ZToKKyAgICBUIG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoZSBiaXQgdmVjdG9yIGFwcHJv
YWNoIHVzZXMgbipuIGJpdHMsIG9yIDIwa0IgZm9yIG4gPSA0MDAuCitjb25zdGV4cHIgdW5zaWdu
ZWQgbWF4U2l6ZUZvclNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7Cit1c2luZyBEZWZhdWx0
U21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRl
cjxJbnRlcmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+PjsKK3VzaW5nIERlZmF1bHRTbWFsbEl0
ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0U21hbGxJbnRlcmZlcmVuY2VHcmFwaDsK
K3VzaW5nIERlZmF1bHRMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVk
dXBBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dDx1aW50MTZfdD4sIHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdy
YXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtl
bHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90Pj47Cit1c2luZyBE
ZWZhdWx0TGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVw
bGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50
ZWdlclNldDx1aW50MTZfdD4sIHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0SHVnZUl0ZXJhYmxl
SW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI8SW50
ZXJmZXJlbmNlVmVjdG9yPExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90Piwg
dWludDMyX3Q+PjsKKworLy8gU2V0IHRvIG9uZSB0byBydW4gYSByZWZlcmVuY2UgaW1wbGVtZW50
YXRpb24gaW4gcGFyYWxsZWwgd2l0aCB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1Y3R1cmUsIHZlcmlm
eWluZyB0aGF0IHRoZXkgYWdyZWUgb24gZXZlcnkgbWV0aG9kIGNhbGwuCisvLyBCZXdhcmU6IHRo
aXMgaXMgbmF0dXJhbGx5IG11Y2ggc2xvd2VyIGFuZCBtZW1vcnkgaHVuZ3J5CisjZGVmaW5lIFRF
U1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSCAwCisjaWYgIVRFU1RfT1BUSU1JWkVEX0lO
VEVSRkVSRU5DRV9HUkFQSAorCit1c2luZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVs
dFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0g
RGVmYXVsdExhcmdlSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBIdWdlSW50ZXJmZXJlbmNlR3Jh
cGggPSBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdyYXBoOworCit1c2luZyBTbWFsbEl0ZXJhYmxl
SW50ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
OwordXNpbmcgTGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdExhcmdlSXRl
cmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdy
YXBoID0gRGVmYXVsdEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOworCisjZWxzZSAvLyBU
RVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKKworLy8gVGhpcyBpcyBhbiB1bm9wdGlt
aXplZCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIGZvciB1c2Ugd2l0aCBJbnN0cnVtZW50ZWRJ
bnRlcmZlcmVuY2VHcmFwaCBiZWxvdwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnRl
cmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSBUOworICAg
IHVzaW5nIEludGVyZmVyZW5jZUVkZ2UgPSBzdGQ6OnBhaXI8SW5kZXhUeXBlLCBJbmRleFR5cGU+
OworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CisKKyAgICBib29s
IGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmFkZCh7IHUsIHYgfSkuaXNOZXdFbnRyeTsKKyAgICB9CisK
KyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBt
X3NldC5hZGQoeyB1LCB2IH0pOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAg
ICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1heEluZGV4KHVuc2ln
bmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNf
bGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9y
KGVkZ2UpOworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Nl
dC5zaXplKCk7IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0LmNhcGFjaXR5KCkgKiBzaXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0KKworICAgIHZvaWQg
ZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkgLyAxMDI0KTsg
fQorCitwcml2YXRlOgorICAgIEhhc2hTZXQ8SW50ZXJmZXJlbmNlRWRnZT4gbV9zZXQ7Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIEluc3RydW1lbnRlZElu
dGVyZmVyZW5jZUdyYXBoIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFt
ZSBUOjpJbmRleFR5cGU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8SW5kZXhUeXBl
LCB0eXBlbmFtZSBVOjpJbmRleFR5cGU+Ojp2YWx1ZSk7CisgICAgYm9vbCBjb250YWlucyhJbmRl
eFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGNvbnRhaW5zSW5BID0g
bV9zZXRBLmNvbnRhaW5zKHUsIHYpOworICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRC
LmNvbnRhaW5zKHUsIHYpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBj
b250YWluc0luQik7CisgICAgICAgIHJldHVybiBjb250YWluc0luQTsKKyAgICB9CisKKyAgICBi
b29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAg
IHsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5KHUsIHYpOworICAgICAgICBib29sIGlzTmV3RW50cnlCID0gbV9zZXRCLmFkZEFuZFJldHVy
bklzTmV3RW50cnkodSwgdik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTmV3RW50cnlBID09
IGlzTmV3RW50cnlCKTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnlBOworICAgIH0KKworICAg
IHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIG1fc2V0
QS5hZGQodSwgdik7CisgICAgICAgIG1fc2V0Qi5hZGQodSwgdik7CisgICAgfQorCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldEEuY2xlYXIoKTsKKyAgICAgICAgbV9zZXRC
LmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUgdSkKKyAgICB7
CisgICAgICAgIG1fc2V0QS5tYXlDbGVhcih1KTsKKyAgICAgICAgbV9zZXRCLm1heUNsZWFyKHUp
OworICAgIH0KKworICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7Cisg
ICAgICAgIG1fc2V0QS5zZXRNYXhJbmRleChuKTsKKyAgICAgICAgbV9zZXRCLnNldE1heEluZGV4
KG4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9zZXRBLmZv
ckVhY2goZnVuY3Rvcik7CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7CisgICAgICAgIHVuc2ln
bmVkIHNpemVCID0gbV9zZXRCLnNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZUEg
PT0gc2l6ZUIpOworICAgICAgICByZXR1cm4gc2l6ZUE7CisgICAgfQorCisgICAgdW5zaWduZWQg
bWVtb3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldEEubWVtb3J5VXNl
KCkgKyBtX3NldEIubWVtb3J5VXNlKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wTWVtb3J5VXNl
SW5LQigpIGNvbnN0CisgICAgeworICAgICAgICBkYXRhTG9nKG1fc2V0QS5tZW1vcnlVc2UoKSAv
IDEwMjQsICIgLT4gIiwgbV9zZXRCLm1lbW9yeVVzZSgpIC8gMTAyNCk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7Cit9OworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJl
bmNlR3JhcGggOiBwdWJsaWMgSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8VCwgVT4gewor
cHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxU
LCBVPjsKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBCYXNlOjpJbmRleFR5cGU7CisK
KyAgICBzdHJ1Y3QgSXRlcmFibGUgeworICAgICAgICBJdGVyYWJsZSh0eXBlbmFtZSBUOjpJdGVy
YWJsZSBpdGVyYWJsZUEsIHR5cGVuYW1lIFU6Okl0ZXJhYmxlIGl0ZXJhYmxlQikKKyAgICAgICAg
eworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgdmFsdWUgOiBpdGVyYWJsZUEpCisgICAgICAg
ICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbmRl
eFR5cGU+IHZhbHVlc0I7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSB2YWx1ZSA6IGl0ZXJh
YmxlQikKKyAgICAgICAgICAgICAgICB2YWx1ZXNCLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlcy5zaXplKCkgPT0gdmFsdWVzQi5zaXplKCkpOworICAg
ICAgICAgICAgc3RkOjpzb3J0KG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpKTsKKyAg
ICAgICAgICAgIHN0ZDo6c29ydCh2YWx1ZXNCLmJlZ2luKCksIHZhbHVlc0IuZW5kKCkpOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVzW2ldID09IHZhbHVlc0JbaV0p
OworICAgICAgICB9CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgVmVjdG9yPElu
ZGV4VHlwZT46OmNvbnN0X2l0ZXJhdG9yOworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7CisgICAg
ICAgIH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPElu
ZGV4VHlwZT4gbV92YWx1ZXM7CisgICAgfTsKKworICAgIEl0ZXJhYmxlIG9wZXJhdG9yW10oSW5k
ZXhUeXBlIHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBCYXNlOjptX3NldEFbdV0s
IEJhc2U6Om1fc2V0Qlt1XSB9OworICAgIH0KK307CisKK3VzaW5nIFJlZmVyZW5jZUludGVyZmVy
ZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5jZUhhc2hT
ZXQ8dWludDE2X3Q+PjsKK3VzaW5nIEh1Z2VSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVu
ZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQzMl90Pj47
CisKK3VzaW5nIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVu
Y2VHcmFwaDxSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNtYWxsSW50ZXJmZXJl
bmNlR3JhcGg+OwordXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZElu
dGVyZmVyZW5jZUdyYXBoPFJlZmVyZW5jZUludGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0TGFyZ2VJ
bnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVt
ZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxIdWdlUmVmZXJlbmNlSW50ZXJmZXJlbmNlR3JhcGgsIERl
ZmF1bHRIdWdlSW50ZXJmZXJlbmNlR3JhcGg+OworCit1c2luZyBSZWZlcmVuY2VJdGVyYWJsZUlu
dGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVy
ZmVyZW5jZVZlY3RvcjxIYXNoU2V0PHVpbnQxNl90LCBJbnRIYXNoPHVpbnQxNl90PiwgVW5zaWdu
ZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2X3Q+PiwgdWludDE2X3Q+PjsKK3VzaW5nIEh1
Z2VSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVw
bGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxIYXNoU2V0PHVpbnQzMl90LCBJbnRI
YXNoPHVpbnQzMl90PiwgVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+Piwg
dWludDMyX3Q+PjsKKwordXNpbmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gSW5z
dHJ1bWVudGVkSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJdGVyYWJsZUludGVy
ZmVyZW5jZUdyYXBoLCBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPjsKK3Vz
aW5nIExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxl
SW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCwgRGVm
YXVsdExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBIdWdlSXRlcmFibGVJ
bnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg8
SHVnZVJlZmVyZW5jZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1bHRIdWdlSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaD47CisKKyNlbmRpZiAvLyBURVNUX09QVElNSVpFRF9JTlRFUkZF
UkVOQ0VfR1JBUEgKKworfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oIGIvU291cmNlL1dURi93dGYvTGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaAppbmRleCA5YjZiM2Q4N2U3ODQuLjg4ZTNmNDUx
MDk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX21pbigwKQogICAgICAg
ICAsIG1fbWF4KDApCiAgICAgewotICAgICAgICBuZXcgKCZtX2lubGluZS5iaXRWZWN0b3IpIEJp
dFZlY3RvcjsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRW
ZWN0b3I7CiAgICAgfQogCiAgICAgfkxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0KCkKQEAg
LTcwLDkgKzcwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX21heChvdGhlci5tX21heCkKICAg
ICB7CiAgICAgICAgIGlmIChpc0JpdFZlY3RvcigpKQotICAgICAgICAgICAgbmV3ICgmbV9pbmxp
bmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShvdGhlci5tX2lubGluZS5iaXRWZWN0b3Ip
KTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVj
dG9yKFdURk1vdmUob3RoZXIubV9pbmxpbmUuYml0VmVjdG9yKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ldyAoJm1faW5saW5lLmhhc2hTZXQpIFNldChXVEZNb3ZlKG90aGVyLm1faW5s
aW5lLmhhc2hTZXQpKTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmhhc2hT
ZXQpIFNldChXVEZNb3ZlKG90aGVyLm1faW5saW5lLmhhc2hTZXQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fbWluID0g
MDsKKyAgICAgICAgbV9tYXggPSAwOworICAgICAgICBpZiAoaXNCaXRWZWN0b3IoKSkKKyAgICAg
ICAgICAgIG1faW5saW5lLmJpdFZlY3Rvci5jbGVhckFsbCgpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1faW5saW5lLmhhc2hTZXQufkhhc2hTZXQoKTsKKyAgICAgICAgICAgIG5ldyAo
Tm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yOworICAgICAgICB9CiAgICAg
fQogCiAgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdmFsdWUpIGNvbnN0CkBAIC0xMzEsOSAr
MTQ0LDcgQEAgcHVibGljOgogICAgICAgICBJbmRleFR5cGUgbmV3TWluID0gc3RkOjptaW4obV9t
aW4sIHZhbHVlKTsKICAgICAgICAgSW5kZXhUeXBlIG5ld01heCA9IHN0ZDo6bWF4KG1fbWF4LCB2
YWx1ZSk7CiAgICAgICAgIHVuc2lnbmVkIGJpdFZlY3RvclNpemUgPSAobmV3TWF4IC0gbmV3TWlu
KSAvIDg7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVh
ZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFyZ2UgSGFzaFNldCBpcyA1MCUKLSAgICAg
ICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0eSA9IHN0ZDo6bWF4KDh1LCBtX3NpemUp
ICogaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJoZWFkOwotICAgICAgICB1bnNpZ25lZCB3
b3VsZEJlSGFzaFNldFNpemUgPSB3b3VsZEJlSGFzaFNldENhcGFjaXR5ICogc2l6ZW9mKEluZGV4
VHlwZSk7CisgICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNoU2V0U2l6ZSA9IGVzdGltYXRlSGFz
aFNldFNpemUobV9zaXplKTsKICAgICAgICAgaWYgKHdvdWxkQmVIYXNoU2V0U2l6ZSAqIDIgPCBi
aXRWZWN0b3JTaXplKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uVG9IYXNoU2V0KCk7CiAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW5saW5lLmhhc2hTZXQuYWRkKHZhbHVlKTsKQEAgLTI2
OSw2ICsyODAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICYmICFVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxJbmRleFR5cGU+Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSk7CiAgICAgfQog
CisgICAgdW5zaWduZWQgZXN0aW1hdGVIYXNoU2V0U2l6ZSh1bnNpZ25lZCBuKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJoZWFkID0gMzsgLy8g
bWF4IG9jY3VwYW5jeSBmb3IgYSBsYXJnZSBIYXNoU2V0IGlzIDUwJQorICAgICAgICB1bnNpZ25l
ZCB3b3VsZEJlSGFzaFNldENhcGFjaXR5ID0gc3RkOjptYXgoOHUsIG4pICogaGFzaFNldEVzdGlt
YXRlZE9jY3VwYW5jeU92ZXJoZWFkOworICAgICAgICByZXR1cm4gd291bGRCZUhhc2hTZXRDYXBh
Y2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgIH0KKwogICAgIHZvaWQgdHJhbnNpdGlvblRv
SGFzaFNldCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCaXRWZWN0b3IoKSk7CkBAIC0yNzgs
NyArMjk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChJbmRleFR5cGUgb2xkSW5kZXggOiBt
X2lubGluZS5iaXRWZWN0b3IpCiAgICAgICAgICAgICBuZXdTZXQuYWRkKG9sZEluZGV4ICsgbV9t
aW4pOwogICAgICAgICBtX2lubGluZS5iaXRWZWN0b3IufkJpdFZlY3RvcigpOwotICAgICAgICBu
ZXcgKCZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShuZXdTZXQpKTsKKyAgICAgICAgbmV3
IChOb3ROdWxsLCAmbV9pbmxpbmUuaGFzaFNldCkgU2V0KFdURk1vdmUobmV3U2V0KSk7CiAgICAg
ICAgIG1fc2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKIAogICAg
ICAgICBBU1NFUlQoIWlzQml0VmVjdG9yKCkpOwpAQCAtMjk3LDcgKzMxNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5ld0JpdFZlY3Rvci5xdWlja0dldCgwKSk7CiAg
ICAgICAgIG1faW5saW5lLmhhc2hTZXQuflNldCgpOwotICAgICAgICBuZXcgKCZtX2lubGluZS5i
aXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZlY3RvcikpOworICAgICAgICBuZXcg
KE5vdE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZl
Y3RvcikpOwogCiAgICAgICAgIEFTU0VSVChpc0JpdFZlY3RvcigpKTsKICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="451209"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429934</attachid>
            <date>2021-05-27 15:05:29 -0700</date>
            <delta_ts>2021-05-27 17:43:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>67562</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uOWVmNGRiZjMxZjljIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0wNS0yNiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEFpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3Jpbmcgc2hvdWxkIHVzZSB0aGUgb3B0aW1pemVkIGludGVyZmVyZW5j
ZSBncmFwaHMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gY2hhbmdl
IGluIHRoaXMgcGF0Y2ggaXMgdGhhdCBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIGlz
IG5vdyB1c2luZyB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1Y3R1cmVzIGluIHd0Zi9JbnRlcmZlcmVu
Y2VHcmFwaC5oLgorICAgICAgICBUaGlzIHJlcXVpcmVkIHRlbXBsYXRpbmcgbW9zdCBvZiBpdCBv
dmVyIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGggdXNlZCAoU21hbGwvTGFyZ2UvSHVnZSksIGJ1dCBJ
IHRyaWVkIGtlZXBpbmcgc29tZSBjb21tb24gcGFydHMgb3V0IG9mIHRoZSB0ZW1wbGF0ZWQgY2xh
c3MgdG8gbWluaW1pemUgdGhlIGltcGFjdCBvbiBjb21waWxlIHRpbWVzIGFuZCBiaW5hcnkgc2l6
ZS4KKworICAgICAgICBBIGNvbnNlcXVlbmNlIG9mIHRoYXQgY2hhbmdlIGlzIHRoYXQgY29hbGVz
Y2FibGVNb3ZlcyBhbmQgcmVtYXBwZWRTdGFja1Nsb3RzIG5vdyBzdG9yZSBpbmRpY2VzIGluc3Rl
YWQgb2YgZGlyZWN0IHBvaW50ZXJzIHRvIFN0YWNrU2xvdHMsIHJlc3VsdGluZyBpbiBhIG1lbW9y
eSByZWR1Y3Rpb24gb2YgYWJvdXQgM3ggYXMgd2VsbC4KKworICAgICAgICBBbm90aGVyIGNvbnNl
cXVlbmNlIGlzIHRoYXQgSSBoYWQgdG8gc2xpZ2h0bHkgYWx0ZXIgdGhlIHdheSB0aGF0IGNvYWxl
c2Npbmcgd29ya3M6IGluc3RlYWQgb2YgY2FyZWZ1bGx5IHJlbW92aW5nIHRoZSBpbnRlcmZlcmVu
Y2UgZWRnZXMgb2YgdGhlIGtpbGxlZCBzbG90LCB3ZSBzaW1wbHkgdXNlIG1heUNsZWFyKCkgd2hp
Y2ggaXMgbm90IGd1YXJhbnRlZWQgdG8gcmVtb3ZlIGFueXRoaW5nLgorICAgICAgICBJIGJlbGll
dmUgdGhhdCB0aGlzIGlzIHNvdW5kLCBiZWNhdXNlIGV2ZXJ5IHN1YnNlcXVlbnQgYWNjZXNzIHRv
IG1faW50ZXJmZXJlbmNlIGNoZWNrcyB3aGV0aGVyIGEgc2xvdCBoYXMgYmVlbiBjb2FsZXNjZWQg
Zmlyc3QsIHNvIGRyb3BwaW5nIHRoZXNlIGVkZ2VzIGlzIHB1cmVseSBhIG1lbW9yeSBzYXZpbmcs
IGJ1dCBoYXMgbm8gbG9naWNhbCBlZmZlY3QuCisKKyAgICAgICAgVGhlIG5ldyBjb2RlIHdhcyB0
ZXN0ZWQgaW4gYSBmZXcgd2F5czoKKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgd2l0
aCBhc2FuCisgICAgICAgIC0gcnVubmluZyBvbiBKZXRTdHJlYW0yIHdpdGggVEVTVF9PUFRJTUla
RURfSU5URVJGRVJFTkNFX0dSQVBICisgICAgICAgIC0gcnVubmluZyBvbiBKZXRTdHJlYW0yIGFu
ZCBsb2dnaW5nIHRoZSBmcmFtZSBzaXplcyBhdCB0aGUgZW5kIG9mIHRoaXMgcGhhc2UsIGFuZCBj
b21wYXJpbmcgdG8gdGhlIHJlc3VsdHMgb2YgZG9pbmcgdGhlIHNhbWUgb24gVG9UIChzYW1lIGF2
ZXJhZ2UgZnJhbWUgc2l6ZSkKKworICAgICAgICBUaGUgdHdvIGZ1bmN0aW9ucyB3aGVyZSB0aGlz
IGNvZGUgaGFkIHRoZSBsYXJnZXN0IG1lbW9yeSBmb290cHJpbnQgaW4gSmV0U3RyZWFtMiB3ZXJl
IGJvdGggaW4gdHNmLXdhc20uCisgICAgICAgIE9uZSBoYXMgNzUxIHN0YWNrIHNsb3RzLCBhbmQg
aGFkIGFuIGludGVyZmVyZW5jZSBncmFwaCBvZiAyLjFNQiBhbmQgYSBjb2FsZXNjYWJsZU1vdmVz
IHZlY3RvciBvZiA0NDBrQgorICAgICAgICBUaGUgb3RoZXIgaGFzIDY3MyBzdGFjayBzbG90cywg
YW5kIGhhZCBhbiBpbnRlcmZlcmVuY2UgZ3JhcGggb2YgMS45TUIgYW5kIGEgY29hbGVzY2FibGVN
b3ZlcyB2ZWN0b3Igb2YgNDIxa0IuCisgICAgICAgIFdpdGggdGhpcyBwYXRjaCwgdGhleSByZXNw
ZWN0aXZlbHkgdXNlIDc5a0IrMTQ2a0IgYW5kIDY3a0IrMTQwa0IKKyAgICAgICAgVGhlIGVmZmVj
dCBvbiB0aGUgcmVzdCBvZiBKZXRTdHJlYW0yIGlzIGxlc3MgbGlrZWx5IHRvIG1hdHRlciBhcyBm
ZXcgZnVuY3Rpb25zIHVzZWQgbW9yZSB0aGFuIGEgZmV3IGRvemVucyBvZiBrQiBpbiB0aGlzIHBo
YXNlLCBidXQgaW4gcGVyY2VudGFnZXMgYXJlIGp1c3QgYXMgaHVnZS4KKworICAgICAgICBNb3Jl
IGltcG9ydGFudGx5IChhbmQgdGhlIHJlYXNvbiBJIHdyb3RlIHRoaXMgcGF0Y2ggaW4gdGhlIGZp
cnN0IHBsYWNlKSwgSSBjaGVja2VkIG1ydWJ5LXdhc20uYW90b2tpLmRldiB3aGljaCB3aXRoIGEg
ZmV3IG90aGVyIHBhZ2VzIGZvcmNlZCB1cyB0byBsb3dlciBPcHRpb25zOjptYXhpbXVtVG1wc0Zv
ckdyYXBoQ29sb3JpbmcgYmVjYXVzZSBvZiBqZXRzYW1zLgorICAgICAgICBJdCBoYXMgdHdvIG1h
c3NpdmUgZnVuY3Rpb25zIHRoYXQgcmVhY2ggdGhpcyBwaGFzZSBpZiBJIGluY3JlYXNlIE9wdGlv
bnM6Om1heGltdW1UbXBzRm9yR3JhcGhDb2xvcmluZzoKKyAgICAgICAgLSBhYm91dCA2ayBzdGFj
ayBzbG90cyAtPiAyMTVNQiArIDZNQiAoaW50ZXJmZXJlbmNlIGdyYXBoICsgY29hbGVzY2FibGVN
b3ZlcykKKyAgICAgICAgLSBhYm91dCA5ayBzdGFjayBzbG90cyAtPiAzOTVNQiArIDRNQgorICAg
ICAgICBBZnRlciB0aGlzIHBhdGNoLCB0aGV5IHJlc3BlY3RpdmVseSB1c2UgNC41TUIrMk1CIGFu
ZCA5TUIrMS41TUIsIG9yIHJvdWdobHkgYSA0MHggaW1wcm92ZW1lbnQuCisgICAgICAgIENvbWJp
bmVkIHdpdGggdGhlIHJlY2VudCBpbXByb3ZlbWVudHMgdG8gdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ciwgSSBob3BlIHRvIGJlIGFibGUgdG8gaW5jcmVhc2UgT3B0aW9uczo6bWF4aW11bVRtcHNGb3JH
cmFwaENvbG9yaW5nIHNvb24gKGluIGEgZGlmZmVyZW50IHBhdGNoIGZvciBlYXNpZXIgYmlzZWN0
aW9uIGlmIGVpdGhlciBjYXVzZSBhIHBlcmYgcmVncmVzc2lvbikuCisgICAgICAgIFRoaXMgd291
bGQgYmUgaGVscGZ1bCwgc2luY2UgaXRzIGxvd2VyaW5nIGNyYXRlcmVkIG91ciBwZXJmb3JtYW5j
ZSBvbiBzb21lIG90aGVyIHdhc20gYXBwbGljYXRpb24gYnkgOHguCisKKyAgICAgICAgSW4gdGVy
bXMgb2YgY29tcGlsZSB0aW1lcywgdGhpcyBwYXRjaCBsb3dlcmVkIHRoZSB0aW1lIHNwZW50IGlu
IEFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3Jpbmcgb3ZlciB0aGUgY291cnNlIG9mIGEgcnVuIG9m
IEpldFN0cmVhbTIgZnJvbSByb3VnaGx5IDM1MG1zIHRvIHJvdWdobHkgMjcwbXMuCisgICAgICAg
IFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBuZWdsaWdpYmxlLCBidXQgYXQgbGVhc3QgaXQgZ3Vh
cmFudGVlcyB0aGF0IGl0IGRpZCBub3QgcmVncmVzcy4KKworICAgICAgICAqIGIzL2Fpci9BaXJB
bGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHA6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjphbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKToKKwogMjAyMS0wNS0yNyAgQWRyaWFuIFBl
cmV6IGRlIENhc3RybyAgPGFwZXJlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIE5vbi11bmlmaWVk
IGJ1aWxkIGZpeGVzLCBsYXRlIE1heSAyMDIxIGVkaXRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3Jpbmcu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZy5jcHAKaW5kZXggOWUxNjIzN2E3YmRiLi4yNmI0NGI1ZWIxYWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVSZWdpc3RlcnNC
eUdyYXBoQ29sb3JpbmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcuY3BwCkBAIC0zOSw3ICszOSw3IEBACiAj
aW5jbHVkZSAiQWlyVXNlQ291bnRzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaFRyYWl0cy5oPgotI2luY2x1ZGUgPHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldC5oPgorI2luY2x1ZGUgPHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oPgogI2luY2x1
ZGUgPHd0Zi9TbWFsbFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNTIsMjM4
ICs1Miw2IEBAIHN0YXRpYyBjb25zdGV4cHIgYm9vbCB0cmFjZURlYnVnID0gZmFsc2U7CiBzdGF0
aWMgY29uc3RleHByIGJvb2wgcmVwb3J0U3RhdHMgPSBmYWxzZTsKIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCByZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVzZSA9IGZhbHNlOwogCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgSW5kZXhUeXBlPgotY2xhc3MgSW50ZXJmZXJlbmNlSGFzaFNldCB7Ci0gICAg
Ly8gSW50ZXJmZXJlbmNlIGVkZ2VzIGFyZSBub3QgZGlyZWN0ZWQuIEFuIGVkZ2UgYmV0d2VlbiBh
bnkgdHdvIFRtcHMgaXMgcmVwcmVzZW50ZWQKLSAgICAvLyBieSB0aGUgY29uY2F0ZW5hdGVkIHZh
bHVlcyAodGhyb3VnaCBUbXBNYXBwZXIpIG9mIHRoZSBzbWFsbGVzdCBUbXAgZm9sbG93ZWQgYnkg
dGhlIGJpZ2dlciBUbXAuCi0gICAgdXNpbmcgSW50ZXJmZXJlbmNlRWRnZSA9IHN0ZDo6cGFpcjxJ
bmRleFR5cGUsIEluZGV4VHlwZT47Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5
cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICBpZiAodiA8IHUpCi0gICAgICAgICAg
ICBzdGQ6OnN3YXAodSwgdik7Ci0gICAgICAgIHJldHVybiBtX3NldC5jb250YWlucyh7IHUsIHYg
fSk7Ci0gICAgfQotCi0gICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmFkZCh7IHUsIHYgfSkuaXNOZXdF
bnRyeTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fc2V0LmNs
ZWFyKCk7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNpZ25lZCBuKQotICAg
IHsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChuLCBuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRl
eFR5cGU+OjptYXgoKSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAg
ICBmb3IgKGF1dG8gZWRnZSA6IG1fc2V0KQotICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9
Ci0KLSAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdCB7IHJldHVybiBtX3NldC5jYXBhY2l0
eSgpICogc2l6ZW9mKEludGVyZmVyZW5jZUVkZ2UpOyB9Ci0KLSAgICB2b2lkIGR1bXBNZW1vcnlV
c2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEwMjQpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgSGFzaFNldDxJbnRlcmZlcmVuY2VFZGdlPiBtX3NldDsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBULCB0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3Ig
ewotcHVibGljOgotICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQot
ICAgIHsKLSAgICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwot
ICAgICAgICByZXR1cm4gbV92ZWN0b3JbdV0uY29udGFpbnModik7Ci0gICAgfQotCi0gICAgYm9v
bCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7
Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0ZDo6c3dhcCh1LCB2KTsKLSAgICAg
ICAgYm9vbCBpc05ld0VudHJ5ID0gbV92ZWN0b3JbdV0uYWRkKHYpLmlzTmV3RW50cnk7Ci0gICAg
ICAgIG1fc2l6ZSArPSBpc05ld0VudHJ5OwotICAgICAgICByZXR1cm4gaXNOZXdFbnRyeTsKLSAg
ICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmNsZWFyKCk7
Ci0gICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1
bnNpZ25lZCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKLSAgICAgICAgbV92ZWN0b3IucmVzaXplKG4pOwotICAgIH0K
LQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKSA7ICsraSkgewotICAgICAgICAgICAgZm9yIChJbmRleFR5cGUg
aiA6IG1fdmVjdG9yW2ldKQotICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotCi0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHVu
c2lnbmVkIG1lbW9yeSA9IDA7Ci0gICAgICAgIGZvciAoY29uc3QgVCYgc2V0IDogbV92ZWN0b3Ip
Ci0gICAgICAgICAgICBtZW1vcnkgKz0gc2V0Lm1lbW9yeVVzZSgpOwotICAgICAgICByZXR1cm4g
bWVtb3J5OwotICAgIH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRh
dGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8VD4gbV92
ZWN0b3I7Ci0gICAgdW5zaWduZWQgbV9zaXplIHswfTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VCaXRWZWN0b3IgewotcHVibGljOgotICAg
IGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUsIHYpKTsKLSAgICB9Ci0KLSAgICBi
b29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAg
IHsKLSAgICAgICAgLy8gTm90ZTogd2UgY291bGQgZG8gb25seSBvbmUgcXVpY2tTZXQsIGF0IHRo
ZSBjb3N0IG9mIG9uZSBleHRyYSBicmFuY2ggaW4gZXZlcnkgY29udGFpbnMvYWRkQW5kUmV0dXJu
SXNOZXdFbnRyeSAodG8gZW5mb3JjZSB1IDwgdikKLSAgICAgICAgYm9vbCBhbHJlYWR5SW4gPSBt
X2JpdFZlY3Rvci5xdWlja1NldChpbmRleCh1LCB2KSk7Ci0gICAgICAgIGJvb2wgYWxyZWFkeUlu
MiA9IG1fYml0VmVjdG9yLnF1aWNrU2V0KGluZGV4KHYsIHUpKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChhbHJlYWR5SW4yLCBhbHJlYWR5SW4gPT0gYWxyZWFkeUluMik7Ci0gICAgICAgIG1fc2l6
ZSArPSAhYWxyZWFkeUluOwotICAgICAgICByZXR1cm4gIWFscmVhZHlJbjsKLSAgICB9Ci0KLSAg
ICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7Ci0g
ICAgICAgIG1fc2l6ZSA9IDA7Ci0gICAgfQotCi0gICAgdm9pZCBzZXRNYXhUbXBJbmRleCh1bnNp
Z25lZCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPElu
ZGV4VHlwZT46Om1heCgpKTsKLSAgICAgICAgbV9udW1UbXBzID0gbjsKLSAgICAgICAgbV9iaXRW
ZWN0b3IuZW5zdXJlU2l6ZShuKm4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdG9yPgotICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsK
LSAgICAgICAgZm9yIChJbmRleFR5cGUgaSA9IDA7IGkgPCBtX251bVRtcHM7ICsraSkgewotICAg
ICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA9IGkgKyAxOyBqIDwgbV9udW1UbXBzOyArK2opIHsK
LSAgICAgICAgICAgICAgICBpZiAobV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgoaSwgaikpKQot
ICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLQotICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIChtX2JpdFZl
Y3Rvci5zaXplKCkgKyA3KSA+PiAzOyB9Ci0KLSAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkg
Y29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpLzEwMjQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgdW5z
aWduZWQgaW5kZXgoSW5kZXhUeXBlIGksIEluZGV4VHlwZSBqKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGkgKiBtX251bVRtcHMgKyBqOwotICAgIH0KLQotICAgIEJpdFZlY3RvciBtX2JpdFZlY3Rv
cjsKLSAgICB1bnNpZ25lZCBtX3NpemUgezB9OwotICAgIEluZGV4VHlwZSBtX251bVRtcHM7Ci19
OwotCi0jZGVmaW5lIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSCAwCi0jaWYgVEVT
VF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICi10ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVSwgdHlwZW5hbWUgSW5kZXhUeXBlPgotY2xhc3MgSW5zdHJ1bWVudGVkSW50ZXJmZXJl
bmNlR3JhcGggewotcHVibGljOgotICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4
VHlwZSB2KQotICAgIHsKLSAgICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlu
cyh1LCB2KTsKLSAgICAgICAgYm9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2
KTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOwot
ICAgICAgICByZXR1cm4gY29udGFpbnNJbkE7Ci0gICAgfQotCi0gICAgYm9vbCBhZGRBbmRSZXR1
cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGJv
b2wgaXNOZXdFbnRyeUEgPSBtX3NldEEuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKLSAg
ICAgICAgYm9vbCBpc05ld0VudHJ5QiA9IG1fc2V0Qi5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUs
IHYpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc05ld0VudHJ5QSA9PSBpc05ld0VudHJ5Qik7
Ci0gICAgICAgIHJldHVybiBpc05ld0VudHJ5QTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFyKCkK
LSAgICB7Ci0gICAgICAgIG1fc2V0QS5jbGVhcigpOwotICAgICAgICBtX3NldEIuY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCi0gICAgewotICAg
ICAgICBtX3NldEEuc2V0TWF4VG1wSW5kZXgobik7Ci0gICAgICAgIG1fc2V0Qi5zZXRNYXhUbXBJ
bmRleChuKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICB2
b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIG1fc2V0
QS5mb3JFYWNoKGZ1bmN0b3IpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgdW5zaWduZWQgc2l6ZUEgPSBtX3NldEEuc2l6ZSgpOwotICAgICAgICB1
bnNpZ25lZCBzaXplQiA9IG1fc2V0Qi5zaXplKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNp
emVBID09IHNpemVCKTsKLSAgICAgICAgcmV0dXJuIHNpemVBOwotICAgIH0KLQotICAgIHZvaWQg
ZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdAotICAgIHsKLSAgICAgICAgZGF0YUxvZyhtX3NldEEu
bWVtb3J5VXNlKCkvMTAyNCwgIiAtPiAiLCBtX3NldEIubWVtb3J5VXNlKCkvMTAyNCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIFQgbV9zZXRBOwotICAgIFUgbV9zZXRCOwotfTsKLQotdXNpbmcg
U21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZUJpdFZlY3Rvcjx1aW50MTZfdD47
Ci11c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNl
R3JhcGg8SW50ZXJmZXJlbmNlSGFzaFNldDx1aW50MTZfdD4sIEludGVyZmVyZW5jZVZlY3RvcjxM
aWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MTZfdD4sIHVpbnQxNl90PiwgdWludDE2
X3Q+OwotdXNpbmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJl
bmNlR3JhcGg8SW50ZXJmZXJlbmNlSGFzaFNldDx1aW50MzJfdD4sIEludGVyZmVyZW5jZVZlY3Rv
cjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90PiwgdWlu
dDE2X3Q+OwotCi0jZWxzZSAvLyBURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKLQot
dXNpbmcgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IEludGVyZmVyZW5jZUJpdFZlY3Rvcjx1aW50
MTZfdD47Ci11c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlVmVjdG9y
PExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQxNl90PiwgdWludDE2X3Q+OwotdXNp
bmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlVmVjdG9yPExpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMyX3Q+OwotCi0jZW5kaWYKLQogLy8g
VGhlIEFic3RyYWN0Q29sb3JpbmdBbGxvY2F0b3IgZGVmaW5lcyBhbGwgdGhlIGNvZGUgdGhhdCBp
cyBpbmRlcGVuZGFudAogLy8gZnJvbSB0aGUgYmFuayBvciByZWdpc3RlciBhbmQgY2FuIGJlIHNo
YXJlZCB3aGVuIGFsbG9jYXRpbmcgcmVnaXN0ZXJzLgogdGVtcGxhdGU8dHlwZW5hbWUgSW5kZXhU
eXBlLCB0eXBlbmFtZSBJbnRlcmZlcmVuY2VTZXQsIEJhbmsgYmFuaz4KQEAgLTE1ODksMTIgKzEz
NTcsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbV9p
bnRlcmZlcmVuY2VFZGdlcy5zZXRNYXhUbXBJbmRleChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6
YWJzb2x1dGVJbmRleChtX2NvZGUubnVtVG1wcyhiYW5rKSkpOworICAgICAgICBtX2ludGVyZmVy
ZW5jZUVkZ2VzLnNldE1heEluZGV4KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUlu
ZGV4KG1fY29kZS5udW1UbXBzKGJhbmspKSk7CiAKICAgICAgICAgaW5pdGlhbGl6ZVByZWNvbG9y
ZWRUbXAoKTsKICAgICAgICAgYnVpbGQoKTsKIAotICAgICAgICBpZiBjb25zdGV4cHIgKHJlcG9y
dEludGVyZmVyZW5jZUdyYXBoTWVtb3J5VXNlICYmIChzdGQ6OmlzX3NhbWU8SW50ZXJmZXJlbmNl
U2V0LCBMYXJnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPEludGVy
ZmVyZW5jZVNldCwgSHVnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUpKSB7CisgICAgICAgIGlm
IGNvbnN0ZXhwciAocmVwb3J0SW50ZXJmZXJlbmNlR3JhcGhNZW1vcnlVc2UgJiYgKHN0ZDo6aXNf
c2FtZTxJbnRlcmZlcmVuY2VTZXQsIFdURjo6TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD46OnZhbHVl
IHx8IHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQsIFdURjo6SHVnZUludGVyZmVyZW5jZUdy
YXBoPjo6dmFsdWUpKSB7CiAgICAgICAgICAgICBkYXRhTG9nKCJudW1UbXBzfG51bUVkZ2VzfG1l
bW9yeVVzZShrQik6ICIsIG1fY29kZS5udW1UbXBzKGJhbmspLCAiIHwgIiwgbV9pbnRlcmZlcmVu
Y2VFZGdlcy5zaXplKCksICIgfCAiKTsKICAgICAgICAgICAgIG1faW50ZXJmZXJlbmNlRWRnZXMu
ZHVtcE1lbW9yeVVzZUluS0IoKTsKICAgICAgICAgICAgIGRhdGFMb2coIlxuIik7CkBAIC0yMDQy
LDMxICsxODEwLDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAgLy8gVGhlIGJpdCB2ZWN0b3IgYXBwcm9hY2gg
dXNlcyBuKm4gYml0cywgb3IgMjBrQiBmb3IgbiA9IDQwMC4KLSAgICAgICAgICAgIGNvbnN0ZXhw
ciB1bnNpZ25lZCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IDQwMDsKLSAgICAg
ICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IG1heFNpemVGb3JTbWFsbEludGVyZmVy
ZW5jZUdyYXBoKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBXVEY6
Om1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CiAgICAgICAgICAgICAgICAgaWYg
KHVzZUlSQygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQx
Nl90LCBiYW5rLCBJUkMsIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUs
IG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAg
ICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJDLCBXVEY6OlNtYWxs
SW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291
bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxv
Y2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3QsIGJhbmssIEJyaWdncywgU21hbGxJ
bnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3Vu
dHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2Nh
dG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIFdURjo6U21hbGxJbnRlcmZlcmVuY2VHcmFwaD4g
YWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1w
cyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY29kZS5udW1UbXBz
KGJhbmspIDwgc3RkOjpudW1lcmljX2xpbWl0czx1aW50MTZfdD46Om1heCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHVzZUlSQygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxs
b2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9j
YXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwor
ICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MTZfdCwgYmFuaywgSVJD
LCBXVEY6OkxhcmdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lk
dGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBk
b25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgQ29sb3JpbmdBbGxvY2F0b3I8dWludDE2X3QsIGJhbmssIEJy
aWdncywgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0
aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CisgICAgICAgICAgICAgICAgICAgIENv
bG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBCcmlnZ3MsIFdURjo6TGFyZ2VJbnRlcmZl
cmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVu
c3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24o
YWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIC8vIEhhdmluZyBtb3JlIHRoYW4gMioqMTYgbnVtVG1wcyBjYW4gb2NjdXIg
ZXZlbiB3aXRoIE9wdGlvbnM6Om1heFRtcHNGb3JHcmFwaENvbG9yaW5nKCkgPCAyKioxNiwgYmVj
YXVzZSBvZiBzcGlsbGluZwogICAgICAgICAgICAgICAgIGlmICh1c2VJUkMoKSkgewotICAgICAg
ICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MzJfdCwgYmFuaywgSVJDLCBIdWdl
SW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291
bnRzLCB1bnNwaWxsYWJsZVRtcHMpOworICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9j
YXRvcjx1aW50MzJfdCwgYmFuaywgSVJDLCBXVEY6Okh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxs
b2NhdG9yKG1fY29kZSwgbV90bXBXaWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7
CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9j
YXRvcjx1aW50MzJfdCwgYmFuaywgQnJpZ2dzLCBIdWdlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9j
YXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwor
ICAgICAgICAgICAgICAgICAgICBDb2xvcmluZ0FsbG9jYXRvcjx1aW50MzJfdCwgYmFuaywgQnJp
Z2dzLCBXVEY6Okh1Z2VJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKG1fY29kZSwgbV90bXBX
aWR0aCwgbV91c2VDb3VudHMsIHVuc3BpbGxhYmxlVG1wcyk7CiAgICAgICAgICAgICAgICAgICAg
IGRvbmUgPSBkb0FsbG9jYXRpb24oYWxsb2NhdG9yKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBhZTc4NjkxNmI1
NmYuLmMxZTk5MzJiNThjMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhh
c2VTY29wZS5oIgogI2luY2x1ZGUgIkFpclN0YWNrQWxsb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9JbnRlcmZlcmVuY2VHcmFwaC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC00Myw2NiArNDQs
MjYgQEAgbmFtZXNwYWNlIHsKIAogbmFtZXNwYWNlIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmdJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwor
c3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydExhcmdlTWVtb3J5VXNlcyA9IGZhbHNlOwogfQog
Ci1zdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKLSAgICBDb2FsZXNjYWJsZU1vdmUoKQorY2xhc3Mg
U3RhY2tBbGxvY2F0b3JCYXNlIHsKK3Byb3RlY3RlZDoKKyAgICBTdGFja0FsbG9jYXRvckJhc2Uo
Q29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3JlbWFwcGVk
U3RhY2tTbG90SW5kaWNlcyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpCiAgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tpXSA9IGk7
CiAgICAgfQogCi0gICAgQ29hbGVzY2FibGVNb3ZlKFN0YWNrU2xvdCogc3JjLCBTdGFja1Nsb3Qq
IGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKLSAgICAgICAgOiBzcmMoc3JjKQotICAgICAgICAsIGRz
dChkc3QpCi0gICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5jeSkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNyYyA9PSBvdGhlci5zcmMKLSAgICAgICAgICAgICYm
IGRzdCA9PSBvdGhlci5kc3QKLSAgICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVx
dWVuY3k7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2FsZXNjYWJs
ZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNjYWJsZU1vdmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3JjKSwgIi0+IiwgcG9pbnRlckR1bXAoZHN0KSwgIigi
LCBmcmVxdWVuY3ksICIpIik7Ci0gICAgfQotICAgIAotICAgIFN0YWNrU2xvdCogc3JjIHsgbnVs
bHB0ciB9OwotICAgIFN0YWNrU2xvdCogZHN0IHsgbnVsbHB0ciB9OwotICAgIGRvdWJsZSBmcmVx
dWVuY3kgeyBQTmFOIH07Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBh
bGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIik7Ci0gICAg
Ci0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrU2xv
dCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMgPQotICAgICAgICBhbGxvY2F0ZUFuZEdldEVz
Y2FwZWRTdGFja1Nsb3RzV2l0aG91dENoYW5naW5nRnJhbWVTaXplKGNvZGUpOwotCi0gICAgLy8g
Tm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCi0gICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2
ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3Qq
Pj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0
YWNrU2xvdCo+IHNsb3RzOwotCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29h
bGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlk
ZW50aWZ5CiAgICAgLy8gY29hbGVzY2FibGUgbW92ZXMgYW5kIGhhbmRsZSB0aGVtIHNwZWNpYWxs
eSBpbiBpbnRlcmZlcmVuY2UgYW5hbHlzaXMuCi0gICAgYXV0byBpc0NvYWxlc2NhYmxlTW92ZSA9
IFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgYm9vbCBpc0NvYWxlc2NhYmxlTW92ZShJ
bnN0JiBpbnN0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjpjb2FsZXNjZVNw
aWxsU2xvdHMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBXaWR0aCB3
aWR0aDsKICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgIGNhc2Ug
TW92ZToKQEAgLTExOCwxMyArNzksMTAgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghT3B0aW9uczo6Y29hbGVzY2VT
cGlsbFNsb3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9IDMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsK
ICAgICAgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbaV07CiAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1N0YWNrKCkpCkBAIC0xMzUsMTgyICs5MywzMDMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICBpZiAoc2xvdC0+Ynl0ZVNpemUo
KSAhPSBieXRlcyh3aWR0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAgCi0gICAg
YXV0byBpc1VzZWxlc3NNb3ZlID0gWyZdIChJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICB9CisK
KyAgICBib29sIGlzVXNlbGVzc01vdmUoSW5zdCYgaW5zdCkgY29uc3QKKyAgICB7CiAgICAgICAg
IHJldHVybiBpc0NvYWxlc2NhYmxlTW92ZShpbnN0KSAmJiBpbnN0LmFyZ3NbMF0gPT0gaW5zdC5h
cmdzWzFdOworICAgIH0KKworICAgIHVuc2lnbmVkIHJlbWFwKHVuc2lnbmVkIHNsb3RJbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJl
bWFwcGVkU2xvdEluZGV4ID0gbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xvdEluZGV4XTsK
KyAgICAgICAgICAgIGlmIChyZW1hcHBlZFNsb3RJbmRleCA9PSBzbG90SW5kZXgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNsb3RJbmRleDsKKyAgICAgICAgICAgIHNsb3RJbmRleCA9IHJlbWFw
cGVkU2xvdEluZGV4OworICAgICAgICB9CisgICAgfQorCisgICAgU3RhY2tTbG90KiByZW1hcFN0
YWNrU2xvdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9j
b2RlLnN0YWNrU2xvdHMoKVtyZW1hcChzbG90LT5pbmRleCgpKV07CisgICAgfQorCisgICAgYm9v
bCBpc1JlbWFwcGVkU2xvdEluZGV4KHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tzbG90SW5kZXhdICE9IHNs
b3RJbmRleDsKICAgICB9OwotICAgIAotICAgIGF1dG8gYWRkRWRnZSA9IFsmXSAoU3RhY2tTbG90
KiBhLCBTdGFja1Nsb3QqIGIpIHsKLSAgICAgICAgaW50ZXJmZXJlbmNlW2FdLmFkZChiKTsKLSAg
ICAgICAgaW50ZXJmZXJlbmNlW2JdLmFkZChhKTsKLSAgICB9OwotICAgIAotICAgIFZlY3RvcjxD
b2FsZXNjYWJsZU1vdmU+IGNvYWxlc2NhYmxlTW92ZXM7Ci0KLSAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewotICAgICAgICBTdGFja1Nsb3RMaXZlbmVzczo6TG9jYWxDYWxjIGxv
Y2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwotCi0gICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZd
ICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkp
LCAiXG4iKTsKLQotICAgICAgICAgICAgSW5zdCogcHJldkluc3QgPSBibG9jay0+Z2V0KGluc3RJ
bmRleCk7Ci0gICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4
ICsgMSk7Ci0gICAgICAgICAgICBpZiAocHJldkluc3QgJiYgaXNDb2FsZXNjYWJsZU1vdmUoKnBy
ZXZJbnN0KSkgewotICAgICAgICAgICAgICAgIENvYWxlc2NhYmxlTW92ZSBtb3ZlKHByZXZJbnN0
LT5hcmdzWzBdLnN0YWNrU2xvdCgpLCBwcmV2SW5zdC0+YXJnc1sxXS5zdGFja1Nsb3QoKSwgYmxv
Y2stPmZyZXF1ZW5jeSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb2Fs
ZXNjYWJsZU1vdmVzLmFwcGVuZChtb3ZlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAob3RoZXJTbG90ICE9IG1vdmUuc3JjKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkRWRnZShtb3ZlLmRzdCwgb3RoZXJTbG90KTsKKworICAgIENvZGUmIG1f
Y29kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcmVtYXBwZWRTdGFja1Nsb3RJbmRpY2VzOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmZXJlbmNlR3JhcGg+CitjbGFzcyBHcmFwaENv
bG9yaW5nU3RhY2tBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgU3RhY2tBbGxvY2F0b3JCYXNlIHsK
KyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBJbnRlcmZlcmVuY2VHcmFwaDo6SW5kZXhU
eXBlOworcHVibGljOgorICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcihDb2RlJiBjb2Rl
KQorICAgICAgICA6IFN0YWNrQWxsb2NhdG9yQmFzZShjb2RlKQorICAgICAgICAsIG1faW50ZXJm
ZXJlbmNlKCkKKyAgICAgICAgLCBtX2NvYWxlc2NhYmxlTW92ZXMoKQorICAgIHsKKyAgICAgICAg
bV9pbnRlcmZlcmVuY2Uuc2V0TWF4SW5kZXgobV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwor
ICAgIH0KKworICAgIHZvaWQgcnVuKGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgYXNzaWduZWRF
c2NhcGVkU3RhY2tTbG90cykKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVu
ZXNzKG1fY29kZSk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkg
eworICAgICAgICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2
ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKHVuc2ln
bmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludGVyZmVyaW5nOiAiLCBXVEY6OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2ZSgp
KSwgIlxuIik7CisKKyAgICAgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJsb2NrLT5nZXQo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQo
aW5zdEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZJbnN0ICYmIGlzQ29hbGVz
Y2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29hbGVzY2FibGVN
b3ZlIG1vdmUocHJldkluc3QtPmFyZ3NbMF0uc3RhY2tTbG90KCktPmluZGV4KCksIHByZXZJbnN0
LT5hcmdzWzFdLnN0YWNrU2xvdCgpLT5pbmRleCgpLCBibG9jay0+ZnJlcXVlbmN5KCkpOworCisg
ICAgICAgICAgICAgICAgICAgIG1fY29hbGVzY2FibGVNb3Zlcy5hcHBlbmQobW92ZSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5s
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG90aGVyU2xvdEluZGV4
ID0gb3RoZXJTbG90LT5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVy
U2xvdEluZGV4ICE9IG1vdmUuc3JjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVk
Z2UobW92ZS5kc3QsIG90aGVyU2xvdEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHByZXZJbnN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJldkluc3QgPSBudWxscHRyOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxBcmc+KAotICAgICAg
ICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
U3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2ZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkRWRnZShzbG90LCBvdGhlclNsb3QpOwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNp
emUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5
R3JhcGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwotCi0gICAgICAgICAg
ICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3Jl
IGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUKLSAgICAgICAgICAgIC8vIGRlZnMgYW5k
IHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQgbm93LiBX
ZSBvbmx5IGRvIHRoYXQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtp
bmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgotICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgaWYgKCFpbnN0Lmhh
c05vbkFyZ0VmZmVjdHMoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFy
Zz4oCisgICAgICAgICAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNT
dGFjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xv
dEtpbmQ6OlNwaWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2lu
ZDo6U3BpbGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxj
LmlzTGl2ZShzbG90KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xv
dCA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShzbG90LCBvdGhlclNsb3QpOwogICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5z
aXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0
YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOworCisg
ICAgICAgICAgICAgICAgLy8gS2lsbCBkZWFkIHN0b3Jlcy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5
IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZiBpdCBoYXMgb25seSBsYXRlCisgICAgICAgICAg
ICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUg
ZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBo
ZXJlLgorICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2so
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFy
Zy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2lu
ZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShzbG90KSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4
ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaW50ZXJmZXJlKGluc3RJbmRleCk7Ci0gICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShp
bnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJlKC0xKTsKKworICAgICAgICAgICAgYmxv
Y2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChjb25z
dCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEFpckFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6cmVwb3J0TGFyZ2VNZW1vcnlVc2VzICYm
IG1faW50ZXJmZXJlbmNlLm1lbW9yeVVzZSgpID4gMTAyNCkgeworICAgICAgICAgICAgZGF0YUxv
ZygiR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yIHN0YWNrU2xvdHMsIGludGVyZmVyZW5jZUdy
YXBoKGtCKSwgY29hbGVzY2FibGUgbW92ZXMoa0IpOiAiLCBtX2NvZGUuc3RhY2tTbG90cygpLnNp
emUoKSwgIiA6ICIpOworICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2UuZHVtcE1lbW9yeVVzZUlu
S0IoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiwgIiwgKG1fY29hbGVzY2FibGVNb3Zlcy5zaXpl
KCkgKiBzaXplb2YoQ29hbGVzY2FibGVNb3ZlKSkgLyAxMDI0KTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigpOwogICAgICAgICB9Ci0gICAgICAgIGludGVyZmVyZSgtMSk7Ci0gICAgICAgIAotICAg
ICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgIFsmXSAo
Y29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0
OworCisgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0
YWNrU2xvdHMoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAi
LCBwb2ludGVyRHVtcChzbG90KSwgIjogIik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBzbG90SW5kZXggOiBtX2ludGVyZmVyZW5jZVtzbG90LT5pbmRleCgpXSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhwb2ludGVyRHVtcChtX2NvZGUuc3RhY2tTbG90cygpW3Nsb3RJbmRl
eF0pKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gTm93IHRyeSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgorICAg
ICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX2NvYWxlc2NhYmxlTW92ZXMuYmVnaW4oKSwg
bV9jb2FsZXNjYWJsZU1vdmVzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChDb2FsZXNjYWJsZU1v
dmUmIGEsIENvYWxlc2NhYmxlTW92ZSYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7CiAgICAgICAgICAgICB9KTsKLSAgICB9CiAK
LSAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3Nl
KSB7Ci0gICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1bXAoc2xvdCks
ICI6ICIsIHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vbc2xvdF0pLCAiXG4iKTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gTm93IHRyeSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgotICAgIHN0ZDo6
c29ydCgKLSAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5iZWdpbigpLCBjb2FsZXNjYWJsZU1vdmVz
LmVuZCgpLAotICAgICAgICBbJl0gKENvYWxlc2NhYmxlTW92ZSYgYSwgQ29hbGVzY2FibGVNb3Zl
JiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVl
bmN5OwotICAgICAgICB9KTsKLSAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Ns
b3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKLSAgICBh
dXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewotICAgICAg
ICBpZiAoIXNsb3QpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZm9yICg7
OykgewotICAgICAgICAgICAgU3RhY2tTbG90KiByZW1hcHBlZFNsb3QgPSByZW1hcHBlZFN0YWNr
U2xvdHNbc2xvdF07Ci0gICAgICAgICAgICBpZiAoIXJlbWFwcGVkU2xvdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2xvdDsKLSAgICAgICAgICAgIHNsb3QgPSByZW1hcHBlZFNsb3Q7CisgICAg
ICAgIGZvciAoY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBtb3ZlIDogbV9jb2FsZXNjYWJsZU1vdmVz
KSB7CisgICAgICAgICAgICBJbmRleFR5cGUgc2xvdFRvS2lsbCA9IHJlbWFwKG1vdmUuc3JjKTsK
KyAgICAgICAgICAgIEluZGV4VHlwZSBzbG90VG9LZWVwID0gcmVtYXAobW92ZS5kc3QpOworICAg
ICAgICAgICAgaWYgKHNsb3RUb0tpbGwgPT0gc2xvdFRvS2VlcCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChtX2ludGVyZmVyZW5jZS5jb250YWlucyhzbG90VG9L
aWxsLCBzbG90VG9LZWVwKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xvdFRvS2lsbF0gPSBzbG90VG9LZWVwOwor
CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBpbnRlcmZlcmluZ1Nsb3QgOiBtX2ludGVyZmVy
ZW5jZVtzbG90VG9LaWxsXSkKKyAgICAgICAgICAgICAgICBhZGRFZGdlKGludGVyZmVyaW5nU2xv
dCwgc2xvdFRvS2VlcCk7CisgICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5tYXlDbGVhcihzbG90
VG9LaWxsKTsKICAgICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgZm9yIChDb2FsZXNjYWJsZU1v
dmUmIG1vdmUgOiBjb2FsZXNjYWJsZU1vdmVzKSB7Ci0gICAgICAgIG1vdmUuc3JjID0gcmVtYXAo
bW92ZS5zcmMpOwotICAgICAgICBtb3ZlLmRzdCA9IHJlbWFwKG1vdmUuZHN0KTsKLSAgICAgICAg
aWYgKG1vdmUuc3JjID09IG1vdmUuZHN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChpbnRlcmZlcmVuY2VbbW92ZS5zcmNdLmNvbnRhaW5zKG1vdmUuZHN0KSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgU3RhY2tTbG90KiBzbG90VG9LaWxsID0g
bW92ZS5zcmM7Ci0gICAgICAgIFN0YWNrU2xvdCogc2xvdFRvS2VlcCA9IG1vdmUuZHN0OwotICAg
ICAgICAKLSAgICAgICAgcmVtYXBwZWRTdGFja1Nsb3RzW3Nsb3RUb0tpbGxdID0gc2xvdFRvS2Vl
cDsKLSAgICAgICAgZm9yIChTdGFja1Nsb3QqIGludGVyZmVyaW5nU2xvdCA6IGludGVyZmVyZW5j
ZVtzbG90VG9LaWxsXSkgewotICAgICAgICAgICAgaWYgKGludGVyZmVyaW5nU2xvdCA9PSBzbG90
VG9LaWxsKQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5p
c1N0YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFw
U3RhY2tTbG90KGFyZy5zdGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChpc1VzZWxlc3NNb3ZlKGluc3QpKQorICAgICAgICAg
ICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlz
IGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAgICAgLy8gU3RhY2tT
bG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0
IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVy
IFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBvdGhlclNsb3RzID0gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90czsKKyAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgICAg
ICBpZiAoaXNSZW1hcHBlZFNsb3RJbmRleChzbG90LT5pbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW50ZXJmZXJpbmdTbG90
XS5yZW1vdmUoc2xvdFRvS2lsbCk7Ci0gICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW50ZXJmZXJp
bmdTbG90XS5hZGQoc2xvdFRvS2VlcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90
aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3RoZXJTbG90SW5kZXggOiBtX2ludGVyZmVyZW5jZVtzbG90
LT5pbmRleCgpXSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbWFwcGVkU2xvdEluZGV4KG90
aGVyU2xvdEluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBvdGhlclNsb3QgPSBtX2NvZGUuc3RhY2tTbG90cygpW290aGVyU2xv
dEluZGV4XTsKKyAgICAgICAgICAgICAgICBvdGhlclNsb3RzLmFwcGVuZChvdGhlclNsb3QpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CiAg
ICAgICAgIH0KLSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tlZXBdLmFkZChpbnRlcmZlcmVu
Y2Vbc2xvdFRvS2lsbF0uYmVnaW4oKSwgaW50ZXJmZXJlbmNlW3Nsb3RUb0tpbGxdLmVuZCgpKTsK
LSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tpbGxdLmNsZWFyKCk7CiAgICAgfQotICAgIAot
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykg
ewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwKGFyZy5zdGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNVc2VsZXNzTW92ZShpbnN0KSkKLSAg
ICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBDb2Fs
ZXNjYWJsZU1vdmUgeworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoSW5kZXhUeXBlIHNyYywgSW5kZXhUeXBl
IGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICAgICAgICAgIDogc3JjKHNyYykKKyAgICAgICAg
ICAgICwgZHN0KGRzdCkKKyAgICAgICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvYWxlc2Nh
YmxlTW92ZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzcmMg
PT0gb3RoZXIuc3JjCisgICAgICAgICAgICAgICAgJiYgZHN0ID09IG90aGVyLmRzdAorICAgICAg
ICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNjYWJsZU1vdmUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQucHJpbnQoc3JjLCAiLT4iLCBkc3QsICIoIiwgZnJlcXVlbmN5
LCAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgSW5kZXhUeXBlIHNyYyB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgSW5kZXhUeXBlIGRzdCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgZmxvYXQgZnJl
cXVlbmN5IHsgMC4wIH07CisgICAgfTsKKworICAgIHZvaWQgYWRkRWRnZShJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodSA9PSB2KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQodSwgdik7CiAgICAgfQotICAgIAotICAg
IC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdv
cml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCi0gICAgLy8gU3RhY2tTbG90IHdlIGp1
c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8g
d2hpbGUgZW5zdXJpbmcgbm8KLSAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0
aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90
cyA9IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CisKKyAgICB2b2lkIGFkZEVkZ2UoU3RhY2tT
bG90KiB1LCBTdGFja1Nsb3QqIHYpCisgICAgeworICAgICAgICBhZGRFZGdlKHUtPmluZGV4KCks
IHYtPmluZGV4KCkpOworICAgIH0KKworICAgIEludGVyZmVyZW5jZUdyYXBoIG1faW50ZXJmZXJl
bmNlOworICAgIFZlY3RvcjxDb2FsZXNjYWJsZU1vdmU+IG1fY29hbGVzY2FibGVNb3ZlczsKK307
CisKKy8vIFdlIHRyeSB0byBhdm9pZCBjb21wdXRpbmcgdGhlIGxpdmVuZXNzIGluZm9ybWF0aW9u
IGlmIHRoZXJlIGlzIG5vIHNwaWxsIHNsb3QgdG8gYWxsb2NhdGUKK2Jvb2wgdHJ5VHJpdmlhbFN0
YWNrQWxsb2NhdGlvbihDb2RlJiBjb2RlKQorewogICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHJlbWFwcGVkU3RhY2tTbG90c1tzbG90
XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QtPm9m
ZnNldEZyb21GUCgpKSB7Ci0gICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNl
dC4KKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgICAgICBI
YXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3Rd
OwotICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNp
emUoKSk7Ci0gICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xv
dHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCBu
ZXh0SW5kZXggPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNpemUoKTsKLSAgICAgICAgZm9y
IChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCi0gICAgICAgICAgICBv
dGhlclNsb3RzW25leHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
IAotICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7Cit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCit7
CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENv
bG9yaW5nIik7CisKKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzID0KKyAgICAgICAgYWxsb2NhdGVB
bmRHZXRFc2NhcGVkU3RhY2tTbG90c1dpdGhvdXRDaGFuZ2luZ0ZyYW1lU2l6ZShjb2RlKTsKKwor
ICAgIGlmICghdHJ5VHJpdmlhbFN0YWNrQWxsb2NhdGlvbihjb2RlKSkgeworICAgICAgICBpZiAo
Y29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpIDwgV1RGOjptYXhTaXplRm9yU21hbGxJbnRlcmZlcmVu
Y2VHcmFwaCkgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yPFdURjo6
U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IoY29kZSk7CisgICAgICAg
ICAgICBhbGxvY2F0b3IucnVuKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpOworICAgICAgICB9
IGVsc2UgaWYgKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSA8IHN0ZDo6bnVtZXJpY19saW1pdHM8
dWludDE2X3Q+OjptYXgoKSkgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2Nh
dG9yPFdURjo6TGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPiBhbGxvY2F0b3IoY29kZSk7
CisgICAgICAgICAgICBhbGxvY2F0b3IucnVuKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9y
PFdURjo6SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihjb2RlKTsKKyAg
ICAgICAgICAgIGFsbG9jYXRvci5ydW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyk7CisgICAg
ICAgIH0KICAgICB9CiAKICAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhjb2Rl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VM
b2cKaW5kZXggOTc5N2Q1ZWE4OTYzLi5kYmM5NTM3YTUyZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEwIEBA
CisyMDIxLTA1LTI2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyBzaG91bGQgdXNlIHRoZSBvcHRp
bWl6ZWQgaW50ZXJmZXJlbmNlIGdyYXBocyBmcm9tIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMjYyNTgKKworICAgICAgICBJIG1vdmVkIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGhzIGRhdGFz
dHJ1Y3R1cmVzIGZyb20gQWlyQWxsb2NhdGVSZWdpc3RlcnNCeUdyYXBoQ29sb3JpbmcgdG8gdGhl
aXIgb3duIHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oIGZpbGUuCisgICAgICAgIFRoZXJlIGFyZSB0
aHJlZSBvZiB0aGVtOgorICAgICAgICAtIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGgsIGJlc3QgZm9y
IG4gPCA0MDAKKyAgICAgICAgLSBMYXJnZUludGVyZmVyZW5jZUdyYXBoLCBmb3IgbiA8IDIqKjE2
CisgICAgICAgIC0gSHVnZUludGVyZmVyZW5jZUdyYXBoLCBmb3IgbiB1cCB0byAyKiozMgorICAg
ICAgICBJIGFsc28gYWRkZWQgIkl0ZXJhYmxlIiB2ZXJzaW9ucyBvZiB0aGVtLCB0aGF0IGhhdmUg
YW4gb3BlcmF0b3JbXSBtZXRob2Qgd2hvc2UgcmVzdWx0IHlvdSBjYW4gaXRlcmF0ZSBvbiB0byBn
ZXQgYWxsIHRoZSBpbmRpY2VzIHdoaWNoIGludGVyZmVyZSB3aXRoIGEgZ2l2ZW4gaW5kZXguCisg
ICAgICAgIFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCBpcyB0aGUgc2FtZSBhcyB0aGUg
bm9uLWl0ZXJhYmxlIHZlcnNpb24sIGJ1dCB0aGUgTGFyZ2UgYW5kIEh1Z2UgdmVyc2lvbnMgYXJl
IGEgYml0IHNsb3dlciB0aGFuIHRoZWlyIGNvdW50ZXJwYXJ0cyBhbmQgdXNlIDJ4IG1lbW9yeS4K
KworICAgICAgICBBbGwgb2YgdGhlc2Ugd2VyZSB0ZXN0ZWQgYnkgcnVubmluZyBKZXRTdHJlYW0y
IHdpdGggdGhlIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSCBzZXQgdG8gMS4KKyAg
ICAgICAgVGhpcyBmbGFnIG1ha2VzIHRoZSBvcHRpbWl6ZWQgZGF0YXN0cnVjdHVyZXMgcnVuIGlu
IHBhcmFsbGVsIHdpdGggYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIGFuZCB0aGVpciByZXN1
bHRzIGFyZSBjaGVja2VkIGZvciBlcXVhbGl0eSBvbiBldmVyeSBtZXRob2QgY2FsbC4KKyAgICAg
ICAgVGhlcmUgaXMgb25lIHNtYWxsIGRpZmZlcmVuY2UgYWxsb3dlZDogaXRlcmF0aW9uIGlzIG5v
dCBndWFyYW50ZWVkIHRvIGdvIHRocm91Z2ggZWxlbWVudHMgaW4gdGhlIHNhbWUgb3JkZXIuCisK
KyAgICAgICAgSSBhbHNvIGFkZGVkIGEgY2xlYXIoKSBtZXRob2QgdG8gTGlrZWx5RGVuc2VVbnNp
Z25lZEludGVnZXJTZXQsIGFuZCBhZGRlZCB0aGUgTm90TnVsbCBmbGFnIHRvIGl0cyB2YXJpb3Vz
IHVzZXMgb2YgcGxhY2VtZW50IG5ldy4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYv
SGFzaFNldC5oOgorICAgICAgICAoV1RGOjpXPjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAg
KiB3dGYvSW50ZXJmZXJlbmNlR3JhcGguaDogQWRkZWQuCisgICAgICAgIChXVEY6OkludGVyZmVy
ZW5jZUJpdFZlY3Rvcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRW
ZWN0b3I6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVu
Y2VCaXRWZWN0b3I6OmFkZCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Om1heUNsZWFyKToK
KyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpzZXRNYXhJbmRleCk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6
OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVy
ZmVyZW5jZUJpdFZlY3Rvcjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJm
ZXJlbmNlQml0VmVjdG9yOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6
OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToK
KyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6
SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0gY29uc3Qp
OgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Okl0ZXJhYmxlOjpiZWdpbiBj
b25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6SXRlcmFibGU6OmVu
ZCBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6b3BlcmF0b3Jb
XSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6aW5kZXggY29u
c3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmNvbnRhaW5zKToKKyAgICAg
ICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjphZGRBbmRSZXR1cm5Jc05ld0VudHJ5KToKKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjphZGQpOgorICAgICAgICAoV1RGOjpJbnRl
cmZlcmVuY2VWZWN0b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9y
OjptYXlDbGVhcik6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6c2V0TWF4SW5k
ZXgpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmZvckVhY2gpOgorICAgICAg
ICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OnNpemUgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnRlcmZlcmVuY2VWZWN0b3I6Om1lbW9yeVVzZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVy
ZmVyZW5jZVZlY3Rvcjo6ZHVtcE1lbW9yeVVzZUluS0IgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnRlcmZlcmVuY2VWZWN0b3I6Okl0ZXJhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6
OkludGVyZmVyZW5jZVZlY3Rvcjo6SXRlcmFibGU6OmVuZCBjb25zdCk6CisgICAgICAgIChXVEY6
OkludGVyZmVyZW5jZVZlY3Rvcjo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChXVEY6OlVu
ZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RG
OjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OmFkZEFuZFJldHVybklzTmV3RW50
cnkpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OmFk
ZCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6Y2xl
YXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6Om1h
eUNsZWFyKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVy
OjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5n
QWRhcHRlcjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0
aW5nQWRhcHRlcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1
cGxpY2F0aW5nQWRhcHRlcjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJl
Y3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6Cisg
ICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6b3BlcmF0b3Jb
XSBjb25zdCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6Y29u
dGFpbnMpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6OmFkZEFu
ZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFk
YXB0ZXI6OmFkZCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6Om1heUNs
ZWFyKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpzZXRNYXhJ
bmRleCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6Zm9yRWFj
aCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6bWVtb3J5VXNl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpkdW1w
TWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6
OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6YWRkQW5kUmV0
dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmFkZCk6
CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdU
Rjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6c2V0TWF4SW5kZXgpOgorICAgICAgICAoV1RGOjpJbnRl
cmZlcmVuY2VIYXNoU2V0Ojpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFz
aFNldDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6Om1l
bW9yeVVzZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmR1bXBN
ZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50ZXJmZXJl
bmNlR3JhcGg6OmNvbnRhaW5zKToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50ZXJmZXJl
bmNlR3JhcGg6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJbnN0cnVt
ZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6YWRkKToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVk
SW50ZXJmZXJlbmNlR3JhcGg6OmNsZWFyKToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50
ZXJmZXJlbmNlR3JhcGg6Om1heUNsZWFyKToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50
ZXJmZXJlbmNlR3JhcGg6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVk
SW50ZXJmZXJlbmNlR3JhcGg6OmZvckVhY2gpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJ
bnRlcmZlcmVuY2VHcmFwaDo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRl
ZEludGVyZmVyZW5jZUdyYXBoOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnN0
cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6ZHVtcE1lbW9yeVVzZUluS0IgY29uc3QpOgorICAg
ICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOjpJdGVyYWJs
ZTo6SXRlcmFibGUpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVy
ZW5jZUdyYXBoOjpJdGVyYWJsZTo6YmVnaW4gY29uc3QpOgorICAgICAgICAoV1RGOjpJbnN0cnVt
ZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOjpJdGVyYWJsZTo6ZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDo6b3BlcmF0
b3JbXSBjb25zdCk6CisgICAgICAgICogd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
Lmg6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0OjpMaWtlbHlE
ZW5zZVVuc2lnbmVkSW50ZWdlclNldCk6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWdu
ZWRJbnRlZ2VyU2V0OjpjbGVhcik6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJ
bnRlZ2VyU2V0OjphZGQpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdl
clNldDo6ZXN0aW1hdGVIYXNoU2V0U2l6ZSk6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5z
aWduZWRJbnRlZ2VyU2V0Ojp0cmFuc2l0aW9uVG9IYXNoU2V0KToKKyAgICAgICAgKFdURjo6TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OnRyYW5zaXRpb25Ub0JpdFZlY3Rvcik6CisKIDIw
MjEtMDUtMjYgIENhbWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAogICAgICAg
ICBQcmV2ZW50IHNiaXggZ2x5cGhzIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEdQVSBwcm9j
ZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzODI0MWJi
NjA5ODguLmZjYzg4MmIwN2Y4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJMzEzRURFQzk3NzhFNDlDOUJFQTkxQ0ZDIC8q
IFN0YWNrVHJhY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3Rh
Y2tUcmFjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzN0IyRDY4MjY1NDZF
QUEwMERERkQzRCAvKiBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMzN0IyRDY5MjY1NDZFQUEwMERERkQzRCAvKiBMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMaWtlbHlEZW5zZVVuc2lnbmVk
SW50ZWdlclNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzM0ZENDgxMTI2NUNC
MzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJm
ZXJlbmNlR3JhcGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzdDN0NDMjkxRUE0
MEE3MzAwN0JEOTU2IC8qIFdlYWtMaW5raW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYWtMaW5raW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM4MjAy
OUUyNDZDODRCMDA5OUZENjc2NCAvKiBBU0NJSUxpdGVyYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQVNDSUlMaXRlcmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTM5MUJENkJBNEQxNjRGRDI5NEY5QTkzRCAvKiBTdGRNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU3RkTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xMDc5LDYgKzEwODAsNyBAQAogCQkJCTMxMzdFMUQ3REJEODRBQzM4RkFFNEQzNCAvKiBJbmRl
eFNldC5oICovLAogCQkJCTI2ODRENDM1MUMwMDBENDAwMDgxRDY2MyAvKiBJbmRleFNwYXJzZVNl
dC5oICovLAogCQkJCUE4QTQ3MkJDMTUxQTgyNUEwMDQxMjNGRiAvKiBJbmxpbmVBU00uaCAqLywK
KwkJCQkzM0ZENDgxMTI2NUNCMzgwMDBBQkU0RjQgLyogSW50ZXJmZXJlbmNlR3JhcGguaCAqLywK
IAkJCQlBNzBEQTA4MjE3OTlGMDREMDA1MjlBOUIgLyogSW5zZXJ0aW9uLmggKi8sCiAJCQkJNTE4
MkMyMkMxRjJCQzdFNjAwNTlCQTdDIC8qIEluc3RhbmNlQ291bnRlZC5oICovLAogCQkJCTBGN0VC
ODVCMUZBOEZGNDEwMEYxQUJDQiAvKiBJc29NYWxsb2MuaCAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQK
aW5kZXggMDEwZDllODBkMzc4Li5kZDBlODY4MmI5YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CkBA
IC0xMDAsNiArMTAwLDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwogICAgIElubGluZUFTTS5o
CiAgICAgSW5zZXJ0aW9uLmgKICAgICBJbnN0YW5jZUNvdW50ZWQuaAorICAgIEludGVyZmVyZW5j
ZUdyYXBoLmgKICAgICBJc29NYWxsb2MuaAogICAgIElzb01hbGxvY0lubGluZXMuaAogICAgIEl0
ZXJhdG9yQWRhcHRvcnMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFNldC5oIGIv
U291cmNlL1dURi93dGYvSGFzaFNldC5oCmluZGV4IGE0MDJjZTI3Mzc1YS4uMmEyNzI4MDYwZjVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKKysrIGIvU291cmNlL1dURi93
dGYvSGFzaFNldC5oCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdDsKICAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0OworICAgIHVuc2lnbmVk
IG1lbW9yeVVzZSgpIGNvbnN0OwogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwogCiAgICAgdm9p
ZCByZXNlcnZlSW5pdGlhbENhcGFjaXR5KHVuc2lnbmVkIGtleUNvdW50KSB7IG1faW1wbC5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KGtleUNvdW50KTsgfQpAQCAtMjAyLDYgKzIwMywxMiBAQCBpbmxp
bmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWLCBXPjo6Y2FwYWNpdHkoKSBjb25zdAogICAgIHJl
dHVybiBtX2ltcGwuY2FwYWNpdHkoKTsgCiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVu
YW1lIFUsIHR5cGVuYW1lIFYsIHR5cGVuYW1lIFc+CitpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxU
LCBVLCBWLCBXPjo6bWVtb3J5VXNlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2FwYWNpdHkoKSAq
IHNpemVvZihUKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgViwgVz46OmlzRW1w
dHkoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSW50ZXJmZXJlbmNlR3Jh
cGguaCBiL1NvdXJjZS9XVEYvd3RmL0ludGVyZmVyZW5jZUdyYXBoLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43MTc1ZjgzMGU0YjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oCkBAIC0wLDAgKzEsNTIyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgZmlsZSBvZmZlcnMgbXVs
dGlwbGUgaW1wbGVtZW50YXRpb25zIG9mIGEgc2ltcGxlIGludGVyZmVyZW5jZSBncmFwaCwgd2l0
aCB2YXJ5aW5nIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4KKy8vIENvbmNlcHR1YWxseSB0
aGV5IGFyZSBqdXN0IHNldHMgb2YgcGFpcnMgb2YgaW50ZWdlcnMKKy8vIEFsbCBvZiB0aGVtIGhh
dmUgdGhlIHNhbWUgaW50ZXJmYWNlOgorLy8gICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKKy8vICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKKy8vICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
Ly8gICB2b2lkIGNsZWFyKCkKKy8vICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUgdSkKKy8vICAg
dm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorLy8gICB2b2lkIGZvckVhY2goY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKy8vICAgdW5zaWduZWQgc2l6ZSgpCisvLyAgIHVuc2lnbmVkIG1lbW9y
eVVzZSgpCisvLyAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKQorLy8gVGhyZWUgdXNlZnVsIHR5
cGUgYWxpYXNlcyBhcmUgZGVmaW5lZDoKKy8vICAgU21hbGxJbnRlcmZlcmVuY2VHcmFwaCwgd2hp
Y2ggaXMgdGhlIGZhc3Rlc3QgYnV0IGhhcyBxdWFkcmF0aWMgbWVtb3J5IHVzZSBpbiB0aGUgbWF4
aW11bSB2ZXJ0ZXggaW5kZXggKGJlc3QgZm9yIG4gPCA0MDAgYXMgaXQgaXMgYWxyZWFkeSAyMGtC
IGJ5IHRoYXQgcG9pbnQpCisvLyAgIExhcmdlSW50ZXJmZXJlbmNlR3JhcGgsIGFzIGxvbmcgYXMg
dGhlIGluZGljZXMgZml0IGluIGEgdWludDE2X3QKKy8vICAgSHVnZUludGVyZmVyZW5jZUdyYXBo
IG90aGVyd2lzZQorLy8gSWYgeW91IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBpbmRpY2VzIHRo
YXQgaW50ZXJmZXJlIHdpdGggYSBnaXZlbiBpbmRleCwgeW91IG11c3QgdXNlIHRoZSBmb2xsb3dp
bmc6CisvLyAgIFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gICBMYXJnZUl0ZXJh
YmxlSW50ZXJmZXJlbmNlR3JhcGgKKy8vICAgSHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgK
Ky8vIFRoZSBsYXJnZSBhbmQgaHVnZSB2ZXJzaW9ucyBhcmUgMnggdGhlIG1lbW9yeSBvZiB0aGVp
ciBub24taXRlcmFibGUgdmVyc2lvbnMsIGJ1dCBvZmZlciBhbiBhZGRpdGlvbmFsIG9wZXJhdG9y
W10gbWV0aG9kLCB3aGljaCByZXR1cm5zIGFuIGl0ZXJhYmxlIG9iamVjdAorCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK2NsYXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7CitwdWJsaWM6CisgICAg
dXNpbmcgSW5kZXhUeXBlID0gVDsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRl
eFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX2JpdFZlY3Rvci5xdWlja0dldChpbmRl
eCh1LCB2KSk7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4
VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgYWxyZWFkeUluID0gbV9i
aXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodSwgdikpOworICAgICAgICBtX3NpemUgKz0gIWFscmVh
ZHlJbjsKKyAgICAgICAgcmV0dXJuICFhbHJlYWR5SW47CisgICAgfQorCisgICAgdm9pZCBhZGQo
SW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgKHZvaWQpIGFkZEFuZFJl
dHVybklzTmV3RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBtX2JpdFZlY3Rvci5jbGVhckFsbCgpOworICAgICAgICBtX3NpemUgPSAwOworICAg
IH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlKSB7IH0KKworICAgIHZvaWQgc2V0TWF4
SW5kZXgodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmlj
X2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fbnVtRWxlbWVudHMgPSBuOwor
ICAgICAgICBtX2JpdFZlY3Rvci5lbnN1cmVTaXplKG4qbik7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtRWxl
bWVudHM7ICsraSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA9IGkgKyAxOyBqIDwg
bV9udW1FbGVtZW50czsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYml0VmVjdG9yLnF1
aWNrR2V0KGluZGV4KGksIGopKSkKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGog
fSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisKKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBj
b25zdCB7IHJldHVybiAobV9iaXRWZWN0b3Iuc2l6ZSgpICsgNykgPj4gMzsgfQorCisgICAgdm9p
ZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxvZyhtZW1vcnlVc2UoKSAvIDEwMjQp
OyB9CisKKyAgICBzdHJ1Y3QgSXRlcmFibGUgeworICAgICAgICBzdHJ1Y3QgaXRlcmF0b3Igewor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faW5kZXggPSBtX2l0ZXJhYmxlLm1fYml0VmVjdG9yLmZpbmRCaXQobV9pbmRl
eCArIDEsIHRydWUpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgSW5kZXhUeXBlIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEluZGV4VHlwZT4obV9pbmRl
eCAtIG1faXRlcmFibGUubV9zdGFydGluZ0luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW5ub3QganVzdCB1c2UgYSBub3JtYWwg
Y29tcGFyaXNvbiBiZXlvbmQgbV9pdGVyYWJsZS5tX2VuZCwgYmVjYXVzZSB0aGUgZmluZEJpdCBp
biBvcGVyYXRvcisrIG1heSBzZW5kIHVzIHByZXR0eSBtdWNoIGFueXdoZXJlCisgICAgICAgICAg
ICAgICAgLy8gV29yc2U6IGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgdXNlciBvZiB0aGlzIGl0ZXJh
dG9yIHRvIGFkZCBlbGVtZW50cyB0byB0aGUgaW50ZXJmZXJlbmNlIGdyYXBoIGJldHdlZW4gY2Fs
bHMgdG8gKysKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHdvbid0IGludmFsaWRhdGUgdXMvY2F1
c2UgcHJvYmxlbXMgZGlyZWN0bHksIGFzIHRoZSB1c2VyIHdvbid0IGFmZmVjdCB0aGUgc2xpY2Ug
b2YgdGhlIGJpdCB2ZWN0b3IgdGhhdCB3ZSdyZSBpdGVyYXRpbmcgb3Zlci4KKyAgICAgICAgICAg
ICAgICAvLyBCdXQgdGhleSBtYXkgd2VsbCBzZXQgYml0cyBiZXlvbmQgaXQuIFNvIHdlIGNhbm5v
dCBjb21wdXRlIGFuICJpZGVhbCIgZW5kIGl0ZXJhdG9yIChieSBsb29raW5nIGZvciB0aGUgZmly
c3QgYml0IHNldCBhZnRlciB0aGUgc2xpY2Ugd2UgY2FyZSBhYm91dCkgYWhlYWQgb2YgdGltZS4K
KyAgICAgICAgICAgICAgICAvLyBJbnN0ZWFkIHdlIHNldCBtX2VuZCB0byBpbmRleCh1KzEsIDAp
IChzbyBqdXN0IGFmdGVyIHRoZSBzbGljZSBvZiBpbnRlcmVzdCksIGFuZCB3ZSB1c2UgdGhpcyBz
bGlnaHRseSB3ZWlyZCBjb21wYXJpc29uIG9wZXJhdG9yIHRvIHN0aWxsIHN0b3AgaW4gdGltZSBv
bmNlIHdlIGdvIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpZiAobV9pbmRleCA+PSBtX2l0
ZXJhYmxlLm1fZW5kICYmIG90aGVyLm1faW5kZXggPj0gbV9pdGVyYWJsZS5tX2VuZCkKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNvbnN0IEl0ZXJhYmxlJiBtX2l0ZXJhYmxlOworICAgICAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIHsgKnRoaXMsIG1fYmVnaW4gfTsgfQorICAgICAgICBpdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiB7ICp0aGlzLCBtX2VuZCB9OyB9CisKKyAgICAgICAgY29uc3QgQml0
VmVjdG9yJiBtX2JpdFZlY3RvcjsKKyAgICAgICAgdW5zaWduZWQgbV9zdGFydGluZ0luZGV4Owor
ICAgICAgICB1bnNpZ25lZCBtX2JlZ2luOworICAgICAgICB1bnNpZ25lZCBtX2VuZDsKKyAgICB9
OworCisgICAgSXRlcmFibGUgb3BlcmF0b3JbXShJbmRleFR5cGUgdSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIGJlZ2luID0gbV9iaXRWZWN0b3IuZmluZEJpdChpbmRleCh1LCAwKSwg
dHJ1ZSk7CisgICAgICAgIHVuc2lnbmVkIGVuZCA9IGluZGV4KHUgKyAxLCAwKTsKKyAgICAgICAg
cmV0dXJuIHsgbV9iaXRWZWN0b3IsIGluZGV4KHUsIDApLCBiZWdpbiwgZW5kIH07CisgICAgfQor
Citwcml2YXRlOgorICAgIHVuc2lnbmVkIGluZGV4KEluZGV4VHlwZSBpLCBJbmRleFR5cGUgaikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpICogbV9udW1FbGVtZW50cyArIGo7CisgICAg
fQorCisgICAgQml0VmVjdG9yIG1fYml0VmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07
CisgICAgSW5kZXhUeXBlIG1fbnVtRWxlbWVudHM7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgSVQ+CitjbGFzcyBJbnRlcmZlcmVuY2VWZWN0b3IgeworcHVibGljOgorICAg
IHVzaW5nIEluZGV4VHlwZSA9IElUOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW3VdLmNvbnRhaW5zKHYp
OworICAgIH0KKworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1
XS5hZGQodikuaXNOZXdFbnRyeTsKKyAgICAgICAgbV9zaXplICs9IGlzTmV3RW50cnk7CisgICAg
ICAgIHJldHVybiBpc05ld0VudHJ5OworICAgIH0KKworICAgIHZvaWQgYWRkKEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgICh2b2lkKSBhZGRBbmRSZXR1cm5Jc05ld0Vu
dHJ5KHUsIHYpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92
ZWN0b3IuY2xlYXIoKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICB9CisKKyAgICB2b2lkIG1h
eUNsZWFyKEluZGV4VHlwZSB1KSB7IG1fdmVjdG9yW3VdLmNsZWFyKCk7IH0KKworICAgIHZvaWQg
c2V0TWF4SW5kZXgodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpu
dW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCkgOyArK2kpIHsKKyAgICAgICAgICAgIGZv
ciAoSW5kZXhUeXBlIGogOiBtX3ZlY3RvcltpXSkKKyAgICAgICAgICAgICAgICBmdW5jdG9yKHsg
aSwgaiB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NpemU7IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0CisgICAg
eworICAgICAgICB1bnNpZ25lZCBtZW1vcnkgPSAwOworICAgICAgICBmb3IgKGNvbnN0IFQmIHNl
dCA6IG1fdmVjdG9yKQorICAgICAgICAgICAgbWVtb3J5ICs9IHNldC5tZW1vcnlVc2UoKTsKKyAg
ICAgICAgcmV0dXJuIG1lbW9yeTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktC
KCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworICAgIHN0cnVjdCBJ
dGVyYWJsZSB7CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgVDo6aXRlcmF0b3I7
CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuYmVnaW4oKTsg
fQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NldC5lbmQoKTsgfQor
ICAgICAgICBjb25zdCBUJiBtX3NldDsKKyAgICB9OworCisgICAgSXRlcmFibGUgb3BlcmF0b3Jb
XShJbmRleFR5cGUgdSkgY29uc3QgeyByZXR1cm4geyBtX3ZlY3Rvclt1XSB9OyB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFQ+IG1fdmVjdG9yOworICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRp
bmdBZGFwdGVyIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBUOjpJ
bmRleFR5cGU7CisgICAgdXNpbmcgSXRlcmFibGUgPSB0eXBlbmFtZSBUOjpJdGVyYWJsZTsKKyAg
ICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikgeyByZXR1cm4gbV91bmRl
cmx5aW5nLmNvbnRhaW5zKHUsIHYpOyB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50
cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgYm9vbCBpc05ld0Vu
dHJ5MSA9IG1fdW5kZXJseWluZy5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAg
ICBib29sIGlzTmV3RW50cnkyID0gbV91bmRlcmx5aW5nLmFkZEFuZFJldHVybklzTmV3RW50cnko
diwgdSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeTIsIGlzTmV3RW50cnkxID09
IGlzTmV3RW50cnkyKTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnkxOworICAgIH0KKworICAg
IHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIG1fdW5k
ZXJseWluZy5hZGQodSwgdik7CisgICAgICAgIG1fdW5kZXJseWluZy5hZGQodiwgdSk7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpIHsgbV91bmRlcmx5aW5nLmNsZWFyKCk7IH0KKyAgICB2b2lk
IG1heUNsZWFyKEluZGV4VHlwZSB1KSB7IG1fdW5kZXJseWluZy5tYXlDbGVhcih1KTsgfQorICAg
IHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikgeyBtX3VuZGVybHlpbmcuc2V0TWF4SW5kZXgo
bik7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2go
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikgeyBtX3VuZGVybHlpbmcuZm9yRWFjaChmdW5jdG9yKTsg
fQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmcuc2l6ZSgp
OyB9CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5n
Lm1lbW9yeVVzZSgpOyB9CisgICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgbV91
bmRlcmx5aW5nLmR1bXBNZW1vcnlVc2VJbktCKCk7IH0KKyAgICBJdGVyYWJsZSBvcGVyYXRvcltd
KEluZGV4VHlwZSB1KSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmdbdV07IH0KKworcHJpdmF0
ZToKKyAgICBUIG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoaXMgaXMgZ2VuZXJhbGx5IGJldHRl
ciB0aGFuIHRoZSBEdXBsaWNhdGluZyB2ZXJzaW9uLCB0aGVyZSBhcmUgdHdvIHJlYXNvbnMgbm90
IHRvIHVzZSBpdCB0aG91Z2g6CisvLyAtIEZvciBCaXRWZWN0b3IsIGl0IGhhcyBubyBlZmZlY3Qg
b24gbWVtb3J5IHVzZSwgYW5kIGFkZHMgYSBicmFuY2ggdG8gZXZlcnkgY2FsbCB0byBjb250YWlu
cy9hZGRBbmRSZXR1cm5Jc05ld0VudHJ5CisvLyAtIEl0IG1ha2VzIGl0IGltcG9zc2libGUgdG8g
aXRlcmF0ZSBvdmVyIHRoZSBpbmRpY2VzIHRoYXQgaW50ZXJmZXJlIHdpdGggYSBwYXJ0aWN1bGFy
IGluZGV4LiBUaGlzIGNhbiBiZSByZXF1aXJlZCBmb3Igc29tZSB1c2VzIChzZWUgQWlyQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZykKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBVbmRp
cmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXIgeworcHVibGljOgorICAgIHVzaW5nIEluZGV4VHlwZSA9
IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1LCBJ
bmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGlmICh2IDwgdSkKKyAgICAgICAgICAgIHN0ZDo6
c3dhcCh1LCB2KTsKKyAgICAgICAgcmV0dXJuIG1fdW5kZXJseWluZy5jb250YWlucyh1LCB2KTsK
KyAgICB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpz
d2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nLmFkZEFuZFJldHVybklzTmV3
RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUs
IHYpOworICAgICAgICBtX3VuZGVybHlpbmcuYWRkKHUsIHYpOworICAgIH0KKworICAgIHZvaWQg
Y2xlYXIoKSB7IG1fdW5kZXJseWluZy5jbGVhcigpOyB9CisgICAgdm9pZCBtYXlDbGVhcihJbmRl
eFR5cGUgdSkgeyBtX3VuZGVybHlpbmcubWF5Q2xlYXIodSk7IH0KKyAgICB2b2lkIHNldE1heElu
ZGV4KHVuc2lnbmVkIG4pIHsgbV91bmRlcmx5aW5nLnNldE1heEluZGV4KG4pOyB9CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIHsgbV91bmRlcmx5aW5nLmZvckVhY2goZnVuY3Rvcik7IH0KKyAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nLnNpemUoKTsgfQorICAgIHVuc2ln
bmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJseWluZy5tZW1vcnlVc2UoKTsg
fQorICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IG1fdW5kZXJseWluZy5kdW1w
TWVtb3J5VXNlSW5LQigpOyB9CisKK3ByaXZhdGU6CisgICAgVCBtX3VuZGVybHlpbmc7Cit9Owor
CisvLyBUaGUgYml0IHZlY3RvciBhcHByb2FjaCB1c2VzIG4qbiBiaXRzLCBvciAyMGtCIGZvciBu
ID0gNDAwLgorY29uc3RleHByIHVuc2lnbmVkIG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdy
YXBoID0gNDAwOwordXNpbmcgRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVj
dGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI8SW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90
Pj47Cit1c2luZyBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVs
dFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBEZWZhdWx0TGFyZ2VJbnRlcmZlcmVuY2VH
cmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD4+OwordXNpbmcg
RGVmYXVsdEh1Z2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRl
cjxJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDMy
X3Q+LCB1aW50MzJfdD4+OwordXNpbmcgRGVmYXVsdExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VH
cmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0
b3I8TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD4+Owor
dXNpbmcgRGVmYXVsdEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVk
Z2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90Pj47CisKKy8vIFNldCB0byBvbmUgdG8g
cnVuIGEgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIGluIHBhcmFsbGVsIHdpdGggdGhlIG9wdGlt
aXplZCBkYXRhc3RydWN0dXJlLCB2ZXJpZnlpbmcgdGhhdCB0aGV5IGFncmVlIG9uIGV2ZXJ5IG1l
dGhvZCBjYWxsLgorLy8gQmV3YXJlOiB0aGlzIGlzIG5hdHVyYWxseSBtdWNoIHNsb3dlciBhbmQg
bWVtb3J5IGh1bmdyeQorI2RlZmluZSBURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgg
MAorI2lmICFURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKKwordXNpbmcgU21hbGxJ
bnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRTbWFsbEludGVyZmVyZW5jZUdyYXBoOwordXNpbmcg
TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRMYXJnZUludGVyZmVyZW5jZUdyYXBoOwor
dXNpbmcgSHVnZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdEh1Z2VJbnRlcmZlcmVuY2VHcmFw
aDsKKwordXNpbmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdFNtYWxs
SXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIExhcmdlSXRlcmFibGVJbnRlcmZlcmVu
Y2VHcmFwaCA9IERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBI
dWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IERlZmF1bHRIdWdlSXRlcmFibGVJbnRlcmZl
cmVuY2VHcmFwaDsKKworI2Vsc2UgLy8gVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBI
CisKKy8vIFRoaXMgaXMgYW4gdW5vcHRpbWl6ZWQgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uLCBm
b3IgdXNlIHdpdGggSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGggYmVsb3cKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgorY2xhc3MgSW50ZXJmZXJlbmNlSGFzaFNldCB7CitwdWJsaWM6CisgICAg
dXNpbmcgSW5kZXhUeXBlID0gVDsKKyAgICB1c2luZyBJbnRlcmZlcmVuY2VFZGdlID0gc3RkOjpw
YWlyPEluZGV4VHlwZSwgSW5kZXhUeXBlPjsKKyAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5jb250YWlucyh7IHUs
IHYgfSk7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlw
ZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5hZGQoeyB1LCB2
IH0pLmlzTmV3RW50cnk7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4
VHlwZSB2KQorICAgIHsKKyAgICAgICAgbV9zZXQuYWRkKHsgdSwgdiB9KTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFyKCk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChuLCBuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKGF1dG8gZWRnZSA6IG1f
c2V0KQorICAgICAgICAgICAgZnVuY3RvcihlZGdlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuc2l6ZSgpOyB9CisKKyAgICB1bnNpZ25lZCBtZW1v
cnlVc2UoKSBjb25zdCB7IHJldHVybiBtX3NldC5jYXBhY2l0eSgpICogc2l6ZW9mKEludGVyZmVy
ZW5jZUVkZ2UpOyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRh
TG9nKG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworcHJpdmF0ZToKKyAgICBIYXNoU2V0PEludGVy
ZmVyZW5jZUVkZ2U+IG1fc2V0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1l
IFU+CitjbGFzcyBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCB7CitwdWJsaWM6CisgICAg
dXNpbmcgSW5kZXhUeXBlID0gdHlwZW5hbWUgVDo6SW5kZXhUeXBlOworICAgIHN0YXRpY19hc3Nl
cnQoc3RkOjppc19zYW1lPEluZGV4VHlwZSwgdHlwZW5hbWUgVTo6SW5kZXhUeXBlPjo6dmFsdWUp
OworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAg
ICAgICAgYm9vbCBjb250YWluc0luQSA9IG1fc2V0QS5jb250YWlucyh1LCB2KTsKKyAgICAgICAg
Ym9vbCBjb250YWluc0luQiA9IG1fc2V0Qi5jb250YWlucyh1LCB2KTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY29udGFpbnNJbkEgPT0gY29udGFpbnNJbkIpOworICAgICAgICByZXR1cm4gY29u
dGFpbnNJbkE7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4
VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeUEgPSBt
X3NldEEuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICAgICAgYm9vbCBpc05ld0Vu
dHJ5QiA9IG1fc2V0Qi5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChpc05ld0VudHJ5QSA9PSBpc05ld0VudHJ5Qik7CisgICAgICAgIHJldHVybiBp
c05ld0VudHJ5QTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCisgICAgeworICAgICAgICBtX3NldEEuYWRkKHUsIHYpOworICAgICAgICBtX3NldEIuYWRk
KHUsIHYpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zZXRB
LmNsZWFyKCk7CisgICAgICAgIG1fc2V0Qi5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgbWF5
Q2xlYXIoSW5kZXhUeXBlIHUpCisgICAgeworICAgICAgICBtX3NldEEubWF5Q2xlYXIodSk7Cisg
ICAgICAgIG1fc2V0Qi5tYXlDbGVhcih1KTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1heEluZGV4
KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1p
dHM8SW5kZXhUeXBlPjo6bWF4KCkpOworICAgICAgICBtX3NldEEuc2V0TWF4SW5kZXgobik7Cisg
ICAgICAgIG1fc2V0Qi5zZXRNYXhJbmRleChuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIG1fc2V0QS5mb3JFYWNoKGZ1bmN0b3IpOworICAgIH0KKworICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgc2l6ZUEgPSBtX3Nl
dEEuc2l6ZSgpOworICAgICAgICB1bnNpZ25lZCBzaXplQiA9IG1fc2V0Qi5zaXplKCk7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHNpemVBID09IHNpemVCKTsKKyAgICAgICAgcmV0dXJuIHNpemVB
OworICAgIH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9zZXRBLm1lbW9yeVVzZSgpICsgbV9zZXRCLm1lbW9yeVVzZSgpOworICAgIH0K
KworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdAorICAgIHsKKyAgICAgICAgZGF0
YUxvZyhtX3NldEEubWVtb3J5VXNlKCkgLyAxMDI0LCAiIC0+ICIsIG1fc2V0Qi5tZW1vcnlVc2Uo
KSAvIDEwMjQpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFQgbV9zZXRBOworICAgIFUgbV9z
ZXRCOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CitjbGFzcyBJbnN0
cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoIDogcHVibGljIEluc3RydW1lbnRlZElu
dGVyZmVyZW5jZUdyYXBoPFQsIFU+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBCYXNlID0gSW5zdHJ1
bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8VCwgVT47CisgICAgdXNpbmcgSW5kZXhUeXBlID0gdHlw
ZW5hbWUgQmFzZTo6SW5kZXhUeXBlOworCisgICAgc3RydWN0IEl0ZXJhYmxlIHsKKyAgICAgICAg
SXRlcmFibGUodHlwZW5hbWUgVDo6SXRlcmFibGUgaXRlcmFibGVBLCB0eXBlbmFtZSBVOjpJdGVy
YWJsZSBpdGVyYWJsZUIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoSW5kZXhUeXBlIHZh
bHVlIDogaXRlcmFibGVBKQorICAgICAgICAgICAgICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7
CisgICAgICAgICAgICBWZWN0b3I8SW5kZXhUeXBlPiB2YWx1ZXNCOworICAgICAgICAgICAgZm9y
IChJbmRleFR5cGUgdmFsdWUgOiBpdGVyYWJsZUIpCisgICAgICAgICAgICAgICAgdmFsdWVzQi5h
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92YWx1ZXMuc2l6ZSgp
ID09IHZhbHVlc0Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIHN0ZDo6c29ydChtX3ZhbHVlcy5iZWdp
bigpLCBtX3ZhbHVlcy5lbmQoKSk7CisgICAgICAgICAgICBzdGQ6OnNvcnQodmFsdWVzQi5iZWdp
bigpLCB2YWx1ZXNCLmVuZCgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3ZhbHVlc1tpXSA9PSB2YWx1ZXNCW2ldKTsKKyAgICAgICAgfQorICAgICAgICB1c2luZyBpdGVy
YXRvciA9IHR5cGVuYW1lIFZlY3RvcjxJbmRleFR5cGU+Ojpjb25zdF9pdGVyYXRvcjsKKworICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3ZhbHVlcy5iZWdpbigpOworICAgICAgICB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlcy5lbmQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFZlY3RvcjxJbmRleFR5cGU+IG1fdmFsdWVzOworICAgIH07CisKKyAg
ICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHsgQmFzZTo6bV9zZXRBW3VdLCBCYXNlOjptX3NldEJbdV0gfTsKKyAgICB9Cit9Owor
Cit1c2luZyBSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVw
QWRhcHRlcjxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90Pj47Cit1c2luZyBIdWdlUmVmZXJl
bmNlSW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI8SW50ZXJm
ZXJlbmNlSGFzaFNldDx1aW50MzJfdD4+OworCit1c2luZyBTbWFsbEludGVyZmVyZW5jZUdyYXBo
ID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJlbmNlSW50ZXJmZXJlbmNlR3Jh
cGgsIERlZmF1bHRTbWFsbEludGVyZmVyZW5jZUdyYXBoPjsKK3VzaW5nIExhcmdlSW50ZXJmZXJl
bmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJbnRlcmZl
cmVuY2VHcmFwaCwgRGVmYXVsdExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+OwordXNpbmcgSHVnZUlu
dGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8SHVnZVJlZmVy
ZW5jZUludGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdyYXBoPjsKKwor
dXNpbmcgUmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdl
c0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0b3I8SGFzaFNldDx1aW50MTZfdCwg
SW50SGFzaDx1aW50MTZfdD4sIFVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQxNl90
Pj4sIHVpbnQxNl90Pj47Cit1c2luZyBIdWdlUmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VH
cmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VWZWN0
b3I8SGFzaFNldDx1aW50MzJfdCwgSW50SGFzaDx1aW50MzJfdD4sIFVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPHVpbnQzMl90Pj4sIHVpbnQzMl90Pj47CisKK3VzaW5nIFNtYWxsSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3Jh
cGg8UmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNtYWxsSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3Jh
cGggPSBJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPFJlZmVyZW5jZUl0ZXJh
YmxlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1bHRMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3Jh
cGg+OwordXNpbmcgSHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPEh1Z2VSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5j
ZUdyYXBoLCBEZWZhdWx0SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+OworCisjZW5kaWYg
Ly8gVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBICisKK30gLy8gbmFtZXNwYWNlIFdU
RgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQuaCBiL1NvdXJjZS9XVEYvd3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKaW5k
ZXggOWI2YjNkODdlNzg0Li44OGUzZjQ1MTA5NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmgKKysrIGIvU291cmNlL1dURi93dGYvTGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaApAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9taW4oMCkKICAgICAgICAgLCBtX21heCgwKQogICAgIHsKLSAgICAgICAgbmV3
ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3I7CisgICAgICAgIG5ldyAoTm90TnVsbCwg
Jm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yOwogICAgIH0KIAogICAgIH5MaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldCgpCkBAIC03MCw5ICs3MCwyMiBAQCBwdWJsaWM6CiAgICAgICAg
ICwgbV9tYXgob3RoZXIubV9tYXgpCiAgICAgewogICAgICAgICBpZiAoaXNCaXRWZWN0b3IoKSkK
LSAgICAgICAgICAgIG5ldyAoJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yKFdURk1vdmUo
b3RoZXIubV9pbmxpbmUuYml0VmVjdG9yKSk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZt
X2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG90aGVyLm1faW5saW5lLmJpdFZl
Y3RvcikpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBuZXcgKCZtX2lubGluZS5oYXNoU2V0
KSBTZXQoV1RGTW92ZShvdGhlci5tX2lubGluZS5oYXNoU2V0KSk7CisgICAgICAgICAgICBuZXcg
KE5vdE51bGwsICZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShvdGhlci5tX2lubGluZS5o
YXNoU2V0KSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3Np
emUgPSAwOworICAgICAgICBtX21pbiA9IDA7CisgICAgICAgIG1fbWF4ID0gMDsKKyAgICAgICAg
aWYgKGlzQml0VmVjdG9yKCkpCisgICAgICAgICAgICBtX2lubGluZS5iaXRWZWN0b3IuY2xlYXJB
bGwoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtX2lubGluZS5oYXNoU2V0Ln5IYXNo
U2V0KCk7CisgICAgICAgICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJp
dFZlY3RvcjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBl
IHZhbHVlKSBjb25zdApAQCAtMTMxLDkgKzE0NCw3IEBAIHB1YmxpYzoKICAgICAgICAgSW5kZXhU
eXBlIG5ld01pbiA9IHN0ZDo6bWluKG1fbWluLCB2YWx1ZSk7CiAgICAgICAgIEluZGV4VHlwZSBu
ZXdNYXggPSBzdGQ6Om1heChtX21heCwgdmFsdWUpOwogICAgICAgICB1bnNpZ25lZCBiaXRWZWN0
b3JTaXplID0gKG5ld01heCAtIG5ld01pbikgLyA4OwotICAgICAgICB1bnNpZ25lZCBoYXNoU2V0
RXN0aW1hdGVkT2NjdXBhbmN5T3ZlcmhlYWQgPSAzOyAvLyBtYXggb2NjdXBhbmN5IGZvciBhIGxh
cmdlIEhhc2hTZXQgaXMgNTAlCi0gICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNoU2V0Q2FwYWNp
dHkgPSBzdGQ6Om1heCg4dSwgbV9zaXplKSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVy
aGVhZDsKLSAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRTaXplID0gd291bGRCZUhhc2hT
ZXRDYXBhY2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgICAgICB1bnNpZ25lZCB3b3VsZEJl
SGFzaFNldFNpemUgPSBlc3RpbWF0ZUhhc2hTZXRTaXplKG1fc2l6ZSk7CiAgICAgICAgIGlmICh3
b3VsZEJlSGFzaFNldFNpemUgKiAyIDwgYml0VmVjdG9yU2l6ZSkgewogICAgICAgICAgICAgdHJh
bnNpdGlvblRvSGFzaFNldCgpOwogICAgICAgICAgICAgYXV0byByZXN1bHQgPSBtX2lubGluZS5o
YXNoU2V0LmFkZCh2YWx1ZSk7CkBAIC0yNjksNiArMjgwLDEzIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAmJiAhVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8SW5kZXhUeXBlPjo6aXNEZWxl
dGVkVmFsdWUodmFsdWUpOwogICAgIH0KIAorICAgIHVuc2lnbmVkIGVzdGltYXRlSGFzaFNldFNp
emUodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGhhc2hTZXRFc3RpbWF0ZWRP
Y2N1cGFuY3lPdmVyaGVhZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFyZ2UgSGFzaFNl
dCBpcyA1MCUKKyAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0eSA9IHN0ZDo6
bWF4KDh1LCBuKSAqIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZDsKKyAgICAgICAg
cmV0dXJuIHdvdWxkQmVIYXNoU2V0Q2FwYWNpdHkgKiBzaXplb2YoSW5kZXhUeXBlKTsKKyAgICB9
CisKICAgICB2b2lkIHRyYW5zaXRpb25Ub0hhc2hTZXQoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQml0VmVjdG9yKCkpOwpAQCAtMjc4LDcgKzI5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIGZv
ciAoSW5kZXhUeXBlIG9sZEluZGV4IDogbV9pbmxpbmUuYml0VmVjdG9yKQogICAgICAgICAgICAg
bmV3U2V0LmFkZChvbGRJbmRleCArIG1fbWluKTsKICAgICAgICAgbV9pbmxpbmUuYml0VmVjdG9y
Ln5CaXRWZWN0b3IoKTsKLSAgICAgICAgbmV3ICgmbV9pbmxpbmUuaGFzaFNldCkgU2V0KFdURk1v
dmUobmV3U2V0KSk7CisgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmhhc2hTZXQpIFNl
dChXVEZNb3ZlKG5ld1NldCkpOwogICAgICAgICBtX3NpemUgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCk7CiAKICAgICAgICAgQVNTRVJUKCFpc0JpdFZlY3RvcigpKTsKQEAg
LTI5Nyw3ICszMTUsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChuZXdC
aXRWZWN0b3IucXVpY2tHZXQoMCkpOwogICAgICAgICBtX2lubGluZS5oYXNoU2V0Ln5TZXQoKTsK
LSAgICAgICAgbmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShuZXdC
aXRWZWN0b3IpKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuYml0VmVjdG9yKSBC
aXRWZWN0b3IoV1RGTW92ZShuZXdCaXRWZWN0b3IpKTsKIAogICAgICAgICBBU1NFUlQoaXNCaXRW
ZWN0b3IoKSk7CiAgICAgfQo=
</data>
<flag name="review"
          id="451231"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="451232"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429965</attachid>
            <date>2021-05-27 17:43:40 -0700</date>
            <delta_ts>2021-05-27 17:44:20 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>65452</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uZTMyZjI2OTVkYWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0wNS0yNiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEFpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3Jpbmcgc2hvdWxkIHVzZSB0aGUgb3B0aW1pemVkIGludGVyZmVyZW5j
ZSBncmFwaHMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgUGhpbCBQaXpsby4KKworICAgICAgICBUaGUgbWFpbiBjaGFuZ2UgaW4g
dGhpcyBwYXRjaCBpcyB0aGF0IEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgaXMgbm93
IHVzaW5nIHRoZSBvcHRpbWl6ZWQgZGF0YXN0cnVjdHVyZXMgaW4gd3RmL0ludGVyZmVyZW5jZUdy
YXBoLmguCisgICAgICAgIFRoaXMgcmVxdWlyZWQgdGVtcGxhdGluZyBtb3N0IG9mIGl0IG92ZXIg
dGhlIGludGVyZmVyZW5jZSBncmFwaCB1c2VkIChTbWFsbC9MYXJnZS9IdWdlKSwgYnV0IEkgdHJp
ZWQga2VlcGluZyBzb21lIGNvbW1vbiBwYXJ0cyBvdXQgb2YgdGhlIHRlbXBsYXRlZCBjbGFzcyB0
byBtaW5pbWl6ZSB0aGUgaW1wYWN0IG9uIGNvbXBpbGUgdGltZXMgYW5kIGJpbmFyeSBzaXplLgor
CisgICAgICAgIEEgY29uc2VxdWVuY2Ugb2YgdGhhdCBjaGFuZ2UgaXMgdGhhdCBjb2FsZXNjYWJs
ZU1vdmVzIGFuZCByZW1hcHBlZFN0YWNrU2xvdHMgbm93IHN0b3JlIGluZGljZXMgaW5zdGVhZCBv
ZiBkaXJlY3QgcG9pbnRlcnMgdG8gU3RhY2tTbG90cywgcmVzdWx0aW5nIGluIGEgbWVtb3J5IHJl
ZHVjdGlvbiBvZiBhYm91dCAzeCBhcyB3ZWxsLgorCisgICAgICAgIEFub3RoZXIgY29uc2VxdWVu
Y2UgaXMgdGhhdCBJIGhhZCB0byBzbGlnaHRseSBhbHRlciB0aGUgd2F5IHRoYXQgY29hbGVzY2lu
ZyB3b3JrczogaW5zdGVhZCBvZiBjYXJlZnVsbHkgcmVtb3ZpbmcgdGhlIGludGVyZmVyZW5jZSBl
ZGdlcyBvZiB0aGUga2lsbGVkIHNsb3QsIHdlIHNpbXBseSB1c2UgbWF5Q2xlYXIoKSB3aGljaCBp
cyBub3QgZ3VhcmFudGVlZCB0byByZW1vdmUgYW55dGhpbmcuCisgICAgICAgIEkgYmVsaWV2ZSB0
aGF0IHRoaXMgaXMgc291bmQsIGJlY2F1c2UgZXZlcnkgc3Vic2VxdWVudCBhY2Nlc3MgdG8gbV9p
bnRlcmZlcmVuY2UgY2hlY2tzIHdoZXRoZXIgYSBzbG90IGhhcyBiZWVuIGNvYWxlc2NlZCBmaXJz
dCwgc28gZHJvcHBpbmcgdGhlc2UgZWRnZXMgaXMgcHVyZWx5IGEgbWVtb3J5IHNhdmluZywgYnV0
IGhhcyBubyBsb2dpY2FsIGVmZmVjdC4KKworICAgICAgICBUaGUgbmV3IGNvZGUgd2FzIHRlc3Rl
ZCBpbiBhIGZldyB3YXlzOgorICAgICAgICAtIHJ1bm5pbmcgb24gSmV0U3RyZWFtMiB3aXRoIGFz
YW4KKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgd2l0aCBURVNUX09QVElNSVpFRF9J
TlRFUkZFUkVOQ0VfR1JBUEgKKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgYW5kIGxv
Z2dpbmcgdGhlIGZyYW1lIHNpemVzIGF0IHRoZSBlbmQgb2YgdGhpcyBwaGFzZSwgYW5kIGNvbXBh
cmluZyB0byB0aGUgcmVzdWx0cyBvZiBkb2luZyB0aGUgc2FtZSBvbiBUb1QgKHNhbWUgYXZlcmFn
ZSBmcmFtZSBzaXplKQorCisgICAgICAgIFRoZSB0d28gZnVuY3Rpb25zIHdoZXJlIHRoaXMgY29k
ZSBoYWQgdGhlIGxhcmdlc3QgbWVtb3J5IGZvb3RwcmludCBpbiBKZXRTdHJlYW0yIHdlcmUgYm90
aCBpbiB0c2Ytd2FzbS4KKyAgICAgICAgT25lIGhhcyA3NTEgc3RhY2sgc2xvdHMsIGFuZCBoYWQg
YW4gaW50ZXJmZXJlbmNlIGdyYXBoIG9mIDIuMU1CIGFuZCBhIGNvYWxlc2NhYmxlTW92ZXMgdmVj
dG9yIG9mIDQ0MGtCCisgICAgICAgIFRoZSBvdGhlciBoYXMgNjczIHN0YWNrIHNsb3RzLCBhbmQg
aGFkIGFuIGludGVyZmVyZW5jZSBncmFwaCBvZiAxLjlNQiBhbmQgYSBjb2FsZXNjYWJsZU1vdmVz
IHZlY3RvciBvZiA0MjFrQi4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IHJlc3BlY3Rp
dmVseSB1c2UgNzlrQisxNDZrQiBhbmQgNjdrQisxNDBrQgorICAgICAgICBUaGUgZWZmZWN0IG9u
IHRoZSByZXN0IG9mIEpldFN0cmVhbTIgaXMgbGVzcyBsaWtlbHkgdG8gbWF0dGVyIGFzIGZldyBm
dW5jdGlvbnMgdXNlZCBtb3JlIHRoYW4gYSBmZXcgZG96ZW5zIG9mIGtCIGluIHRoaXMgcGhhc2Us
IGJ1dCBpbiBwZXJjZW50YWdlcyBhcmUganVzdCBhcyBodWdlLgorCisgICAgICAgIE1vcmUgaW1w
b3J0YW50bHkgKGFuZCB0aGUgcmVhc29uIEkgd3JvdGUgdGhpcyBwYXRjaCBpbiB0aGUgZmlyc3Qg
cGxhY2UpLCBJIGNoZWNrZWQgbXJ1Ynktd2FzbS5hb3Rva2kuZGV2IHdoaWNoIHdpdGggYSBmZXcg
b3RoZXIgcGFnZXMgZm9yY2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3Jh
cGhDb2xvcmluZyBiZWNhdXNlIG9mIGpldHNhbXMuCisgICAgICAgIEl0IGhhcyB0d28gbWFzc2l2
ZSBmdW5jdGlvbnMgdGhhdCByZWFjaCB0aGlzIHBoYXNlIGlmIEkgaW5jcmVhc2UgT3B0aW9uczo6
bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nOgorICAgICAgICAtIGFib3V0IDZrIHN0YWNrIHNs
b3RzIC0+IDIxNU1CICsgNk1CIChpbnRlcmZlcmVuY2UgZ3JhcGggKyBjb2FsZXNjYWJsZU1vdmVz
KQorICAgICAgICAtIGFib3V0IDlrIHN0YWNrIHNsb3RzIC0+IDM5NU1CICsgNE1CCisgICAgICAg
IEFmdGVyIHRoaXMgcGF0Y2gsIHRoZXkgcmVzcGVjdGl2ZWx5IHVzZSA0LjVNQisyTUIgYW5kIDlN
QisxLjVNQiwgb3Igcm91Z2hseSBhIDQweCBpbXByb3ZlbWVudC4KKyAgICAgICAgQ29tYmluZWQg
d2l0aCB0aGUgcmVjZW50IGltcHJvdmVtZW50cyB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLCBJ
IGhvcGUgdG8gYmUgYWJsZSB0byBpbmNyZWFzZSBPcHRpb25zOjptYXhpbXVtVG1wc0ZvckdyYXBo
Q29sb3Jpbmcgc29vbiAoaW4gYSBkaWZmZXJlbnQgcGF0Y2ggZm9yIGVhc2llciBiaXNlY3Rpb24g
aWYgZWl0aGVyIGNhdXNlIGEgcGVyZiByZWdyZXNzaW9uKS4KKyAgICAgICAgVGhpcyB3b3VsZCBi
ZSBoZWxwZnVsLCBzaW5jZSBpdHMgbG93ZXJpbmcgY3JhdGVyZWQgb3VyIHBlcmZvcm1hbmNlIG9u
IHNvbWUgb3RoZXIgd2FzbSBhcHBsaWNhdGlvbiBieSA4eC4KKworICAgICAgICBJbiB0ZXJtcyBv
ZiBjb21waWxlIHRpbWVzLCB0aGlzIHBhdGNoIGxvd2VyZWQgdGhlIHRpbWUgc3BlbnQgaW4gQWxs
b2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyBvdmVyIHRoZSBjb3Vyc2Ugb2YgYSBydW4gb2YgSmV0
U3RyZWFtMiBmcm9tIHJvdWdobHkgMzUwbXMgdG8gcm91Z2hseSAyNzBtcy4KKyAgICAgICAgVGhp
cyBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZ2xpZ2libGUsIGJ1dCBhdCBsZWFzdCBpdCBndWFyYW50
ZWVzIHRoYXQgaXQgZGlkIG5vdCByZWdyZXNzLgorCisgICAgICAgICogYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxs
b2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcpOgorCiAyMDIxLTA1LTI3ICBBZHJpYW4gUGVyZXog
ZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVp
bGQgZml4ZXMsIGxhdGUgTWF5IDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmNwcAppbmRleCA5ZTE2MjM3YTdiZGIuLjZlZjg1MGI4MjQ4NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNs
dWRlICJBaXJVc2VDb3VudHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0ludGVyZmVyZW5jZUdyYXBoLmg+CiAjaW5jbHVkZSA8
d3RmL1NtYWxsU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01MiwyMzggKzUy
LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcgPSBmYWxzZTsKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29s
IHJlcG9ydEludGVyZmVyZW5jZUdyYXBoTWVtb3J5VXNlID0gZmFsc2U7CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKLSAgICAvLyBJ
bnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0
d28gVG1wcyBpcyByZXByZXNlbnRlZAotICAgIC8vIGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVz
ICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUg
YmlnZ2VyIFRtcC4KLSAgICB1c2luZyBJbnRlcmZlcmVuY2VFZGdlID0gc3RkOjpwYWlyPEluZGV4
VHlwZSwgSW5kZXhUeXBlPjsKLXB1YmxpYzoKLSAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsK
LSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpz
d2FwKHUsIHYpOwotICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5pc05ld0VudHJ5
OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9zZXQuY2xlYXIo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCi0gICAgewot
ICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlw
ZT46Om1heCgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZv
ciAoYXV0byBlZGdlIDogbV9zZXQpCi0gICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXplKCk7IH0KLQot
ICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmNhcGFjaXR5KCkg
KiBzaXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUlu
S0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBIYXNoU2V0PEludGVyZmVyZW5jZUVkZ2U+IG1fc2V0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEluZGV4VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7Ci1w
dWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAg
ewotICAgICAgICBpZiAodiA8IHUpCi0gICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAg
ICAgIHJldHVybiBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKLSAgICB9Ci0KLSAgICBib29sIGFk
ZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAg
ICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwotICAgICAgICBi
b29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdFbnRyeTsKLSAgICAgICAg
bV9zaXplICs9IGlzTmV3RW50cnk7Ci0gICAgICAgIHJldHVybiBpc05ld0VudHJ5OwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuY2xlYXIoKTsKLSAg
ICAgICAgbV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2ln
bmVkIG4pCi0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5k
ZXhUeXBlPjo6bWF4KCkpOwotICAgICAgICBtX3ZlY3Rvci5yZXNpemUobik7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpIDsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDog
bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
Ci0KLSAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgbWVtb3J5ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBUJiBzZXQgOiBtX3ZlY3RvcikKLSAg
ICAgICAgICAgIG1lbW9yeSArPSBzZXQubWVtb3J5VXNlKCk7Ci0gICAgICAgIHJldHVybiBtZW1v
cnk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxv
ZyhtZW1vcnlVc2UoKS8xMDI0KTsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxUPiBtX3ZlY3Rv
cjsKLSAgICB1bnNpZ25lZCBtX3NpemUgezB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIElu
ZGV4VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7Ci1wdWJsaWM6Ci0gICAgYm9v
bCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgodSwgdikpOwotICAgIH0KLQotICAgIGJvb2wg
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewot
ICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBkbyBvbmx5IG9uZSBxdWlja1NldCwgYXQgdGhlIGNv
c3Qgb2Ygb25lIGV4dHJhIGJyYW5jaCBpbiBldmVyeSBjb250YWlucy9hZGRBbmRSZXR1cm5Jc05l
d0VudHJ5ICh0byBlbmZvcmNlIHUgPCB2KQotICAgICAgICBib29sIGFscmVhZHlJbiA9IG1fYml0
VmVjdG9yLnF1aWNrU2V0KGluZGV4KHUsIHYpKTsKLSAgICAgICAgYm9vbCBhbHJlYWR5SW4yID0g
bV9iaXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodiwgdSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KGFscmVhZHlJbjIsIGFscmVhZHlJbiA9PSBhbHJlYWR5SW4yKTsKLSAgICAgICAgbV9zaXplICs9
ICFhbHJlYWR5SW47Ci0gICAgICAgIHJldHVybiAhYWxyZWFkeUluOwotICAgIH0KLQotICAgIHZv
aWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKLSAgICAg
ICAgbV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVk
IG4pCi0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOwotICAgICAgICBtX251bVRtcHMgPSBuOwotICAgICAgICBtX2JpdFZlY3Rv
ci5lbnN1cmVTaXplKG4qbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAg
ICAgICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtVG1wczsgKytpKSB7Ci0gICAgICAg
ICAgICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bVRtcHM7ICsraikgewotICAg
ICAgICAgICAgICAgIGlmIChtX2JpdFZlY3Rvci5xdWlja0dldChpbmRleChpLCBqKSkpCi0gICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotCi0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gKG1fYml0VmVjdG9y
LnNpemUoKSArIDcpID4+IDM7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25z
dCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25l
ZCBpbmRleChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCi0gICAgewotICAgICAgICByZXR1cm4g
aSAqIG1fbnVtVG1wcyArIGo7Ci0gICAgfQotCi0gICAgQml0VmVjdG9yIG1fYml0VmVjdG9yOwot
ICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Ci0gICAgSW5kZXhUeXBlIG1fbnVtVG1wczsKLX07Ci0K
LSNkZWZpbmUgVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBIIDAKLSNpZiBURVNUX09Q
VElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaCB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCi0gICAgewotICAgICAgICBib29sIGNvbnRhaW5zSW5BID0gbV9zZXRBLmNvbnRhaW5zKHUs
IHYpOwotICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRCLmNvbnRhaW5zKHUsIHYpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBjb250YWluc0luQik7Ci0gICAg
ICAgIHJldHVybiBjb250YWluc0luQTsKLSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklz
TmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgYm9vbCBp
c05ld0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwotICAgICAg
ICBib29sIGlzTmV3RW50cnlCID0gbV9zZXRCLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTmV3RW50cnlBID09IGlzTmV3RW50cnlCKTsKLSAg
ICAgICAgcmV0dXJuIGlzTmV3RW50cnlBOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAg
IHsKLSAgICAgICAgbV9zZXRBLmNsZWFyKCk7Ci0gICAgICAgIG1fc2V0Qi5jbGVhcigpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAg
IG1fc2V0QS5zZXRNYXhUbXBJbmRleChuKTsKLSAgICAgICAgbV9zZXRCLnNldE1heFRtcEluZGV4
KG4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQg
Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgbV9zZXRBLmZv
ckVhY2goZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICB1bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemVCID0gbV9zZXRCLnNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZUEg
PT0gc2l6ZUIpOwotICAgICAgICByZXR1cm4gc2l6ZUE7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1w
TWVtb3J5VXNlSW5LQigpIGNvbnN0Ci0gICAgewotICAgICAgICBkYXRhTG9nKG1fc2V0QS5tZW1v
cnlVc2UoKS8xMDI0LCAiIC0+ICIsIG1fc2V0Qi5tZW1vcnlVc2UoKS8xMDI0KTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgVCBtX3NldEE7Ci0gICAgVSBtX3NldEI7Ci19OwotCi11c2luZyBTbWFs
bEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90PjsKLXVz
aW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aDxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQxNl90PiwgdWludDE2X3Q+LCB1aW50MTZfdD47
Ci11c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaDxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQzMl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMyX3Q+LCB1aW50MTZf
dD47Ci0KLSNlbHNlIC8vIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSAotCi11c2lu
ZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90
PjsKLXVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD47Ci11c2luZyBI
dWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNp
Z25lZEludGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50MzJfdD47Ci0KLSNlbmRpZgotCiAvLyBUaGUg
QWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvciBkZWZpbmVzIGFsbCB0aGUgY29kZSB0aGF0IGlzIGlu
ZGVwZW5kYW50CiAvLyBmcm9tIHRoZSBiYW5rIG9yIHJlZ2lzdGVyIGFuZCBjYW4gYmUgc2hhcmVk
IHdoZW4gYWxsb2NhdGluZyByZWdpc3RlcnMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGUs
IHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgpAQCAtMTU4OSwxMiArMTM1Nywx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBtX2ludGVy
ZmVyZW5jZUVkZ2VzLnNldE1heFRtcEluZGV4KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNv
bHV0ZUluZGV4KG1fY29kZS5udW1UbXBzKGJhbmspKSk7CisgICAgICAgIG1faW50ZXJmZXJlbmNl
RWRnZXMuc2V0TWF4SW5kZXgoQWJzb2x1dGVUbXBNYXBwZXI8YmFuaz46OmFic29sdXRlSW5kZXgo
bV9jb2RlLm51bVRtcHMoYmFuaykpKTsKIAogICAgICAgICBpbml0aWFsaXplUHJlY29sb3JlZFRt
cCgpOwogICAgICAgICBidWlsZCgpOwogCi0gICAgICAgIGlmIGNvbnN0ZXhwciAocmVwb3J0SW50
ZXJmZXJlbmNlR3JhcGhNZW1vcnlVc2UgJiYgKHN0ZDo6aXNfc2FtZTxJbnRlcmZlcmVuY2VTZXQs
IExhcmdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8SW50ZXJmZXJl
bmNlU2V0LCBIdWdlSW50ZXJmZXJlbmNlR3JhcGg+Ojp2YWx1ZSkpIHsKKyAgICAgICAgaWYgY29u
c3RleHByIChyZXBvcnRJbnRlcmZlcmVuY2VHcmFwaE1lbW9yeVVzZSAmJiAoc3RkOjppc19zYW1l
PEludGVyZmVyZW5jZVNldCwgV1RGOjpMYXJnZUludGVyZmVyZW5jZUdyYXBoPjo6dmFsdWUgfHwg
c3RkOjppc19zYW1lPEludGVyZmVyZW5jZVNldCwgV1RGOjpIdWdlSW50ZXJmZXJlbmNlR3JhcGg+
Ojp2YWx1ZSkpIHsKICAgICAgICAgICAgIGRhdGFMb2coIm51bVRtcHN8bnVtRWRnZXN8bWVtb3J5
VXNlKGtCKTogIiwgbV9jb2RlLm51bVRtcHMoYmFuayksICIgfCAiLCBtX2ludGVyZmVyZW5jZUVk
Z2VzLnNpemUoKSwgIiB8ICIpOwogICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2VFZGdlcy5kdW1w
TWVtb3J5VXNlSW5LQigpOwogICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKQEAgLTIwNDIsOSAr
MTgxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfTsKIAotICAgICAgICAgICAgLy8gVGhlIGJpdCB2ZWN0b3IgYXBwcm9hY2ggdXNlcyBu
Km4gYml0cywgb3IgMjBrQiBmb3IgbiA9IDQwMC4KLSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNp
Z25lZCBtYXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IDQwMDsKLSAgICAgICAgICAg
IGlmIChtX2NvZGUubnVtVG1wcyhiYW5rKSA8IG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdy
YXBoKSB7CisgICAgICAgICAgICBpZiAobV9jb2RlLm51bVRtcHMoYmFuaykgPCBXVEY6Om1heFNp
emVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVzZUlS
QygpKSB7CiAgICAgICAgICAgICAgICAgICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBi
YW5rLCBJUkMsIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1w
V2lkdGgsIG1fdXNlQ291bnRzLCB1bnNwaWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAg
ICBkb25lID0gZG9BbGxvY2F0aW9uKGFsbG9jYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nLmNwcAppbmRleCBhZTc4NjkxNmI1NmYuLmMyZjFhZWYyOGE4MyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5n
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tC
eUdyYXBoQ29sb3JpbmcuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNS0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNS0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkFpclN0YWNrQWxs
b2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oPgogI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CkBAIC00Myw2NiArNDQsMjYgQEAgbmFtZXNwYWNlIHsKIAogbmFtZXNwYWNlIEFp
ckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHBy
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworc3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydExhcmdl
TWVtb3J5VXNlcyA9IGZhbHNlOwogfQogCi1zdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKLSAgICBD
b2FsZXNjYWJsZU1vdmUoKQorY2xhc3MgU3RhY2tBbGxvY2F0b3JCYXNlIHsKK3Byb3RlY3RlZDoK
KyAgICBTdGFja0FsbG9jYXRvckJhc2UoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAgICAgLCBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlcyhjb2RlLnN0YWNrU2xvdHMo
KS5zaXplKCkpCiAgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW1h
cHBlZFN0YWNrU2xvdEluZGljZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX3JlbWFwcGVk
U3RhY2tTbG90SW5kaWNlc1tpXSA9IGk7CiAgICAgfQogCi0gICAgQ29hbGVzY2FibGVNb3ZlKFN0
YWNrU2xvdCogc3JjLCBTdGFja1Nsb3QqIGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKLSAgICAgICAg
OiBzcmMoc3JjKQotICAgICAgICAsIGRzdChkc3QpCi0gICAgICAgICwgZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2Fs
ZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNyYyA9PSBv
dGhlci5zcmMKLSAgICAgICAgICAgICYmIGRzdCA9PSBvdGhlci5kc3QKLSAgICAgICAgICAgICYm
IGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2Fs
ZXNjYWJsZU1vdmUoKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Ci0gICAgewotICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3JjKSwgIi0+
IiwgcG9pbnRlckR1bXAoZHN0KSwgIigiLCBmcmVxdWVuY3ksICIpIik7Ci0gICAgfQotICAgIAot
ICAgIFN0YWNrU2xvdCogc3JjIHsgbnVsbHB0ciB9OwotICAgIFN0YWNrU2xvdCogZHN0IHsgbnVs
bHB0ciB9OwotICAgIGRvdWJsZSBmcmVxdWVuY3kgeyBQTmFOIH07Ci19OwotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUm
IGNvZGUpCi17Ci0gICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nIik7Ci0gICAgCi0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0g
ICAgCi0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMgPQot
ICAgICAgICBhbGxvY2F0ZUFuZEdldEVzY2FwZWRTdGFja1Nsb3RzV2l0aG91dENoYW5naW5nRnJh
bWVTaXplKGNvZGUpOwotCi0gICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCi0g
ICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tT
bG90KiwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygp
LnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwotCiAgICAgLy8gV2Ugd2ls
bCBwZXJmb3JtIHNvbWUgc3BpbGwgY29hbGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwg
d2UgbmVlZCB0byBiZSBhYmxlIHRvIGlkZW50aWZ5CiAgICAgLy8gY29hbGVzY2FibGUgbW92ZXMg
YW5kIGhhbmRsZSB0aGVtIHNwZWNpYWxseSBpbiBpbnRlcmZlcmVuY2UgYW5hbHlzaXMuCi0gICAg
YXV0byBpc0NvYWxlc2NhYmxlTW92ZSA9IFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAg
Ym9vbCBpc0NvYWxlc2NhYmxlTW92ZShJbnN0JiBpbnN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFPcHRpb25zOjpjb2FsZXNjZVNwaWxsU2xvdHMoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKwogICAgICAgICBXaWR0aCB3aWR0aDsKICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQu
b3Bjb2RlKSB7CiAgICAgICAgIGNhc2UgTW92ZToKQEAgLTExOCwxMyArNzksMTAgQEAgdm9pZCBh
bGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmICghT3B0aW9uczo6Y29hbGVzY2VTcGlsbFNsb3RzKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9IDMpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsKICAgICAgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3Nb
aV07CiAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCkBAIC0xMzUsMTgyICs5MywzMDMg
QEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAg
ICAgICBpZiAoc2xvdC0+Ynl0ZVNpemUoKSAhPSBieXRlcyh3aWR0aCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH07Ci0gICAgCi0gICAgYXV0byBpc1VzZWxlc3NNb3ZlID0gWyZdIChJbnN0JiBp
bnN0KSAtPiBib29sIHsKKyAgICB9CisKKyAgICBib29sIGlzVXNlbGVzc01vdmUoSW5zdCYgaW5z
dCkgY29uc3QKKyAgICB7CiAgICAgICAgIHJldHVybiBpc0NvYWxlc2NhYmxlTW92ZShpbnN0KSAm
JiBpbnN0LmFyZ3NbMF0gPT0gaW5zdC5hcmdzWzFdOworICAgIH0KKworICAgIHVuc2lnbmVkIHJl
bWFwKHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHJlbWFwcGVkU2xvdEluZGV4ID0gbV9yZW1hcHBlZFN0YWNr
U2xvdEluZGljZXNbc2xvdEluZGV4XTsKKyAgICAgICAgICAgIGlmIChyZW1hcHBlZFNsb3RJbmRl
eCA9PSBzbG90SW5kZXgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNsb3RJbmRleDsKKyAgICAg
ICAgICAgIHNsb3RJbmRleCA9IHJlbWFwcGVkU2xvdEluZGV4OworICAgICAgICB9CisgICAgfQor
CisgICAgU3RhY2tTbG90KiByZW1hcFN0YWNrU2xvdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb2RlLnN0YWNrU2xvdHMoKVtyZW1hcChzbG90LT5pbmRl
eCgpKV07CisgICAgfQorCisgICAgYm9vbCBpc1JlbWFwcGVkU2xvdEluZGV4KHVuc2lnbmVkIHNs
b3RJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3JlbWFwcGVkU3RhY2tTbG90
SW5kaWNlc1tzbG90SW5kZXhdICE9IHNsb3RJbmRleDsKICAgICB9OwotICAgIAotICAgIGF1dG8g
YWRkRWRnZSA9IFsmXSAoU3RhY2tTbG90KiBhLCBTdGFja1Nsb3QqIGIpIHsKLSAgICAgICAgaW50
ZXJmZXJlbmNlW2FdLmFkZChiKTsKLSAgICAgICAgaW50ZXJmZXJlbmNlW2JdLmFkZChhKTsKLSAg
ICB9OwotICAgIAotICAgIFZlY3RvcjxDb2FsZXNjYWJsZU1vdmU+IGNvYWxlc2NhYmxlTW92ZXM7
Ci0KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBTdGFja1Ns
b3RMaXZlbmVzczo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwotCi0gICAg
ICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKLSAgICAgICAg
ICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2Up
Ci0gICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9pbnRlckxp
c3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKLQotICAgICAgICAgICAgSW5zdCogcHJl
dkluc3QgPSBibG9jay0+Z2V0KGluc3RJbmRleCk7Ci0gICAgICAgICAgICBJbnN0KiBuZXh0SW5z
dCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7Ci0gICAgICAgICAgICBpZiAocHJldkluc3Qg
JiYgaXNDb2FsZXNjYWJsZU1vdmUoKnByZXZJbnN0KSkgewotICAgICAgICAgICAgICAgIENvYWxl
c2NhYmxlTW92ZSBtb3ZlKHByZXZJbnN0LT5hcmdzWzBdLnN0YWNrU2xvdCgpLCBwcmV2SW5zdC0+
YXJnc1sxXS5zdGFja1Nsb3QoKSwgYmxvY2stPmZyZXF1ZW5jeSgpKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBjb2FsZXNjYWJsZU1vdmVzLmFwcGVuZChtb3ZlKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDog
bG9jYWxDYWxjLmxpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXJTbG90ICE9
IG1vdmUuc3JjKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShtb3ZlLmRzdCwgb3Ro
ZXJTbG90KTsKKworICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcmVt
YXBwZWRTdGFja1Nsb3RJbmRpY2VzOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmZXJl
bmNlR3JhcGg+CitjbGFzcyBHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3IgZmluYWwgOiBwdWJs
aWMgU3RhY2tBbGxvY2F0b3JCYXNlIHsKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBJ
bnRlcmZlcmVuY2VHcmFwaDo6SW5kZXhUeXBlOworcHVibGljOgorICAgIEdyYXBoQ29sb3JpbmdT
dGFja0FsbG9jYXRvcihDb2RlJiBjb2RlKQorICAgICAgICA6IFN0YWNrQWxsb2NhdG9yQmFzZShj
b2RlKQorICAgICAgICAsIG1faW50ZXJmZXJlbmNlKCkKKyAgICAgICAgLCBtX2NvYWxlc2NhYmxl
TW92ZXMoKQorICAgIHsKKyAgICAgICAgbV9pbnRlcmZlcmVuY2Uuc2V0TWF4SW5kZXgobV9jb2Rl
LnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIH0KKworICAgIHZvaWQgcnVuKGNvbnN0IFZlY3Rv
cjxTdGFja1Nsb3QqPiYgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cykKKyAgICB7CisgICAgICAg
IFN0YWNrU2xvdExpdmVuZXNzIGxpdmVuZXNzKG1fY29kZSk7CisKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6
OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICAgICAgYXV0
byBpbnRlcmZlcmUgPSBbJl0gKHVuc2lnbmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAg
IGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBXVEY6OnBvaW50ZXJM
aXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CisKKyAgICAgICAgICAgICAgICBJbnN0
KiBwcmV2SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0
KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAg
aWYgKHByZXZJbnN0ICYmIGlzQ29hbGVzY2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ29hbGVzY2FibGVNb3ZlIG1vdmUocHJldkluc3QtPmFyZ3NbMF0uc3RhY2tT
bG90KCktPmluZGV4KCksIHByZXZJbnN0LT5hcmdzWzFdLnN0YWNrU2xvdCgpLT5pbmRleCgpLCBi
bG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgICAgICAgICAgICAgIG1fY29hbGVzY2FibGVN
b3Zlcy5hcHBlbmQobW92ZSk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIG90aGVyU2xvdEluZGV4ID0gb3RoZXJTbG90LT5pbmRleCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG90aGVyU2xvdEluZGV4ICE9IG1vdmUuc3JjKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFkZEVkZ2UobW92ZS5kc3QsIG90aGVyU2xvdEluZGV4KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHByZXZJbnN0ID0gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgcHJldkluc3QgPSBudWxscHRyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgSW5zdDo6
Zm9yRWFjaERlZjxBcmc+KAotICAgICAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKLSAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJn
LnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0
YWNrU2xvdEtpbmQ6OlNwaWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgICAgICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMu
bGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRnZShzbG90LCBvdGhlclNsb3Qp
OwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAg
ICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKQot
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRl
eCksICJcbiIpOwotCi0gICAgICAgICAgICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxp
Y2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3JlIGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUK
LSAgICAgICAgICAgIC8vIGRlZnMgYW5kIHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRo
YXQgYXJlIGRlYWQgcmlnaHQgbm93LiBXZSBvbmx5IGRvIHRoYXQKLSAgICAgICAgICAgIC8vIGJl
Y2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNl
ZSBoZXJlLgotICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwot
ICAgICAgICAgICAgaWYgKCFpbnN0Lmhhc05vbkFyZ0VmZmVjdHMoKSkgewotICAgICAgICAgICAg
ICAgIGJvb2wgb2sgPSB0cnVlOwotICAgICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAg
ICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFyZz4oCisgICAgICAgICAgICAgICAgICAgIHByZXZJbnN0
LCBuZXh0SW5zdCwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
LCBCYW5rLCBXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFj
aygpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYo
cm9sZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90
LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShzbG90KSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9rID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkRWRnZShzbG90LCBvdGhlclNsb3QpOwogICAgICAgICAgICAg
ICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgICAg
IGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJv
c2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0
KGluc3RJbmRleCksICJcbiIpOworCisgICAgICAgICAgICAgICAgLy8gS2lsbCBkZWFkIHN0b3Jl
cy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZiBpdCBo
YXMgb25seSBsYXRlCisgICAgICAgICAgICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZz
IGFyZSB0byB0aGluZ3MgdGhhdCBhcmUgZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAor
ICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBz
dGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgorICAgICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9u
QXJnRWZmZWN0cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShzbG90
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChvaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CisgICAg
ICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7Ci0gICAgICAg
ICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJl
KC0xKTsKKworICAgICAgICAgICAgYmxvY2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisg
ICAgICAgICAgICAgICAgWyZdIChjb25zdCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICFpbnN0OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6
cmVwb3J0TGFyZ2VNZW1vcnlVc2VzICYmIG1faW50ZXJmZXJlbmNlLm1lbW9yeVVzZSgpID4gMTAy
NCkgeworICAgICAgICAgICAgZGF0YUxvZygiR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yIHN0
YWNrU2xvdHMsIGludGVyZmVyZW5jZUdyYXBoKGtCKSwgY29hbGVzY2FibGUgbW92ZXMoa0IpOiAi
LCBtX2NvZGUuc3RhY2tTbG90cygpLnNpemUoKSwgIiA6ICIpOworICAgICAgICAgICAgbV9pbnRl
cmZlcmVuY2UuZHVtcE1lbW9yeVVzZUluS0IoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiwgIiwg
KG1fY29hbGVzY2FibGVNb3Zlcy5zaXplKCkgKiBzaXplb2YoQ29hbGVzY2FibGVNb3ZlKSkgLyAx
MDI0KTsKKyAgICAgICAgICAgIGRhdGFMb2dMbigpOwogICAgICAgICB9Ci0gICAgICAgIGludGVy
ZmVyZSgtMSk7Ci0gICAgICAgIAotICAgICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRj
aGluZygKLSAgICAgICAgICAgIFsmXSAoY29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICFpbnN0OworCisgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpIHsKKyAgICAgICAgICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICAgICAgICAgIGRh
dGFMb2coIkludGVyZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIik7CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzbG90SW5kZXggOiBtX2ludGVyZmVyZW5jZVtzbG90
LT5pbmRleCgpXSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhwb2ludGVyRHVtcChtX2Nv
ZGUuc3RhY2tTbG90cygpW3Nsb3RJbmRleF0pKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJc
biIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHRyeSB0byBj
b2FsZXNjZSBzb21lIG1vdmVzLgorICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX2Nv
YWxlc2NhYmxlTW92ZXMuYmVnaW4oKSwgbV9jb2FsZXNjYWJsZU1vdmVzLmVuZCgpLAorICAgICAg
ICAgICAgWyZdIChDb2FsZXNjYWJsZU1vdmUmIGEsIENvYWxlc2NhYmxlTW92ZSYgYikgLT4gYm9v
bCB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7CiAg
ICAgICAgICAgICB9KTsKLSAgICB9CiAKLSAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhD
b2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKSB7Ci0gICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90
IDogY29kZS5zdGFja1Nsb3RzKCkpCi0gICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ug
b2YgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVu
Y2Vbc2xvdF0pLCAiXG4iKTsKLSAgICB9Ci0gICAgCi0gICAgLy8gTm93IHRyeSB0byBjb2FsZXNj
ZSBzb21lIG1vdmVzLgotICAgIHN0ZDo6c29ydCgKLSAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5i
ZWdpbigpLCBjb2FsZXNjYWJsZU1vdmVzLmVuZCgpLAotICAgICAgICBbJl0gKENvYWxlc2NhYmxl
TW92ZSYgYSwgQ29hbGVzY2FibGVNb3ZlJiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVy
biBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVlbmN5OwotICAgICAgICB9KTsKLSAgICAKLSAgICBJbmRl
eE1hcDxTdGFja1Nsb3QqLCBTdGFja1Nsb3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFj
a1Nsb3RzKCkuc2l6ZSgpKTsKLSAgICBhdXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3Qp
IC0+IFN0YWNrU2xvdCogewotICAgICAgICBpZiAoIXNsb3QpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgU3RhY2tTbG90KiByZW1h
cHBlZFNsb3QgPSByZW1hcHBlZFN0YWNrU2xvdHNbc2xvdF07Ci0gICAgICAgICAgICBpZiAoIXJl
bWFwcGVkU2xvdCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2xvdDsKLSAgICAgICAgICAgIHNs
b3QgPSByZW1hcHBlZFNsb3Q7CisgICAgICAgIGZvciAoY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBt
b3ZlIDogbV9jb2FsZXNjYWJsZU1vdmVzKSB7CisgICAgICAgICAgICBJbmRleFR5cGUgc2xvdFRv
S2lsbCA9IHJlbWFwKG1vdmUuc3JjKTsKKyAgICAgICAgICAgIEluZGV4VHlwZSBzbG90VG9LZWVw
ID0gcmVtYXAobW92ZS5kc3QpOworICAgICAgICAgICAgaWYgKHNsb3RUb0tpbGwgPT0gc2xvdFRv
S2VlcCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChtX2ludGVy
ZmVyZW5jZS5jb250YWlucyhzbG90VG9LaWxsLCBzbG90VG9LZWVwKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xv
dFRvS2lsbF0gPSBzbG90VG9LZWVwOworCisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBpbnRl
cmZlcmluZ1Nsb3QgOiBtX2ludGVyZmVyZW5jZVtzbG90VG9LaWxsXSkKKyAgICAgICAgICAgICAg
ICBhZGRFZGdlKGludGVyZmVyaW5nU2xvdCwgc2xvdFRvS2VlcCk7CisgICAgICAgICAgICBtX2lu
dGVyZmVyZW5jZS5tYXlDbGVhcihzbG90VG9LaWxsKTsKICAgICAgICAgfQotICAgIH07Ci0gICAg
Ci0gICAgZm9yIChDb2FsZXNjYWJsZU1vdmUmIG1vdmUgOiBjb2FsZXNjYWJsZU1vdmVzKSB7Ci0g
ICAgICAgIG1vdmUuc3JjID0gcmVtYXAobW92ZS5zcmMpOwotICAgICAgICBtb3ZlLmRzdCA9IHJl
bWFwKG1vdmUuZHN0KTsKLSAgICAgICAgaWYgKG1vdmUuc3JjID09IG1vdmUuZHN0KQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChpbnRlcmZlcmVuY2VbbW92ZS5zcmNdLmNvbnRh
aW5zKG1vdmUuZHN0KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAg
U3RhY2tTbG90KiBzbG90VG9LaWxsID0gbW92ZS5zcmM7Ci0gICAgICAgIFN0YWNrU2xvdCogc2xv
dFRvS2VlcCA9IG1vdmUuZHN0OwotICAgICAgICAKLSAgICAgICAgcmVtYXBwZWRTdGFja1Nsb3Rz
W3Nsb3RUb0tpbGxdID0gc2xvdFRvS2VlcDsKLSAgICAgICAgZm9yIChTdGFja1Nsb3QqIGludGVy
ZmVyaW5nU2xvdCA6IGludGVyZmVyZW5jZVtzbG90VG9LaWxsXSkgewotICAgICAgICAgICAgaWYg
KGludGVyZmVyaW5nU2xvdCA9PSBzbG90VG9LaWxsKQorCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgeworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGFyZy5pc1N0YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwU3RhY2tTbG90KGFyZy5zdGFja1Nsb3QoKSksIGFyZy5v
ZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc1VzZWxl
c3NNb3ZlKGluc3QpKQorICAgICAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2Nh
dGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9y
IGVhY2gKKyAgICAgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZz
ZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAg
ICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdp
dGguCisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzID0gYXNzaWduZWRFc2Nh
cGVkU3RhY2tTbG90czsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3Rh
Y2tTbG90cygpKSB7CisgICAgICAgICAgICBpZiAoaXNSZW1hcHBlZFNsb3RJbmRleChzbG90LT5p
bmRleCgpKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHNs
b3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25l
ZCBhbiBvZmZzZXQuCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRl
cmZlcmVuY2VbaW50ZXJmZXJpbmdTbG90XS5yZW1vdmUoc2xvdFRvS2lsbCk7Ci0gICAgICAgICAg
ICBpbnRlcmZlcmVuY2VbaW50ZXJmZXJpbmdTbG90XS5hZGQoc2xvdFRvS2VlcCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0
YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgb3RoZXJTbG90SW5k
ZXggOiBtX2ludGVyZmVyZW5jZVtzbG90LT5pbmRleCgpXSkgeworICAgICAgICAgICAgICAgIGlm
IChpc1JlbWFwcGVkU2xvdEluZGV4KG90aGVyU2xvdEluZGV4KSkKKyAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdGhlclNsb3QgPSBtX2Nv
ZGUuc3RhY2tTbG90cygpW290aGVyU2xvdEluZGV4XTsKKyAgICAgICAgICAgICAgICBvdGhlclNs
b3RzLmFwcGVuZChvdGhlclNsb3QpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhc3Np
Z24oc2xvdCwgb3RoZXJTbG90cyk7CiAgICAgICAgIH0KLSAgICAgICAgaW50ZXJmZXJlbmNlW3Ns
b3RUb0tlZXBdLmFkZChpbnRlcmZlcmVuY2Vbc2xvdFRvS2lsbF0uYmVnaW4oKSwgaW50ZXJmZXJl
bmNlW3Nsb3RUb0tpbGxdLmVuZCgpKTsKLSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tpbGxd
LmNsZWFyKCk7CiAgICAgfQotICAgIAotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7Ci0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNTdGFj
aygpKQotICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwKGFyZy5zdGFj
a1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
aXNVc2VsZXNzTW92ZShpbnN0KSkKLSAgICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworCitw
cml2YXRlOgorICAgIHN0cnVjdCBDb2FsZXNjYWJsZU1vdmUgeworICAgICAgICBDb2FsZXNjYWJs
ZU1vdmUoKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBDb2FsZXNjYWJsZU1vdmUo
SW5kZXhUeXBlIHNyYywgSW5kZXhUeXBlIGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICAgICAg
ICAgIDogc3JjKHNyYykKKyAgICAgICAgICAgICwgZHN0KGRzdCkKKyAgICAgICAgICAgICwgZnJl
cXVlbmN5KGZyZXF1ZW5jeSkKKyAgICAgICAgewogICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvYWxlc2NhYmxlTW92ZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzcmMgPT0gb3RoZXIuc3JjCisgICAgICAgICAgICAgICAgJiYg
ZHN0ID09IG90aGVyLmRzdAorICAgICAgICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5m
cmVxdWVuY3k7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29h
bGVzY2FibGVNb3ZlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqdGhpcyAhPSBD
b2FsZXNjYWJsZU1vdmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQoc3JjLCAi
LT4iLCBkc3QsICIoIiwgZnJlcXVlbmN5LCAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgSW5k
ZXhUeXBlIHNyYyB7IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAg
ICAgICAgSW5kZXhUeXBlIGRzdCB7IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4
KCkgfTsKKyAgICAgICAgZmxvYXQgZnJlcXVlbmN5IHsgMC4wIH07CisgICAgfTsKKworICAgIHZv
aWQgYWRkRWRnZShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAo
dSA9PSB2KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQo
dSwgdik7CiAgICAgfQotICAgIAotICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25z
LiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNo
Ci0gICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAg
dGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KLSAgICAvLyBvdmVybGFw
IHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KLSAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90cyA9IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CisK
KyAgICB2b2lkIGFkZEVkZ2UoU3RhY2tTbG90KiB1LCBTdGFja1Nsb3QqIHYpCisgICAgeworICAg
ICAgICBhZGRFZGdlKHUtPmluZGV4KCksIHYtPmluZGV4KCkpOworICAgIH0KKworICAgIEludGVy
ZmVyZW5jZUdyYXBoIG1faW50ZXJmZXJlbmNlOworICAgIFZlY3RvcjxDb2FsZXNjYWJsZU1vdmU+
IG1fY29hbGVzY2FibGVNb3ZlczsKK307CisKKy8vIFdlIHRyeSB0byBhdm9pZCBjb21wdXRpbmcg
dGhlIGxpdmVuZXNzIGluZm9ybWF0aW9uIGlmIHRoZXJlIGlzIG5vIHNwaWxsIHNsb3QgdG8gYWxs
b2NhdGUKK2Jvb2wgdHJ5VHJpdmlhbFN0YWNrQWxsb2NhdGlvbihDb2RlJiBjb2RlKQorewogICAg
IGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYg
KHJlbWFwcGVkU3RhY2tTbG90c1tzbG90XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAKLSAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7Ci0gICAgICAgICAgICAvLyBB
bHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21G
UCgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KIAotICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRlcmZlcmluZ1Ns
b3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOwotICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3Np
Z25lZEVzY2FwZWRTdGFja1Nsb3RzLnNpemUoKSk7Ci0gICAgICAgIG90aGVyU2xvdHMucmVzaXpl
KGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5zaXpl
KCkpOwotICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Ns
b3RzLnNpemUoKTsKLSAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGludGVyZmVy
aW5nU2xvdHMpCi0gICAgICAgICAgICBvdGhlclNsb3RzW25leHRJbmRleCsrXSA9IG90aGVyU2xv
dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90
cyk7Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFw
aENvbG9yaW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUs
ICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIik7CisKKyAgICBoYW5kbGVDYWxsZWVTYXZl
cyhjb2RlKTsKKworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Ns
b3RzID0KKyAgICAgICAgYWxsb2NhdGVBbmRHZXRFc2NhcGVkU3RhY2tTbG90c1dpdGhvdXRDaGFu
Z2luZ0ZyYW1lU2l6ZShjb2RlKTsKKworICAgIGlmICghdHJ5VHJpdmlhbFN0YWNrQWxsb2NhdGlv
bihjb2RlKSkgeworICAgICAgICBpZiAoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpIDwgV1RGOjpt
YXhTaXplRm9yU21hbGxJbnRlcmZlcmVuY2VHcmFwaCkgeworICAgICAgICAgICAgR3JhcGhDb2xv
cmluZ1N0YWNrQWxsb2NhdG9yPFNtYWxsSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2Nh
dG9yKGNvZGUpOworICAgICAgICAgICAgYWxsb2NhdG9yLnJ1bihhc3NpZ25lZEVzY2FwZWRTdGFj
a1Nsb3RzKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkgPCBz
dGQ6Om51bWVyaWNfbGltaXRzPHVpbnQxNl90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIEdyYXBo
Q29sb3JpbmdTdGFja0FsbG9jYXRvcjxMYXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFs
bG9jYXRvcihjb2RlKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5ydW4oYXNzaWduZWRFc2NhcGVk
U3RhY2tTbG90cyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHcmFwaENvbG9yaW5n
U3RhY2tBbGxvY2F0b3I8SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihj
b2RlKTsKKyAgICAgICAgICAgIGFsbG9jYXRvci5ydW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90
cyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tT
bG90cyhjb2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dU
Ri9DaGFuZ2VMb2cKaW5kZXggOTc5N2Q1ZWE4OTYzLi4yY2ZkNTQxZmExYzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTEyIEBACisyMDIxLTA1LTI2ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyBzaG91bGQgdXNl
IHRoZSBvcHRpbWl6ZWQgaW50ZXJmZXJlbmNlIGdyYXBocyBmcm9tIEFpckFsbG9jYXRlUmVnaXN0
ZXJzQnlHcmFwaENvbG9yaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMjYyNTgKKworICAgICAgICBSZXZpZXdlZCBieSBQaGlsIFBpemxvLgorCisg
ICAgICAgIEkgbW92ZWQgdGhlIGludGVyZmVyZW5jZSBncmFwaHMgZGF0YXN0cnVjdHVyZXMgZnJv
bSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZyB0byB0aGVpciBvd24gd3RmL0lu
dGVyZmVyZW5jZUdyYXBoLmggZmlsZS4KKyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG9mIHRoZW06
CisgICAgICAgIC0gU21hbGxJbnRlcmZlcmVuY2VHcmFwaCwgYmVzdCBmb3IgbiA8IDQwMAorICAg
ICAgICAtIExhcmdlSW50ZXJmZXJlbmNlR3JhcGgsIGZvciBuIDwgMioqMTYKKyAgICAgICAgLSBI
dWdlSW50ZXJmZXJlbmNlR3JhcGgsIGZvciBuIHVwIHRvIDIqKjMyCisgICAgICAgIEkgYWxzbyBh
ZGRlZCAiSXRlcmFibGUiIHZlcnNpb25zIG9mIHRoZW0sIHRoYXQgaGF2ZSBhbiBvcGVyYXRvcltd
IG1ldGhvZCB3aG9zZSByZXN1bHQgeW91IGNhbiBpdGVyYXRlIG9uIHRvIGdldCBhbGwgdGhlIGlu
ZGljZXMgd2hpY2ggaW50ZXJmZXJlIHdpdGggYSBnaXZlbiBpbmRleC4KKyAgICAgICAgU21hbGxJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoIGlzIHRoZSBzYW1lIGFzIHRoZSBub24taXRlcmFibGUg
dmVyc2lvbiwgYnV0IHRoZSBMYXJnZSBhbmQgSHVnZSB2ZXJzaW9ucyBhcmUgYSBiaXQgc2xvd2Vy
IHRoYW4gdGhlaXIgY291bnRlcnBhcnRzIGFuZCB1c2UgMnggbWVtb3J5LgorCisgICAgICAgIEFs
bCBvZiB0aGVzZSB3ZXJlIHRlc3RlZCBieSBydW5uaW5nIEpldFN0cmVhbTIgd2l0aCB0aGUgVEVT
VF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBIIHNldCB0byAxLgorICAgICAgICBUaGlzIGZs
YWcgbWFrZXMgdGhlIG9wdGltaXplZCBkYXRhc3RydWN0dXJlcyBydW4gaW4gcGFyYWxsZWwgd2l0
aCBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZWlyIHJlc3VsdHMgYXJlIGNoZWNr
ZWQgZm9yIGVxdWFsaXR5IG9uIGV2ZXJ5IG1ldGhvZCBjYWxsLgorICAgICAgICBUaGVyZSBpcyBv
bmUgc21hbGwgZGlmZmVyZW5jZSBhbGxvd2VkOiBpdGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQg
dG8gZ28gdGhyb3VnaCBlbGVtZW50cyBpbiB0aGUgc2FtZSBvcmRlci4KKworICAgICAgICBJIGFs
c28gYWRkZWQgYSBjbGVhcigpIG1ldGhvZCB0byBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dCwgYW5kIGFkZGVkIHRoZSBOb3ROdWxsIGZsYWcgdG8gaXRzIHZhcmlvdXMgdXNlcyBvZiBwbGFj
ZW1lbnQgbmV3LgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6Cisg
ICAgICAgIChXVEY6Olc+OjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAqIHd0Zi9JbnRlcmZl
cmVuY2VHcmFwaC5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9y
Ojpjb250YWlucyk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6YWRkQW5k
UmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6
YWRkKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpjbGVhcik6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RG
OjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlQml0VmVjdG9yOjpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
Qml0VmVjdG9yOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVj
dG9yOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0
b3I6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
Qml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RG
OjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRW
ZWN0b3I6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChX
VEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6SXRlcmFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6ZW5kIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjppbmRleCBjb25zdCk6CisgICAgICAg
IChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRl
cmZlcmVuY2VWZWN0b3I6OmFkZEFuZFJldHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJ
bnRlcmZlcmVuY2VWZWN0b3I6OmFkZCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rv
cjo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6Om1heUNsZWFyKToK
KyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpzZXRNYXhJbmRleCk6CisgICAgICAg
IChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OkludGVy
ZmVyZW5jZVZlY3Rvcjo6c2l6ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZl
Y3Rvcjo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9y
OjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZl
Y3Rvcjo6SXRlcmFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
VmVjdG9yOjpJdGVyYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2Vz
RHVwbGljYXRpbmdBZGFwdGVyOjpjb250YWlucyk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRF
ZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAg
IChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6YWRkKToKKyAgICAgICAg
KFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpjbGVhcik6CisgICAgICAg
IChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAg
ICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OnNldE1heEluZGV4
KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpmb3JF
YWNoKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpz
aXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFw
dGVyOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBs
aWNhdGluZ0FkYXB0ZXI6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6
VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAg
ICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpjb250YWlucyk6CisgICAg
ICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6YWRkQW5kUmV0dXJuSXNOZXdF
bnRyeSk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6YWRkKToK
KyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpjbGVhcik6CisgICAg
ICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAgICAg
ICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6OnNldE1heEluZGV4KToKKyAgICAg
ICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpmb3JFYWNoKToKKyAgICAgICAg
KFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAg
KFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyOjptZW1vcnlVc2UgY29uc3QpOgorICAg
ICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEZWR1cEFkYXB0ZXI6OmR1bXBNZW1vcnlVc2VJbktC
IGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6Y29udGFpbnMpOgor
ICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0OjphZGRBbmRSZXR1cm5Jc05ld0VudHJ5
KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6YWRkKToKKyAgICAgICAgKFdU
Rjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVu
Y2VIYXNoU2V0OjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hT
ZXQ6OmZvckVhY2gpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0OjpzaXplIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6bWVtb3J5VXNlIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6ZHVtcE1lbW9yeVVzZUluS0Ig
Y29uc3QpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Y29u
dGFpbnMpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6YWRk
QW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVy
ZW5jZUdyYXBoOjphZGQpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaDo6Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aDo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aDo6c2V0TWF4SW5kZXgpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaDo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdy
YXBoOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNl
R3JhcGg6Om1lbW9yeVVzZSBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVy
ZmVyZW5jZUdyYXBoOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6Oklu
c3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6
CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0
ZXJhYmxlOjpiZWdpbiBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0ZXJhYmxl
SW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnN0cnVtZW50ZWRJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOjpvcGVyYXRvcltdIGNvbnN0KToK
KyAgICAgICAgKiB3dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaDoKKyAgICAgICAg
KFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6Okxpa2VseURlbnNlVW5zaWduZWRJ
bnRlZ2VyU2V0KToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6
OmNsZWFyKToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmFk
ZCk6CisgICAgICAgIChXVEY6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojplc3RpbWF0
ZUhhc2hTZXRTaXplKToKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJT
ZXQ6OnRyYW5zaXRpb25Ub0hhc2hTZXQpOgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDo6dHJhbnNpdGlvblRvQml0VmVjdG9yKToKKwogMjAyMS0wNS0yNiAgQ2Ft
ZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQgc2Jp
eCBnbHlwaHMgZnJvbSBiZWluZyByZW5kZXJlZCBpbiB0aGUgR1BVIHByb2Nlc3MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM4MjQxYmI2MDk4OC4uZmNjODgy
YjA3Zjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3
MSw2ICszNzEsNyBAQAogCQkzMTNFREVDOTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdGFja1RyYWNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM3QjJENjgyNjU0NkVBQTAwRERGRDNEIC8q
IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzM3QjJENjkyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAv
KiBJbnRlcmZlcmVuY2VHcmFwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcmZlcmVuY2VHcmFwaC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzN0M3Q0MyOTFFQTQwQTczMDA3QkQ5NTYg
LyogV2Vha0xpbmtpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0xp
bmtpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzgyMDI5RTI0NkM4NEIwMDk5
RkQ2NzY0IC8qIEFTQ0lJTGl0ZXJhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBBU0NJSUxpdGVyYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzkxQkQ2QkE0
RDE2NEZEMjk0RjlBOTNEIC8qIFN0ZE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTdGRNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzksNiArMTA4
MCw3IEBACiAJCQkJMzEzN0UxRDdEQkQ4NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJ
CQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFENjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCiAJCQkJ
QThBNDcyQkMxNTFBODI1QTAwNDEyM0ZGIC8qIElubGluZUFTTS5oICovLAorCQkJCTMzRkQ0ODEx
MjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5oICovLAogCQkJCUE3MERBMDgy
MTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNlcnRpb24uaCAqLywKIAkJCQk1MTgyQzIyQzFGMkJDN0U2
MDA1OUJBN0MgLyogSW5zdGFuY2VDb3VudGVkLmggKi8sCiAJCQkJMEY3RUI4NUIxRkE4RkY0MTAw
RjFBQkNCIC8qIElzb01hbGxvYy5oICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMTBkOWU4
MGQzNzguLmRkMGU4NjgyYjlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEwMCw2ICsxMDAs
NyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFERVJTCiAgICAgSW5saW5lQVNNLmgKICAgICBJbnNlcnRp
b24uaAogICAgIEluc3RhbmNlQ291bnRlZC5oCisgICAgSW50ZXJmZXJlbmNlR3JhcGguaAogICAg
IElzb01hbGxvYy5oCiAgICAgSXNvTWFsbG9jSW5saW5lcy5oCiAgICAgSXRlcmF0b3JBZGFwdG9y
cy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0
Zi9IYXNoU2V0LmgKaW5kZXggYTQwMmNlMjczNzVhLi4yYTI3MjgwNjBmNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgK
QEAgLTY1LDYgKzY1LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Owog
ICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3Q7CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CiAKICAgICB2b2lkIHJlc2VydmVJbml0
aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5Q291bnQpIHsgbV9pbXBsLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoa2V5Q291bnQpOyB9CkBAIC0yMDIsNiArMjAzLDEyIEBAIGlubGluZSB1bnNpZ25lZCBI
YXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBhY2l0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC5j
YXBhY2l0eSgpOyAKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgViwgdHlwZW5hbWUgVz4KK2lubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+Ojpt
ZW1vcnlVc2UoKSBjb25zdAoreworICAgIHJldHVybiBjYXBhY2l0eSgpICogc2l6ZW9mKFQpOwor
fQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFt
ZSBXPgogaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oIGIvU291cmNl
L1dURi93dGYvSW50ZXJmZXJlbmNlR3JhcGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAuLjA0MmZhZGE5YjYwNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYv
d3RmL0ludGVyZmVyZW5jZUdyYXBoLmgKQEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0xp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBmaWxlIG9mZmVycyBtdWx0aXBsZSBpbXBsZW1l
bnRhdGlvbnMgb2YgYSBzaW1wbGUgaW50ZXJmZXJlbmNlIGdyYXBoLCB3aXRoIHZhcnlpbmcgcGVy
Zm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgorLy8gQ29uY2VwdHVhbGx5IHRoZXkgYXJlIGp1c3Qg
c2V0cyBvZiBwYWlycyBvZiBpbnRlZ2VycworLy8gQWxsIG9mIHRoZW0gaGF2ZSB0aGUgc2FtZSBp
bnRlcmZhY2U6CisvLyAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
Ly8gICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2
KQorLy8gICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisvLyAgIHZvaWQgY2xl
YXIoKQorLy8gICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KQorLy8gICB2b2lkIHNldE1heElu
ZGV4KHVuc2lnbmVkIG4pCisvLyAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorLy8gICB1bnNpZ25lZCBzaXplKCkKKy8vICAgdW5zaWduZWQgbWVtb3J5VXNlKCkKKy8vICAg
dm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpCisvLyBUaHJlZSB1c2VmdWwgdHlwZSBhbGlhc2VzIGFy
ZSBkZWZpbmVkOgorLy8gICBTbWFsbEludGVyZmVyZW5jZUdyYXBoLCB3aGljaCBpcyB0aGUgZmFz
dGVzdCBidXQgaGFzIHF1YWRyYXRpYyBtZW1vcnkgdXNlIGluIHRoZSBtYXhpbXVtIHZlcnRleCBp
bmRleCAoYmVzdCBmb3IgbiA8IDQwMCBhcyBpdCBpcyBhbHJlYWR5IDIwa0IgYnkgdGhhdCBwb2lu
dCkKKy8vICAgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCwgYXMgbG9uZyBhcyB0aGUgaW5kaWNlcyBm
aXQgaW4gYSB1aW50MTZfdAorLy8gICBIdWdlSW50ZXJmZXJlbmNlR3JhcGggb3RoZXJ3aXNlCisv
LyBJZiB5b3UgbmVlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGluZGljZXMgdGhhdCBpbnRlcmZlcmUg
d2l0aCBhIGdpdmVuIGluZGV4LCB5b3UgbXVzdCB1c2UgdGhlIGZvbGxvd2luZzoKKy8vICAgU21h
bGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoCisvLyAgIExhcmdlSXRlcmFibGVJbnRlcmZlcmVu
Y2VHcmFwaAorLy8gICBIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gVGhlIGxhcmdl
IGFuZCBodWdlIHZlcnNpb25zIGFyZSAyeCB0aGUgbWVtb3J5IG9mIHRoZWlyIG5vbi1pdGVyYWJs
ZSB2ZXJzaW9ucywgYnV0IG9mZmVyIGFuIGFkZGl0aW9uYWwgb3BlcmF0b3JbXSBtZXRob2QsIHdo
aWNoIHJldHVybnMgYW4gaXRlcmFibGUgb2JqZWN0CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgSW50ZXJmZXJlbmNlQml0VmVjdG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5
cGUgPSBUOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYml0VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUsIHYpKTsKKyAg
ICB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4
VHlwZSB2KQorICAgIHsKKyAgICAgICAgYm9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5xdWlj
a1NldChpbmRleCh1LCB2KSk7CisgICAgICAgIG1fc2l6ZSArPSAhYWxyZWFkeUluOworICAgICAg
ICByZXR1cm4gIWFscmVhZHlJbjsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICAodm9pZCkgYWRkQW5kUmV0dXJuSXNOZXdFbnRy
eSh1LCB2KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fYml0
VmVjdG9yLmNsZWFyQWxsKCk7CisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9p
ZCBtYXlDbGVhcihJbmRleFR5cGUpIHsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25l
ZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4
VHlwZT46Om1heCgpKTsKKyAgICAgICAgbV9udW1FbGVtZW50cyA9IG47CisgICAgICAgIG1fYml0
VmVjdG9yLmVuc3VyZVNpemUobipuKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIGZvciAoSW5kZXhUeXBlIGkgPSAwOyBpIDwgbV9udW1FbGVtZW50czsgKytpKSB7
CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bUVsZW1lbnRz
OyArK2opIHsKKyAgICAgICAgICAgICAgICBpZiAobV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgo
aSwgaikpKQorICAgICAgICAgICAgICAgICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJu
IChtX2JpdFZlY3Rvci5zaXplKCkgKyA3KSA+PiAzOyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlV
c2VJbktCKCkgY29uc3QgeyBkYXRhTG9nKG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworICAgIHN0
cnVjdCBJdGVyYWJsZSB7CisgICAgICAgIHN0cnVjdCBpdGVyYXRvciB7CisgICAgICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9p
bmRleCA9IG1faXRlcmFibGUubV9iaXRWZWN0b3IuZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBJbmRleFR5cGUgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW5kZXhUeXBlPihtX2luZGV4IC0gbV9pdGVyYWJs
ZS5tX3N0YXJ0aW5nSW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIC8vIFdlIGNhbm5vdCBqdXN0IHVzZSBhIG5vcm1hbCBjb21wYXJpc29uIGJl
eW9uZCBtX2l0ZXJhYmxlLm1fZW5kLCBiZWNhdXNlIHRoZSBmaW5kQml0IGluIG9wZXJhdG9yKysg
bWF5IHNlbmQgdXMgcHJldHR5IG11Y2ggYW55d2hlcmUKKyAgICAgICAgICAgICAgICAvLyBXb3Jz
ZTogaXQgaXMgcG9zc2libGUgZm9yIHRoZSB1c2VyIG9mIHRoaXMgaXRlcmF0b3IgdG8gYWRkIGVs
ZW1lbnRzIHRvIHRoZSBpbnRlcmZlcmVuY2UgZ3JhcGggYmV0d2VlbiBjYWxscyB0byArKworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgd29uJ3QgaW52YWxpZGF0ZSB1cy9jYXVzZSBwcm9ibGVtcyBk
aXJlY3RseSwgYXMgdGhlIHVzZXIgd29uJ3QgYWZmZWN0IHRoZSBzbGljZSBvZiB0aGUgYml0IHZl
Y3RvciB0aGF0IHdlJ3JlIGl0ZXJhdGluZyBvdmVyLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0
aGV5IG1heSB3ZWxsIHNldCBiaXRzIGJleW9uZCBpdC4gU28gd2UgY2Fubm90IGNvbXB1dGUgYW4g
ImlkZWFsIiBlbmQgaXRlcmF0b3IgKGJ5IGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBiaXQgc2V0IGFm
dGVyIHRoZSBzbGljZSB3ZSBjYXJlIGFib3V0KSBhaGVhZCBvZiB0aW1lLgorICAgICAgICAgICAg
ICAgIC8vIEluc3RlYWQgd2Ugc2V0IG1fZW5kIHRvIGluZGV4KHUrMSwgMCkgKHNvIGp1c3QgYWZ0
ZXIgdGhlIHNsaWNlIG9mIGludGVyZXN0KSwgYW5kIHdlIHVzZSB0aGlzIHNsaWdodGx5IHdlaXJk
IGNvbXBhcmlzb24gb3BlcmF0b3IgdG8gc3RpbGwgc3RvcCBpbiB0aW1lIG9uY2Ugd2UgZ28gYmV5
b25kIGl0LgorICAgICAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1faXRlcmFibGUubV9lbmQg
JiYgb3RoZXIubV9pbmRleCA+PSBtX2l0ZXJhYmxlLm1fZW5kKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y29uc3QgSXRlcmFibGUmIG1faXRlcmFibGU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
eyAqdGhpcywgbV9iZWdpbiB9OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIHsgKnRoaXMsIG1fZW5kIH07IH0KKworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0
VmVjdG9yOworICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0aW5nSW5kZXg7CisgICAgICAgIHVuc2ln
bmVkIG1fYmVnaW47CisgICAgICAgIHVuc2lnbmVkIG1fZW5kOworICAgIH07CisKKyAgICBJdGVy
YWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWdu
ZWQgYmVnaW4gPSBtX2JpdFZlY3Rvci5maW5kQml0KGluZGV4KHUsIDApLCB0cnVlKTsKKyAgICAg
ICAgdW5zaWduZWQgZW5kID0gaW5kZXgodSArIDEsIDApOworICAgICAgICByZXR1cm4geyBtX2Jp
dFZlY3RvciwgaW5kZXgodSwgMCksIGJlZ2luLCBlbmQgfTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdW5zaWduZWQgaW5kZXgoSW5kZXhUeXBlIGksIEluZGV4VHlwZSBqKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGkgKiBtX251bUVsZW1lbnRzICsgajsKKyAgICB9CisKKyAgICBCaXRW
ZWN0b3IgbV9iaXRWZWN0b3I7CisgICAgdW5zaWduZWQgbV9zaXplIHswfTsKKyAgICBJbmRleFR5
cGUgbV9udW1FbGVtZW50czsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJ
VD4KK2NsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhU
eXBlID0gSVQ7CisgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbdV0uY29udGFpbnModik7CisgICAgfQorCisg
ICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05ld0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikK
KyAgICB7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fdmVjdG9yW3VdLmFkZCh2KS5pc05l
d0VudHJ5OworICAgICAgICBtX3NpemUgKz0gaXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGlz
TmV3RW50cnk7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2
KQorICAgIHsKKyAgICAgICAgKHZvaWQpIGFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7Cisg
ICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5jbGVhcigp
OworICAgICAgICBtX3NpemUgPSAwOworICAgIH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhU
eXBlIHUpIHsgbV92ZWN0b3JbdV0uY2xlYXIoKTsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1
bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRz
PEluZGV4VHlwZT46Om1heCgpKTsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKG4pOworICAgIH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fdmVjdG9yLnNpemUoKSA7ICsraSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUg
aiA6IG1fdmVjdG9yW2ldKQorICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAg
ICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQorCisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIG1lbW9yeSA9IDA7CisgICAgICAgIGZvciAoY29uc3QgVCYgc2V0IDogbV92ZWN0b3Ip
CisgICAgICAgICAgICBtZW1vcnkgKz0gc2V0Lm1lbW9yeVVzZSgpOworICAgICAgICByZXR1cm4g
bWVtb3J5OworICAgIH0KKworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRh
dGFMb2cobWVtb3J5VXNlKCkgLyAxMDI0KTsgfQorCisgICAgc3RydWN0IEl0ZXJhYmxlIHsKKyAg
ICAgICAgdXNpbmcgaXRlcmF0b3IgPSB0eXBlbmFtZSBUOjppdGVyYXRvcjsKKyAgICAgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3NldC5iZWdpbigpOyB9CisgICAgICAgIGl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmVuZCgpOyB9CisgICAgICAgIGNvbnN0
IFQmIG1fc2V0OworICAgIH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1
KSBjb25zdCB7IHJldHVybiB7IG1fdmVjdG9yW3VdIH07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8VD4gbV92ZWN0b3I7CisgICAgdW5zaWduZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitjbGFzcyBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXIgewor
cHVibGljOgorICAgIHVzaW5nIEluZGV4VHlwZSA9IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAg
ICB1c2luZyBJdGVyYWJsZSA9IHR5cGVuYW1lIFQ6Okl0ZXJhYmxlOworICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KSB7IHJldHVybiBtX3VuZGVybHlpbmcuY29udGFp
bnModSwgdik7IH0KKworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUg
dSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGlzTmV3RW50cnkxID0gbV91bmRl
cmx5aW5nLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdF
bnRyeTIgPSBtX3VuZGVybHlpbmcuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh2LCB1KTsKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRChpc05ld0VudHJ5MiwgaXNOZXdFbnRyeTEgPT0gaXNOZXdFbnRyeTIp
OworICAgICAgICByZXR1cm4gaXNOZXdFbnRyeTE7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5k
ZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgbV91bmRlcmx5aW5nLmFkZCh1
LCB2KTsKKyAgICAgICAgbV91bmRlcmx5aW5nLmFkZCh2LCB1KTsKKyAgICB9CisKKyAgICB2b2lk
IGNsZWFyKCkgeyBtX3VuZGVybHlpbmcuY2xlYXIoKTsgfQorICAgIHZvaWQgbWF5Q2xlYXIoSW5k
ZXhUeXBlIHUpIHsgbV91bmRlcmx5aW5nLm1heUNsZWFyKHUpOyB9CisgICAgdm9pZCBzZXRNYXhJ
bmRleCh1bnNpZ25lZCBuKSB7IG1fdW5kZXJseWluZy5zZXRNYXhJbmRleChuKTsgfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSB7IG1fdW5kZXJseWluZy5mb3JFYWNoKGZ1bmN0b3IpOyB9CisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJseWluZy5zaXplKCk7IH0KKyAgICB1bnNp
Z25lZCBtZW1vcnlVc2UoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmcubWVtb3J5VXNlKCk7
IH0KKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBtX3VuZGVybHlpbmcuZHVt
cE1lbW9yeVVzZUluS0IoKTsgfQorICAgIEl0ZXJhYmxlIG9wZXJhdG9yW10oSW5kZXhUeXBlIHUp
IGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJseWluZ1t1XTsgfQorCitwcml2YXRlOgorICAgIFQgbV91
bmRlcmx5aW5nOworfTsKKworLy8gVGhpcyBpcyBnZW5lcmFsbHkgYmV0dGVyIHRoYW4gdGhlIER1
cGxpY2F0aW5nIHZlcnNpb24sIHRoZXJlIGFyZSB0d28gcmVhc29ucyBub3QgdG8gdXNlIGl0IHRo
b3VnaDoKKy8vIC0gRm9yIEJpdFZlY3RvciwgaXQgaGFzIG5vIGVmZmVjdCBvbiBtZW1vcnkgdXNl
LCBhbmQgYWRkcyBhIGJyYW5jaCB0byBldmVyeSBjYWxsIHRvIGNvbnRhaW5zL2FkZEFuZFJldHVy
bklzTmV3RW50cnkKKy8vIC0gSXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBpdGVyYXRlIG92ZXIg
dGhlIGluZGljZXMgdGhhdCBpbnRlcmZlcmUgd2l0aCBhIHBhcnRpY3VsYXIgaW5kZXguIFRoaXMg
Y2FuIGJlIHJlcXVpcmVkIGZvciBzb21lIHVzZXMgKHNlZSBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFw
aENvbG9yaW5nKQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFVuZGlyZWN0ZWRFZGdlc0Rl
ZHVwQWRhcHRlciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gdHlwZW5hbWUgVDo6
SW5kZXhUeXBlOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
ICAgIHsKKyAgICAgICAgaWYgKHYgPCB1KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwor
ICAgICAgICByZXR1cm4gbV91bmRlcmx5aW5nLmNvbnRhaW5zKHUsIHYpOworICAgIH0KKworICAg
IGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisg
ICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Cisg
ICAgICAgIHJldHVybiBtX3VuZGVybHlpbmcuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgewor
ICAgICAgICBpZiAodiA8IHUpCisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAg
IG1fdW5kZXJseWluZy5hZGQodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV91
bmRlcmx5aW5nLmNsZWFyKCk7IH0KKyAgICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KSB7IG1f
dW5kZXJseWluZy5tYXlDbGVhcih1KTsgfQorICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQg
bikgeyBtX3VuZGVybHlpbmcuc2V0TWF4SW5kZXgobik7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeyBt
X3VuZGVybHlpbmcuZm9yRWFjaChmdW5jdG9yKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3VuZGVybHlpbmcuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgbWVtb3J5VXNl
KCkgY29uc3QgeyByZXR1cm4gbV91bmRlcmx5aW5nLm1lbW9yeVVzZSgpOyB9CisgICAgdm9pZCBk
dW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgbV91bmRlcmx5aW5nLmR1bXBNZW1vcnlVc2VJbktC
KCk7IH0KKworcHJpdmF0ZToKKyAgICBUIG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoZSBiaXQg
dmVjdG9yIGFwcHJvYWNoIHVzZXMgbipuIGJpdHMsIG9yIDIwa0IgZm9yIG4gPSA0MDAuCitjb25z
dGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZvclNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7Cit1
c2luZyBEZWZhdWx0U21hbGxJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxp
Y2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVuY2VCaXRWZWN0b3I8dWludDE2X3Q+PjsKK3VzaW5nIERl
ZmF1bHRTbWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0U21hbGxJbnRlcmZl
cmVuY2VHcmFwaDsKK3VzaW5nIERlZmF1bHRMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJl
Y3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDx1aW50MTZfdD4sIHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0SHVnZUlu
dGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5j
ZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90
Pj47Cit1c2luZyBEZWZhdWx0TGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJl
Y3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5z
ZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MTZfdD4sIHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0
SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGlu
Z0FkYXB0ZXI8SW50ZXJmZXJlbmNlVmVjdG9yPExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0
PHVpbnQzMl90PiwgdWludDMyX3Q+PjsKKworLy8gU2V0IHRvIG9uZSB0byBydW4gYSByZWZlcmVu
Y2UgaW1wbGVtZW50YXRpb24gaW4gcGFyYWxsZWwgd2l0aCB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1
Y3R1cmUsIHZlcmlmeWluZyB0aGF0IHRoZXkgYWdyZWUgb24gZXZlcnkgbWV0aG9kIGNhbGwuCisv
LyBCZXdhcmU6IHRoaXMgaXMgbmF0dXJhbGx5IG11Y2ggc2xvd2VyIGFuZCBtZW1vcnkgaHVuZ3J5
CisjZGVmaW5lIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSCAwCisjaWYgIVRFU1Rf
T1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSAorCit1c2luZyBTbWFsbEludGVyZmVyZW5jZUdy
YXBoID0gRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBMYXJnZUludGVyZmVy
ZW5jZUdyYXBoID0gRGVmYXVsdExhcmdlSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBIdWdlSW50
ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdyYXBoOworCit1c2luZyBT
bWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVy
ZmVyZW5jZUdyYXBoOwordXNpbmcgTGFyZ2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVm
YXVsdExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIEh1Z2VJdGVyYWJsZUlu
dGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOwor
CisjZWxzZSAvLyBURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKKworLy8gVGhpcyBp
cyBhbiB1bm9wdGltaXplZCByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24sIGZvciB1c2Ugd2l0aCBJ
bnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaCBiZWxvdwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5
cGUgPSBUOworICAgIHVzaW5nIEludGVyZmVyZW5jZUVkZ2UgPSBzdGQ6OnBhaXI8SW5kZXhUeXBl
LCBJbmRleFR5cGU+OworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9
CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmFkZCh7IHUsIHYgfSkuaXNOZXdFbnRy
eTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAg
eworICAgICAgICBtX3NldC5hZGQoeyB1LCB2IH0pOworICAgIH0KKworICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1h
eEluZGV4KHVuc2lnbmVkIG4pCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBz
dGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAg
ICAgICBmdW5jdG9yKGVkZ2UpOworICAgIH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX3NldC5zaXplKCk7IH0KKworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2V0LmNhcGFjaXR5KCkgKiBzaXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0K
KworICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNl
KCkgLyAxMDI0KTsgfQorCitwcml2YXRlOgorICAgIEhhc2hTZXQ8SW50ZXJmZXJlbmNlRWRnZT4g
bV9zZXQ7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIElu
c3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5
cGUgPSB0eXBlbmFtZSBUOjpJbmRleFR5cGU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3Nh
bWU8SW5kZXhUeXBlLCB0eXBlbmFtZSBVOjpJbmRleFR5cGU+Ojp2YWx1ZSk7CisgICAgYm9vbCBj
b250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGNv
bnRhaW5zSW5BID0gbV9zZXRBLmNvbnRhaW5zKHUsIHYpOworICAgICAgICBib29sIGNvbnRhaW5z
SW5CID0gbV9zZXRCLmNvbnRhaW5zKHUsIHYpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250
YWluc0luQSA9PSBjb250YWluc0luQik7CisgICAgICAgIHJldHVybiBjb250YWluc0luQTsKKyAg
ICB9CisKKyAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4
VHlwZSB2KQorICAgIHsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRS
ZXR1cm5Jc05ld0VudHJ5KHUsIHYpOworICAgICAgICBib29sIGlzTmV3RW50cnlCID0gbV9zZXRC
LmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlz
TmV3RW50cnlBID09IGlzTmV3RW50cnlCKTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnlBOwor
ICAgIH0KKworICAgIHZvaWQgYWRkKEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7Cisg
ICAgICAgIG1fc2V0QS5hZGQodSwgdik7CisgICAgICAgIG1fc2V0Qi5hZGQodSwgdik7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3NldEEuY2xlYXIoKTsKKyAg
ICAgICAgbV9zZXRCLmNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBtYXlDbGVhcihJbmRleFR5
cGUgdSkKKyAgICB7CisgICAgICAgIG1fc2V0QS5tYXlDbGVhcih1KTsKKyAgICAgICAgbV9zZXRC
Lm1heUNsZWFyKHUpOworICAgIH0KKworICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikK
KyAgICB7CisgICAgICAgIEFTU0VSVChuIDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+
OjptYXgoKSk7CisgICAgICAgIG1fc2V0QS5zZXRNYXhJbmRleChuKTsKKyAgICAgICAgbV9zZXRC
LnNldE1heEluZGV4KG4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgbV9zZXRBLmZvckVhY2goZnVuY3Rvcik7CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7Cisg
ICAgICAgIHVuc2lnbmVkIHNpemVCID0gbV9zZXRCLnNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoc2l6ZUEgPT0gc2l6ZUIpOworICAgICAgICByZXR1cm4gc2l6ZUE7CisgICAgfQorCisg
ICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Nl
dEEubWVtb3J5VXNlKCkgKyBtX3NldEIubWVtb3J5VXNlKCk7CisgICAgfQorCisgICAgdm9pZCBk
dW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0CisgICAgeworICAgICAgICBkYXRhTG9nKG1fc2V0QS5t
ZW1vcnlVc2UoKSAvIDEwMjQsICIgLT4gIiwgbV9zZXRCLm1lbW9yeVVzZSgpIC8gMTAyNCk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgVCBtX3NldEE7CisgICAgVSBtX3NldEI7Cit9OworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIEluc3RydW1lbnRlZEl0ZXJh
YmxlSW50ZXJmZXJlbmNlR3JhcGggOiBwdWJsaWMgSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3Jh
cGg8VCwgVT4geworcHVibGljOgorICAgIHVzaW5nIEJhc2UgPSBJbnN0cnVtZW50ZWRJbnRlcmZl
cmVuY2VHcmFwaDxULCBVPjsKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBCYXNlOjpJ
bmRleFR5cGU7CisKKyAgICBzdHJ1Y3QgSXRlcmFibGUgeworICAgICAgICBJdGVyYWJsZSh0eXBl
bmFtZSBUOjpJdGVyYWJsZSBpdGVyYWJsZUEsIHR5cGVuYW1lIFU6Okl0ZXJhYmxlIGl0ZXJhYmxl
QikKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgdmFsdWUgOiBpdGVyYWJs
ZUEpCisgICAgICAgICAgICAgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAg
IFZlY3RvcjxJbmRleFR5cGU+IHZhbHVlc0I7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSB2
YWx1ZSA6IGl0ZXJhYmxlQikKKyAgICAgICAgICAgICAgICB2YWx1ZXNCLmFwcGVuZCh2YWx1ZSk7
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlcy5zaXplKCkgPT0gdmFsdWVzQi5z
aXplKCkpOworICAgICAgICAgICAgc3RkOjpzb3J0KG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVz
LmVuZCgpKTsKKyAgICAgICAgICAgIHN0ZDo6c29ydCh2YWx1ZXNCLmJlZ2luKCksIHZhbHVlc0Iu
ZW5kKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVzW2ldID09
IHZhbHVlc0JbaV0pOworICAgICAgICB9CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5h
bWUgVmVjdG9yPEluZGV4VHlwZT46OmNvbnN0X2l0ZXJhdG9yOworCisgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVzLmJl
Z2luKCk7CisgICAgICAgIH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOworICAgICAgICB9CisKKyAgICAg
ICAgVmVjdG9yPEluZGV4VHlwZT4gbV92YWx1ZXM7CisgICAgfTsKKworICAgIEl0ZXJhYmxlIG9w
ZXJhdG9yW10oSW5kZXhUeXBlIHUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4geyBCYXNl
OjptX3NldEFbdV0sIEJhc2U6Om1fc2V0Qlt1XSB9OworICAgIH0KK307CisKK3VzaW5nIFJlZmVy
ZW5jZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVy
ZmVyZW5jZUhhc2hTZXQ8dWludDE2X3Q+PjsKK3VzaW5nIEh1Z2VSZWZlcmVuY2VJbnRlcmZlcmVu
Y2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VIYXNoU2V0
PHVpbnQzMl90Pj47CisKK3VzaW5nIFNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50
ZWRJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNt
YWxsSW50ZXJmZXJlbmNlR3JhcGg+OwordXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IElu
c3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoPFJlZmVyZW5jZUludGVyZmVyZW5jZUdyYXBoLCBE
ZWZhdWx0TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBIdWdlSW50ZXJmZXJlbmNlR3Jh
cGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxIdWdlUmVmZXJlbmNlSW50ZXJmZXJl
bmNlR3JhcGgsIERlZmF1bHRIdWdlSW50ZXJmZXJlbmNlR3JhcGg+OworCit1c2luZyBSZWZlcmVu
Y2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdB
ZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxIYXNoU2V0PHVpbnQxNl90LCBJbnRIYXNoPHVpbnQx
Nl90PiwgVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDE2X3Q+PiwgdWludDE2X3Q+
PjsKK3VzaW5nIEh1Z2VSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJl
Y3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxIYXNoU2V0PHVp
bnQzMl90LCBJbnRIYXNoPHVpbnQzMl90PiwgVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8
dWludDMyX3Q+PiwgdWludDMyX3Q+PjsKKwordXNpbmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5j
ZUdyYXBoID0gSW5zdHJ1bWVudGVkSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5j
ZUdyYXBoPjsKK3VzaW5nIExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1l
bnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg8UmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVu
Y2VHcmFwaCwgRGVmYXVsdExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBI
dWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGg8SHVnZVJlZmVyZW5jZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1
bHRIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD47CisKKyNlbmRpZiAvLyBURVNUX09QVElN
SVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6U21hbGxJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIFdURjo6TGFyZ2VJbnRlcmZlcmVuY2VH
cmFwaDsKK3VzaW5nIFdURjo6SHVnZUludGVyZmVyZW5jZUdyYXBoOwordXNpbmcgV1RGOjpTbWFs
bEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBXVEY6OkxhcmdlSXRlcmFibGVJbnRl
cmZlcmVuY2VHcmFwaDsKK3VzaW5nIFdURjo6SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dC5oIGIvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaAppbmRl
eCA5YjZiM2Q4N2U3ODQuLjg4ZTNmNDUxMDk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MaWtl
bHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX21pbigwKQogICAgICAgICAsIG1fbWF4KDApCiAgICAgewotICAgICAgICBuZXcg
KCZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcjsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAm
bV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3I7CiAgICAgfQogCiAgICAgfkxpa2VseURlbnNl
VW5zaWduZWRJbnRlZ2VyU2V0KCkKQEAgLTcwLDkgKzcwLDIyIEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX21heChvdGhlci5tX21heCkKICAgICB7CiAgICAgICAgIGlmIChpc0JpdFZlY3RvcigpKQot
ICAgICAgICAgICAgbmV3ICgmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShv
dGhlci5tX2lubGluZS5iaXRWZWN0b3IpKTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1f
aW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yKFdURk1vdmUob3RoZXIubV9pbmxpbmUuYml0VmVj
dG9yKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG5ldyAoJm1faW5saW5lLmhhc2hTZXQp
IFNldChXVEZNb3ZlKG90aGVyLm1faW5saW5lLmhhc2hTZXQpKTsKKyAgICAgICAgICAgIG5ldyAo
Tm90TnVsbCwgJm1faW5saW5lLmhhc2hTZXQpIFNldChXVEZNb3ZlKG90aGVyLm1faW5saW5lLmhh
c2hTZXQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2l6
ZSA9IDA7CisgICAgICAgIG1fbWluID0gMDsKKyAgICAgICAgbV9tYXggPSAwOworICAgICAgICBp
ZiAoaXNCaXRWZWN0b3IoKSkKKyAgICAgICAgICAgIG1faW5saW5lLmJpdFZlY3Rvci5jbGVhckFs
bCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1faW5saW5lLmhhc2hTZXQufkhhc2hT
ZXQoKTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0
VmVjdG9yOworICAgICAgICB9CiAgICAgfQogCiAgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUg
dmFsdWUpIGNvbnN0CkBAIC0xMzEsOSArMTQ0LDcgQEAgcHVibGljOgogICAgICAgICBJbmRleFR5
cGUgbmV3TWluID0gc3RkOjptaW4obV9taW4sIHZhbHVlKTsKICAgICAgICAgSW5kZXhUeXBlIG5l
d01heCA9IHN0ZDo6bWF4KG1fbWF4LCB2YWx1ZSk7CiAgICAgICAgIHVuc2lnbmVkIGJpdFZlY3Rv
clNpemUgPSAobmV3TWF4IC0gbmV3TWluKSAvIDg7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hTZXRF
c3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVhZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFy
Z2UgSGFzaFNldCBpcyA1MCUKLSAgICAgICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0
eSA9IHN0ZDo6bWF4KDh1LCBtX3NpemUpICogaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJo
ZWFkOwotICAgICAgICB1bnNpZ25lZCB3b3VsZEJlSGFzaFNldFNpemUgPSB3b3VsZEJlSGFzaFNl
dENhcGFjaXR5ICogc2l6ZW9mKEluZGV4VHlwZSk7CisgICAgICAgIHVuc2lnbmVkIHdvdWxkQmVI
YXNoU2V0U2l6ZSA9IGVzdGltYXRlSGFzaFNldFNpemUobV9zaXplKTsKICAgICAgICAgaWYgKHdv
dWxkQmVIYXNoU2V0U2l6ZSAqIDIgPCBiaXRWZWN0b3JTaXplKSB7CiAgICAgICAgICAgICB0cmFu
c2l0aW9uVG9IYXNoU2V0KCk7CiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW5saW5lLmhh
c2hTZXQuYWRkKHZhbHVlKTsKQEAgLTI2OSw2ICsyODAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICYmICFVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czxJbmRleFR5cGU+Ojppc0RlbGV0
ZWRWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCisgICAgdW5zaWduZWQgZXN0aW1hdGVIYXNoU2V0U2l6
ZSh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgaGFzaFNldEVzdGltYXRlZE9j
Y3VwYW5jeU92ZXJoZWFkID0gMzsgLy8gbWF4IG9jY3VwYW5jeSBmb3IgYSBsYXJnZSBIYXNoU2V0
IGlzIDUwJQorICAgICAgICB1bnNpZ25lZCB3b3VsZEJlSGFzaFNldENhcGFjaXR5ID0gc3RkOjpt
YXgoOHUsIG4pICogaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJoZWFkOworICAgICAgICBy
ZXR1cm4gd291bGRCZUhhc2hTZXRDYXBhY2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgIH0K
KwogICAgIHZvaWQgdHJhbnNpdGlvblRvSGFzaFNldCgpCiAgICAgewogICAgICAgICBBU1NFUlQo
aXNCaXRWZWN0b3IoKSk7CkBAIC0yNzgsNyArMjk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9y
IChJbmRleFR5cGUgb2xkSW5kZXggOiBtX2lubGluZS5iaXRWZWN0b3IpCiAgICAgICAgICAgICBu
ZXdTZXQuYWRkKG9sZEluZGV4ICsgbV9taW4pOwogICAgICAgICBtX2lubGluZS5iaXRWZWN0b3Iu
fkJpdFZlY3RvcigpOwotICAgICAgICBuZXcgKCZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92
ZShuZXdTZXQpKTsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuaGFzaFNldCkgU2V0
KFdURk1vdmUobmV3U2V0KSk7CiAgICAgICAgIG1fc2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKTsKIAogICAgICAgICBBU1NFUlQoIWlzQml0VmVjdG9yKCkpOwpAQCAt
Mjk3LDcgKzMxNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5ld0Jp
dFZlY3Rvci5xdWlja0dldCgwKSk7CiAgICAgICAgIG1faW5saW5lLmhhc2hTZXQuflNldCgpOwot
ICAgICAgICBuZXcgKCZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0Jp
dFZlY3RvcikpOworICAgICAgICBuZXcgKE5vdE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJp
dFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZlY3RvcikpOwogCiAgICAgICAgIEFTU0VSVChpc0JpdFZl
Y3RvcigpKTsKICAgICB9Cg==
</data>
<flag name="commit-queue"
          id="451267"
          type_id="3"
          status="-"
          setter="rmorisset"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429966</attachid>
            <date>2021-05-27 17:45:48 -0700</date>
            <delta_ts>2021-05-27 19:08:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch226258</filename>
            <type>text/plain</type>
            <size>64858</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDg4ZWNmMmJhNTU0My4uZTMyZjI2OTVkYWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAyMS0wNS0yNiAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIEFpckFsbG9jYXRl
U3RhY2tCeUdyYXBoQ29sb3Jpbmcgc2hvdWxkIHVzZSB0aGUgb3B0aW1pemVkIGludGVyZmVyZW5j
ZSBncmFwaHMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2MjU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgUGhpbCBQaXpsby4KKworICAgICAgICBUaGUgbWFpbiBjaGFuZ2UgaW4g
dGhpcyBwYXRjaCBpcyB0aGF0IEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcgaXMgbm93
IHVzaW5nIHRoZSBvcHRpbWl6ZWQgZGF0YXN0cnVjdHVyZXMgaW4gd3RmL0ludGVyZmVyZW5jZUdy
YXBoLmguCisgICAgICAgIFRoaXMgcmVxdWlyZWQgdGVtcGxhdGluZyBtb3N0IG9mIGl0IG92ZXIg
dGhlIGludGVyZmVyZW5jZSBncmFwaCB1c2VkIChTbWFsbC9MYXJnZS9IdWdlKSwgYnV0IEkgdHJp
ZWQga2VlcGluZyBzb21lIGNvbW1vbiBwYXJ0cyBvdXQgb2YgdGhlIHRlbXBsYXRlZCBjbGFzcyB0
byBtaW5pbWl6ZSB0aGUgaW1wYWN0IG9uIGNvbXBpbGUgdGltZXMgYW5kIGJpbmFyeSBzaXplLgor
CisgICAgICAgIEEgY29uc2VxdWVuY2Ugb2YgdGhhdCBjaGFuZ2UgaXMgdGhhdCBjb2FsZXNjYWJs
ZU1vdmVzIGFuZCByZW1hcHBlZFN0YWNrU2xvdHMgbm93IHN0b3JlIGluZGljZXMgaW5zdGVhZCBv
ZiBkaXJlY3QgcG9pbnRlcnMgdG8gU3RhY2tTbG90cywgcmVzdWx0aW5nIGluIGEgbWVtb3J5IHJl
ZHVjdGlvbiBvZiBhYm91dCAzeCBhcyB3ZWxsLgorCisgICAgICAgIEFub3RoZXIgY29uc2VxdWVu
Y2UgaXMgdGhhdCBJIGhhZCB0byBzbGlnaHRseSBhbHRlciB0aGUgd2F5IHRoYXQgY29hbGVzY2lu
ZyB3b3JrczogaW5zdGVhZCBvZiBjYXJlZnVsbHkgcmVtb3ZpbmcgdGhlIGludGVyZmVyZW5jZSBl
ZGdlcyBvZiB0aGUga2lsbGVkIHNsb3QsIHdlIHNpbXBseSB1c2UgbWF5Q2xlYXIoKSB3aGljaCBp
cyBub3QgZ3VhcmFudGVlZCB0byByZW1vdmUgYW55dGhpbmcuCisgICAgICAgIEkgYmVsaWV2ZSB0
aGF0IHRoaXMgaXMgc291bmQsIGJlY2F1c2UgZXZlcnkgc3Vic2VxdWVudCBhY2Nlc3MgdG8gbV9p
bnRlcmZlcmVuY2UgY2hlY2tzIHdoZXRoZXIgYSBzbG90IGhhcyBiZWVuIGNvYWxlc2NlZCBmaXJz
dCwgc28gZHJvcHBpbmcgdGhlc2UgZWRnZXMgaXMgcHVyZWx5IGEgbWVtb3J5IHNhdmluZywgYnV0
IGhhcyBubyBsb2dpY2FsIGVmZmVjdC4KKworICAgICAgICBUaGUgbmV3IGNvZGUgd2FzIHRlc3Rl
ZCBpbiBhIGZldyB3YXlzOgorICAgICAgICAtIHJ1bm5pbmcgb24gSmV0U3RyZWFtMiB3aXRoIGFz
YW4KKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgd2l0aCBURVNUX09QVElNSVpFRF9J
TlRFUkZFUkVOQ0VfR1JBUEgKKyAgICAgICAgLSBydW5uaW5nIG9uIEpldFN0cmVhbTIgYW5kIGxv
Z2dpbmcgdGhlIGZyYW1lIHNpemVzIGF0IHRoZSBlbmQgb2YgdGhpcyBwaGFzZSwgYW5kIGNvbXBh
cmluZyB0byB0aGUgcmVzdWx0cyBvZiBkb2luZyB0aGUgc2FtZSBvbiBUb1QgKHNhbWUgYXZlcmFn
ZSBmcmFtZSBzaXplKQorCisgICAgICAgIFRoZSB0d28gZnVuY3Rpb25zIHdoZXJlIHRoaXMgY29k
ZSBoYWQgdGhlIGxhcmdlc3QgbWVtb3J5IGZvb3RwcmludCBpbiBKZXRTdHJlYW0yIHdlcmUgYm90
aCBpbiB0c2Ytd2FzbS4KKyAgICAgICAgT25lIGhhcyA3NTEgc3RhY2sgc2xvdHMsIGFuZCBoYWQg
YW4gaW50ZXJmZXJlbmNlIGdyYXBoIG9mIDIuMU1CIGFuZCBhIGNvYWxlc2NhYmxlTW92ZXMgdmVj
dG9yIG9mIDQ0MGtCCisgICAgICAgIFRoZSBvdGhlciBoYXMgNjczIHN0YWNrIHNsb3RzLCBhbmQg
aGFkIGFuIGludGVyZmVyZW5jZSBncmFwaCBvZiAxLjlNQiBhbmQgYSBjb2FsZXNjYWJsZU1vdmVz
IHZlY3RvciBvZiA0MjFrQi4KKyAgICAgICAgV2l0aCB0aGlzIHBhdGNoLCB0aGV5IHJlc3BlY3Rp
dmVseSB1c2UgNzlrQisxNDZrQiBhbmQgNjdrQisxNDBrQgorICAgICAgICBUaGUgZWZmZWN0IG9u
IHRoZSByZXN0IG9mIEpldFN0cmVhbTIgaXMgbGVzcyBsaWtlbHkgdG8gbWF0dGVyIGFzIGZldyBm
dW5jdGlvbnMgdXNlZCBtb3JlIHRoYW4gYSBmZXcgZG96ZW5zIG9mIGtCIGluIHRoaXMgcGhhc2Us
IGJ1dCBpbiBwZXJjZW50YWdlcyBhcmUganVzdCBhcyBodWdlLgorCisgICAgICAgIE1vcmUgaW1w
b3J0YW50bHkgKGFuZCB0aGUgcmVhc29uIEkgd3JvdGUgdGhpcyBwYXRjaCBpbiB0aGUgZmlyc3Qg
cGxhY2UpLCBJIGNoZWNrZWQgbXJ1Ynktd2FzbS5hb3Rva2kuZGV2IHdoaWNoIHdpdGggYSBmZXcg
b3RoZXIgcGFnZXMgZm9yY2VkIHVzIHRvIGxvd2VyIE9wdGlvbnM6Om1heGltdW1UbXBzRm9yR3Jh
cGhDb2xvcmluZyBiZWNhdXNlIG9mIGpldHNhbXMuCisgICAgICAgIEl0IGhhcyB0d28gbWFzc2l2
ZSBmdW5jdGlvbnMgdGhhdCByZWFjaCB0aGlzIHBoYXNlIGlmIEkgaW5jcmVhc2UgT3B0aW9uczo6
bWF4aW11bVRtcHNGb3JHcmFwaENvbG9yaW5nOgorICAgICAgICAtIGFib3V0IDZrIHN0YWNrIHNs
b3RzIC0+IDIxNU1CICsgNk1CIChpbnRlcmZlcmVuY2UgZ3JhcGggKyBjb2FsZXNjYWJsZU1vdmVz
KQorICAgICAgICAtIGFib3V0IDlrIHN0YWNrIHNsb3RzIC0+IDM5NU1CICsgNE1CCisgICAgICAg
IEFmdGVyIHRoaXMgcGF0Y2gsIHRoZXkgcmVzcGVjdGl2ZWx5IHVzZSA0LjVNQisyTUIgYW5kIDlN
QisxLjVNQiwgb3Igcm91Z2hseSBhIDQweCBpbXByb3ZlbWVudC4KKyAgICAgICAgQ29tYmluZWQg
d2l0aCB0aGUgcmVjZW50IGltcHJvdmVtZW50cyB0byB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLCBJ
IGhvcGUgdG8gYmUgYWJsZSB0byBpbmNyZWFzZSBPcHRpb25zOjptYXhpbXVtVG1wc0ZvckdyYXBo
Q29sb3Jpbmcgc29vbiAoaW4gYSBkaWZmZXJlbnQgcGF0Y2ggZm9yIGVhc2llciBiaXNlY3Rpb24g
aWYgZWl0aGVyIGNhdXNlIGEgcGVyZiByZWdyZXNzaW9uKS4KKyAgICAgICAgVGhpcyB3b3VsZCBi
ZSBoZWxwZnVsLCBzaW5jZSBpdHMgbG93ZXJpbmcgY3JhdGVyZWQgb3VyIHBlcmZvcm1hbmNlIG9u
IHNvbWUgb3RoZXIgd2FzbSBhcHBsaWNhdGlvbiBieSA4eC4KKworICAgICAgICBJbiB0ZXJtcyBv
ZiBjb21waWxlIHRpbWVzLCB0aGlzIHBhdGNoIGxvd2VyZWQgdGhlIHRpbWUgc3BlbnQgaW4gQWxs
b2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZyBvdmVyIHRoZSBjb3Vyc2Ugb2YgYSBydW4gb2YgSmV0
U3RyZWFtMiBmcm9tIHJvdWdobHkgMzUwbXMgdG8gcm91Z2hseSAyNzBtcy4KKyAgICAgICAgVGhp
cyBpcyBhbG1vc3QgY2VydGFpbmx5IG5lZ2xpZ2libGUsIGJ1dCBhdCBsZWFzdCBpdCBndWFyYW50
ZWVzIHRoYXQgaXQgZGlkIG5vdCByZWdyZXNzLgorCisgICAgICAgICogYjMvYWlyL0FpckFsbG9j
YXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nLmNwcDoKKyAgICAgICAgKiBiMy9haXIvQWlyQWxs
b2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcpOgorCiAyMDIxLTA1LTI3ICBBZHJpYW4gUGVyZXog
ZGUgQ2FzdHJvICA8YXBlcmV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgTm9uLXVuaWZpZWQgYnVp
bGQgZml4ZXMsIGxhdGUgTWF5IDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFw
aENvbG9yaW5nLmNwcAppbmRleCA5ZTE2MjM3YTdiZGIuLjAyMmQyOTk5MzUxMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5R3Jh
cGhDb2xvcmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVJlZ2lzdGVyc0J5R3JhcGhDb2xvcmluZy5jcHAKQEAgLTM5LDcgKzM5LDcgQEAKICNpbmNs
dWRlICJBaXJVc2VDb3VudHMuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoVHJhaXRzLmg+Ci0jaW5jbHVkZSA8d3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0ludGVyZmVyZW5jZUdyYXBoLmg+CiAjaW5jbHVkZSA8
d3RmL1NtYWxsU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC01MiwyMzggKzUy
LDYgQEAgc3RhdGljIGNvbnN0ZXhwciBib29sIHRyYWNlRGVidWcgPSBmYWxzZTsKIHN0YXRpYyBj
b25zdGV4cHIgYm9vbCByZXBvcnRTdGF0cyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29s
IHJlcG9ydEludGVyZmVyZW5jZUdyYXBoTWVtb3J5VXNlID0gZmFsc2U7CiAKLXRlbXBsYXRlIDx0
eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnRlcmZlcmVuY2VIYXNoU2V0IHsKLSAgICAvLyBJ
bnRlcmZlcmVuY2UgZWRnZXMgYXJlIG5vdCBkaXJlY3RlZC4gQW4gZWRnZSBiZXR3ZWVuIGFueSB0
d28gVG1wcyBpcyByZXByZXNlbnRlZAotICAgIC8vIGJ5IHRoZSBjb25jYXRlbmF0ZWQgdmFsdWVz
ICh0aHJvdWdoIFRtcE1hcHBlcikgb2YgdGhlIHNtYWxsZXN0IFRtcCBmb2xsb3dlZCBieSB0aGUg
YmlnZ2VyIFRtcC4KLSAgICB1c2luZyBJbnRlcmZlcmVuY2VFZGdlID0gc3RkOjpwYWlyPEluZGV4
VHlwZSwgSW5kZXhUeXBlPjsKLXB1YmxpYzoKLSAgICBib29sIGNvbnRhaW5zKEluZGV4VHlwZSB1
LCBJbmRleFR5cGUgdikKLSAgICB7Ci0gICAgICAgIGlmICh2IDwgdSkKLSAgICAgICAgICAgIHN0
ZDo6c3dhcCh1LCB2KTsKLSAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsK
LSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIElu
ZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpz
d2FwKHUsIHYpOwotICAgICAgICByZXR1cm4gbV9zZXQuYWRkKHsgdSwgdiB9KS5pc05ld0VudHJ5
OwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9zZXQuY2xlYXIo
KTsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVkIG4pCi0gICAgewot
ICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlw
ZT46Om1heCgpKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KLSAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKLSAgICB7Ci0gICAgICAgIGZv
ciAoYXV0byBlZGdlIDogbV9zZXQpCi0gICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXplKCk7IH0KLQot
ICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmNhcGFjaXR5KCkg
KiBzaXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUlu
S0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBIYXNoU2V0PEludGVyZmVyZW5jZUVkZ2U+IG1fc2V0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIEluZGV4VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZVZlY3RvciB7Ci1w
dWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAg
ewotICAgICAgICBpZiAodiA8IHUpCi0gICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7Ci0gICAg
ICAgIHJldHVybiBtX3ZlY3Rvclt1XS5jb250YWlucyh2KTsKLSAgICB9Ci0KLSAgICBib29sIGFk
ZEFuZFJldHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAg
ICAgICAgaWYgKHYgPCB1KQotICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOwotICAgICAgICBi
b29sIGlzTmV3RW50cnkgPSBtX3ZlY3Rvclt1XS5hZGQodikuaXNOZXdFbnRyeTsKLSAgICAgICAg
bV9zaXplICs9IGlzTmV3RW50cnk7Ci0gICAgICAgIHJldHVybiBpc05ld0VudHJ5OwotICAgIH0K
LQotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92ZWN0b3IuY2xlYXIoKTsKLSAg
ICAgICAgbV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2ln
bmVkIG4pCi0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5k
ZXhUeXBlPjo6bWF4KCkpOwotICAgICAgICBtX3ZlY3Rvci5yZXNpemUobik7Ci0gICAgfQotCi0g
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpIDsgKytpKSB7Ci0gICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBqIDog
bV92ZWN0b3JbaV0pCi0gICAgICAgICAgICAgICAgZnVuY3Rvcih7IGksIGogfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
Ci0KLSAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdAotICAgIHsKLSAgICAgICAgdW5zaWdu
ZWQgbWVtb3J5ID0gMDsKLSAgICAgICAgZm9yIChjb25zdCBUJiBzZXQgOiBtX3ZlY3RvcikKLSAg
ICAgICAgICAgIG1lbW9yeSArPSBzZXQubWVtb3J5VXNlKCk7Ci0gICAgICAgIHJldHVybiBtZW1v
cnk7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0IHsgZGF0YUxv
ZyhtZW1vcnlVc2UoKS8xMDI0KTsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxUPiBtX3ZlY3Rv
cjsKLSAgICB1bnNpZ25lZCBtX3NpemUgezB9OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIElu
ZGV4VHlwZT4KLWNsYXNzIEludGVyZmVyZW5jZUJpdFZlY3RvciB7Ci1wdWJsaWM6Ci0gICAgYm9v
bCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewotICAgICAgICByZXR1
cm4gbV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgodSwgdikpOwotICAgIH0KLQotICAgIGJvb2wg
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCi0gICAgewot
ICAgICAgICAvLyBOb3RlOiB3ZSBjb3VsZCBkbyBvbmx5IG9uZSBxdWlja1NldCwgYXQgdGhlIGNv
c3Qgb2Ygb25lIGV4dHJhIGJyYW5jaCBpbiBldmVyeSBjb250YWlucy9hZGRBbmRSZXR1cm5Jc05l
d0VudHJ5ICh0byBlbmZvcmNlIHUgPCB2KQotICAgICAgICBib29sIGFscmVhZHlJbiA9IG1fYml0
VmVjdG9yLnF1aWNrU2V0KGluZGV4KHUsIHYpKTsKLSAgICAgICAgYm9vbCBhbHJlYWR5SW4yID0g
bV9iaXRWZWN0b3IucXVpY2tTZXQoaW5kZXgodiwgdSkpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KGFscmVhZHlJbjIsIGFscmVhZHlJbiA9PSBhbHJlYWR5SW4yKTsKLSAgICAgICAgbV9zaXplICs9
ICFhbHJlYWR5SW47Ci0gICAgICAgIHJldHVybiAhYWxyZWFkeUluOwotICAgIH0KLQotICAgIHZv
aWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9iaXRWZWN0b3IuY2xlYXJBbGwoKTsKLSAgICAg
ICAgbV9zaXplID0gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHNldE1heFRtcEluZGV4KHVuc2lnbmVk
IG4pCi0gICAgewotICAgICAgICBBU1NFUlQobiA8IHN0ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhU
eXBlPjo6bWF4KCkpOwotICAgICAgICBtX251bVRtcHMgPSBuOwotICAgICAgICBtX2JpdFZlY3Rv
ci5lbnN1cmVTaXplKG4qbik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+Ci0gICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCi0gICAgewotICAg
ICAgICBmb3IgKEluZGV4VHlwZSBpID0gMDsgaSA8IG1fbnVtVG1wczsgKytpKSB7Ci0gICAgICAg
ICAgICBmb3IgKEluZGV4VHlwZSBqID0gaSArIDE7IGogPCBtX251bVRtcHM7ICsraikgewotICAg
ICAgICAgICAgICAgIGlmIChtX2JpdFZlY3Rvci5xdWlja0dldChpbmRleChpLCBqKSkpCi0gICAg
ICAgICAgICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQotCi0gICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gKG1fYml0VmVjdG9y
LnNpemUoKSArIDcpID4+IDM7IH0KLQotICAgIHZvaWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25z
dCB7IGRhdGFMb2cobWVtb3J5VXNlKCkvMTAyNCk7IH0KLQotcHJpdmF0ZToKLSAgICB1bnNpZ25l
ZCBpbmRleChJbmRleFR5cGUgaSwgSW5kZXhUeXBlIGopCi0gICAgewotICAgICAgICByZXR1cm4g
aSAqIG1fbnVtVG1wcyArIGo7Ci0gICAgfQotCi0gICAgQml0VmVjdG9yIG1fYml0VmVjdG9yOwot
ICAgIHVuc2lnbmVkIG1fc2l6ZSB7MH07Ci0gICAgSW5kZXhUeXBlIG1fbnVtVG1wczsKLX07Ci0K
LSNkZWZpbmUgVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNFX0dSQVBIIDAKLSNpZiBURVNUX09Q
VElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgKLXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBJbmRleFR5cGU+Ci1jbGFzcyBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaCB7Ci1wdWJsaWM6Ci0gICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBl
IHYpCi0gICAgewotICAgICAgICBib29sIGNvbnRhaW5zSW5BID0gbV9zZXRBLmNvbnRhaW5zKHUs
IHYpOwotICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRCLmNvbnRhaW5zKHUsIHYpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBjb250YWluc0luQik7Ci0gICAg
ICAgIHJldHVybiBjb250YWluc0luQTsKLSAgICB9Ci0KLSAgICBib29sIGFkZEFuZFJldHVybklz
TmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQotICAgIHsKLSAgICAgICAgYm9vbCBp
c05ld0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwotICAgICAg
ICBib29sIGlzTmV3RW50cnlCID0gbV9zZXRCLmFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTmV3RW50cnlBID09IGlzTmV3RW50cnlCKTsKLSAg
ICAgICAgcmV0dXJuIGlzTmV3RW50cnlBOwotICAgIH0KLQotICAgIHZvaWQgY2xlYXIoKQotICAg
IHsKLSAgICAgICAgbV9zZXRBLmNsZWFyKCk7Ci0gICAgICAgIG1fc2V0Qi5jbGVhcigpOwotICAg
IH0KLQotICAgIHZvaWQgc2V0TWF4VG1wSW5kZXgodW5zaWduZWQgbikKLSAgICB7Ci0gICAgICAg
IG1fc2V0QS5zZXRNYXhUbXBJbmRleChuKTsKLSAgICAgICAgbV9zZXRCLnNldE1heFRtcEluZGV4
KG4pOwotICAgIH0KLQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgotICAgIHZvaWQg
Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgbV9zZXRBLmZv
ckVhY2goZnVuY3Rvcik7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICB1bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7Ci0gICAgICAgIHVuc2ln
bmVkIHNpemVCID0gbV9zZXRCLnNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZUEg
PT0gc2l6ZUIpOwotICAgICAgICByZXR1cm4gc2l6ZUE7Ci0gICAgfQotCi0gICAgdm9pZCBkdW1w
TWVtb3J5VXNlSW5LQigpIGNvbnN0Ci0gICAgewotICAgICAgICBkYXRhTG9nKG1fc2V0QS5tZW1v
cnlVc2UoKS8xMDI0LCAiIC0+ICIsIG1fc2V0Qi5tZW1vcnlVc2UoKS8xMDI0KTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgVCBtX3NldEE7Ci0gICAgVSBtX3NldEI7Ci19OwotCi11c2luZyBTbWFs
bEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90PjsKLXVz
aW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFw
aDxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQxNl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQxNl90PiwgdWludDE2X3Q+LCB1aW50MTZfdD47
Ci11c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaDxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQzMl90PiwgSW50ZXJmZXJlbmNlVmVjdG9yPExp
a2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMyX3Q+LCB1aW50MTZf
dD47Ci0KLSNlbHNlIC8vIFRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9HUkFQSAotCi11c2lu
ZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gSW50ZXJmZXJlbmNlQml0VmVjdG9yPHVpbnQxNl90
PjsKLXVzaW5nIExhcmdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ8dWludDE2X3Q+LCB1aW50MTZfdD47Ci11c2luZyBI
dWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnRlcmZlcmVuY2VWZWN0b3I8TGlrZWx5RGVuc2VVbnNp
Z25lZEludGVnZXJTZXQ8dWludDMyX3Q+LCB1aW50MzJfdD47Ci0KLSNlbmRpZgotCiAvLyBUaGUg
QWJzdHJhY3RDb2xvcmluZ0FsbG9jYXRvciBkZWZpbmVzIGFsbCB0aGUgY29kZSB0aGF0IGlzIGlu
ZGVwZW5kYW50CiAvLyBmcm9tIHRoZSBiYW5rIG9yIHJlZ2lzdGVyIGFuZCBjYW4gYmUgc2hhcmVk
IHdoZW4gYWxsb2NhdGluZyByZWdpc3RlcnMuCiB0ZW1wbGF0ZTx0eXBlbmFtZSBJbmRleFR5cGUs
IHR5cGVuYW1lIEludGVyZmVyZW5jZVNldCwgQmFuayBiYW5rPgpAQCAtMTU4OSw3ICsxMzU3LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgbV9pbnRlcmZl
cmVuY2VFZGdlcy5zZXRNYXhUbXBJbmRleChBYnNvbHV0ZVRtcE1hcHBlcjxiYW5rPjo6YWJzb2x1
dGVJbmRleChtX2NvZGUubnVtVG1wcyhiYW5rKSkpOworICAgICAgICBtX2ludGVyZmVyZW5jZUVk
Z2VzLnNldE1heEluZGV4KEFic29sdXRlVG1wTWFwcGVyPGJhbms+OjphYnNvbHV0ZUluZGV4KG1f
Y29kZS5udW1UbXBzKGJhbmspKSk7CiAKICAgICAgICAgaW5pdGlhbGl6ZVByZWNvbG9yZWRUbXAo
KTsKICAgICAgICAgYnVpbGQoKTsKQEAgLTIwNDIsOSArMTgxMCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfTsKIAotICAgICAgICAgICAg
Ly8gVGhlIGJpdCB2ZWN0b3IgYXBwcm9hY2ggdXNlcyBuKm4gYml0cywgb3IgMjBrQiBmb3IgbiA9
IDQwMC4KLSAgICAgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhTaXplRm9yU21hbGxJbnRl
cmZlcmVuY2VHcmFwaCA9IDQwMDsKLSAgICAgICAgICAgIGlmIChtX2NvZGUubnVtVG1wcyhiYW5r
KSA8IG1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdyYXBoKSB7CisgICAgICAgICAgICBpZiAo
bV9jb2RlLm51bVRtcHMoYmFuaykgPCBXVEY6Om1heFNpemVGb3JTbWFsbEludGVyZmVyZW5jZUdy
YXBoKSB7CiAgICAgICAgICAgICAgICAgaWYgKHVzZUlSQygpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIENvbG9yaW5nQWxsb2NhdG9yPHVpbnQxNl90LCBiYW5rLCBJUkMsIFNtYWxsSW50ZXJmZXJl
bmNlR3JhcGg+IGFsbG9jYXRvcihtX2NvZGUsIG1fdG1wV2lkdGgsIG1fdXNlQ291bnRzLCB1bnNw
aWxsYWJsZVRtcHMpOwogICAgICAgICAgICAgICAgICAgICBkb25lID0gZG9BbGxvY2F0aW9uKGFs
bG9jYXRvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAppbmRleCBhZTc4NjkxNmI1
NmYuLmMyZjFhZWYyOGE4MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29sb3JpbmcuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiQWlyUGhh
c2VTY29wZS5oIgogI2luY2x1ZGUgIkFpclN0YWNrQWxsb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9JbnRlcmZlcmVuY2VHcmFwaC5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CkBAIC00Myw2NiArNDQs
MjYgQEAgbmFtZXNwYWNlIHsKIAogbmFtZXNwYWNlIEFpckFsbG9jYXRlU3RhY2tCeUdyYXBoQ29s
b3JpbmdJbnRlcm5hbCB7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwor
c3RhdGljIGNvbnN0ZXhwciBib29sIHJlcG9ydExhcmdlTWVtb3J5VXNlcyA9IGZhbHNlOwogfQog
Ci1zdHJ1Y3QgQ29hbGVzY2FibGVNb3ZlIHsKLSAgICBDb2FsZXNjYWJsZU1vdmUoKQorY2xhc3Mg
U3RhY2tBbGxvY2F0b3JCYXNlIHsKK3Byb3RlY3RlZDoKKyAgICBTdGFja0FsbG9jYXRvckJhc2Uo
Q29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3JlbWFwcGVk
U3RhY2tTbG90SW5kaWNlcyhjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpCiAgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tpXSA9IGk7
CiAgICAgfQogCi0gICAgQ29hbGVzY2FibGVNb3ZlKFN0YWNrU2xvdCogc3JjLCBTdGFja1Nsb3Qq
IGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKLSAgICAgICAgOiBzcmMoc3JjKQotICAgICAgICAsIGRz
dChkc3QpCi0gICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5jeSkKLSAgICB7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2FsZXNjYWJsZU1vdmUmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIHNyYyA9PSBvdGhlci5zcmMKLSAgICAgICAgICAgICYm
IGRzdCA9PSBvdGhlci5kc3QKLSAgICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVx
dWVuY3k7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2FsZXNjYWJs
ZU1vdmUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOwotICAgIH0KLSAgICAKLSAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNjYWJsZU1vdmUoKTsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci0gICAgewotICAgICAg
ICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3JjKSwgIi0+IiwgcG9pbnRlckR1bXAoZHN0KSwgIigi
LCBmcmVxdWVuY3ksICIpIik7Ci0gICAgfQotICAgIAotICAgIFN0YWNrU2xvdCogc3JjIHsgbnVs
bHB0ciB9OwotICAgIFN0YWNrU2xvdCogZHN0IHsgbnVsbHB0ciB9OwotICAgIGRvdWJsZSBmcmVx
dWVuY3kgeyBQTmFOIH07Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotdm9pZCBh
bGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCi17Ci0gICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nIik7Ci0gICAg
Ci0gICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7Ci0gICAgCi0gICAgVmVjdG9yPFN0YWNrU2xv
dCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMgPQotICAgICAgICBhbGxvY2F0ZUFuZEdldEVz
Y2FwZWRTdGFja1Nsb3RzV2l0aG91dENoYW5naW5nRnJhbWVTaXplKGNvZGUpOwotCi0gICAgLy8g
Tm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCi0gICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2
ZW5lc3MoY29kZSk7Ci0gICAgSW5kZXhNYXA8U3RhY2tTbG90KiwgSGFzaFNldDxTdGFja1Nsb3Qq
Pj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0
YWNrU2xvdCo+IHNsb3RzOwotCiAgICAgLy8gV2Ugd2lsbCBwZXJmb3JtIHNvbWUgc3BpbGwgY29h
bGVzY2luZy4gVG8gbWFrZSB0aGF0IGVmZmVjdGl2ZSwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGlk
ZW50aWZ5CiAgICAgLy8gY29hbGVzY2FibGUgbW92ZXMgYW5kIGhhbmRsZSB0aGVtIHNwZWNpYWxs
eSBpbiBpbnRlcmZlcmVuY2UgYW5hbHlzaXMuCi0gICAgYXV0byBpc0NvYWxlc2NhYmxlTW92ZSA9
IFsmXSAoSW5zdCYgaW5zdCkgLT4gYm9vbCB7CisgICAgYm9vbCBpc0NvYWxlc2NhYmxlTW92ZShJ
bnN0JiBpbnN0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFPcHRpb25zOjpjb2FsZXNjZVNw
aWxsU2xvdHMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBXaWR0aCB3
aWR0aDsKICAgICAgICAgc3dpdGNoIChpbnN0LmtpbmQub3Bjb2RlKSB7CiAgICAgICAgIGNhc2Ug
TW92ZToKQEAgLTExOCwxMyArNzksMTAgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9y
aW5nKENvZGUmIGNvZGUpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghT3B0aW9uczo6Y29hbGVzY2VT
cGlsbFNsb3RzKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAorCiAgICAg
ICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpICE9IDMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyOyArK2kpIHsK
ICAgICAgICAgICAgIEFyZyBhcmcgPSBpbnN0LmFyZ3NbaV07CiAgICAgICAgICAgICBpZiAoIWFy
Zy5pc1N0YWNrKCkpCkBAIC0xMzUsMTgyICs5MywzMDMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCiAgICAgICAgICAgICBpZiAoc2xvdC0+Ynl0ZVNpemUo
KSAhPSBieXRlcyh3aWR0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH07Ci0gICAgCi0gICAg
YXV0byBpc1VzZWxlc3NNb3ZlID0gWyZdIChJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICB9CisK
KyAgICBib29sIGlzVXNlbGVzc01vdmUoSW5zdCYgaW5zdCkgY29uc3QKKyAgICB7CiAgICAgICAg
IHJldHVybiBpc0NvYWxlc2NhYmxlTW92ZShpbnN0KSAmJiBpbnN0LmFyZ3NbMF0gPT0gaW5zdC5h
cmdzWzFdOworICAgIH0KKworICAgIHVuc2lnbmVkIHJlbWFwKHVuc2lnbmVkIHNsb3RJbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHJl
bWFwcGVkU2xvdEluZGV4ID0gbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xvdEluZGV4XTsK
KyAgICAgICAgICAgIGlmIChyZW1hcHBlZFNsb3RJbmRleCA9PSBzbG90SW5kZXgpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHNsb3RJbmRleDsKKyAgICAgICAgICAgIHNsb3RJbmRleCA9IHJlbWFw
cGVkU2xvdEluZGV4OworICAgICAgICB9CisgICAgfQorCisgICAgU3RhY2tTbG90KiByZW1hcFN0
YWNrU2xvdChTdGFja1Nsb3QqIHNsb3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9j
b2RlLnN0YWNrU2xvdHMoKVtyZW1hcChzbG90LT5pbmRleCgpKV07CisgICAgfQorCisgICAgYm9v
bCBpc1JlbWFwcGVkU2xvdEluZGV4KHVuc2lnbmVkIHNsb3RJbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3JlbWFwcGVkU3RhY2tTbG90SW5kaWNlc1tzbG90SW5kZXhdICE9IHNs
b3RJbmRleDsKICAgICB9OwotICAgIAotICAgIGF1dG8gYWRkRWRnZSA9IFsmXSAoU3RhY2tTbG90
KiBhLCBTdGFja1Nsb3QqIGIpIHsKLSAgICAgICAgaW50ZXJmZXJlbmNlW2FdLmFkZChiKTsKLSAg
ICAgICAgaW50ZXJmZXJlbmNlW2JdLmFkZChhKTsKLSAgICB9OwotICAgIAotICAgIFZlY3RvcjxD
b2FsZXNjYWJsZU1vdmU+IGNvYWxlc2NhYmxlTW92ZXM7Ci0KLSAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgewotICAgICAgICBTdGFja1Nsb3RMaXZlbmVzczo6TG9jYWxDYWxjIGxv
Y2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOwotCi0gICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZd
ICh1bnNpZ25lZCBpbnN0SW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNr
QnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCi0gICAgICAgICAgICAgICAgZGF0YUxv
ZygiSW50ZXJmZXJpbmc6ICIsIFdURjo6cG9pbnRlckxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkp
LCAiXG4iKTsKLQotICAgICAgICAgICAgSW5zdCogcHJldkluc3QgPSBibG9jay0+Z2V0KGluc3RJ
bmRleCk7Ci0gICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQoaW5zdEluZGV4
ICsgMSk7Ci0gICAgICAgICAgICBpZiAocHJldkluc3QgJiYgaXNDb2FsZXNjYWJsZU1vdmUoKnBy
ZXZJbnN0KSkgewotICAgICAgICAgICAgICAgIENvYWxlc2NhYmxlTW92ZSBtb3ZlKHByZXZJbnN0
LT5hcmdzWzBdLnN0YWNrU2xvdCgpLCBwcmV2SW5zdC0+YXJnc1sxXS5zdGFja1Nsb3QoKSwgYmxv
Y2stPmZyZXF1ZW5jeSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb2Fs
ZXNjYWJsZU1vdmVzLmFwcGVuZChtb3ZlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAob3RoZXJTbG90ICE9IG1vdmUuc3JjKQotICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkRWRnZShtb3ZlLmRzdCwgb3RoZXJTbG90KTsKKworICAgIENvZGUmIG1f
Y29kZTsKKyAgICBWZWN0b3I8dW5zaWduZWQ+IG1fcmVtYXBwZWRTdGFja1Nsb3RJbmRpY2VzOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgSW50ZXJmZXJlbmNlR3JhcGg+CitjbGFzcyBHcmFwaENv
bG9yaW5nU3RhY2tBbGxvY2F0b3IgZmluYWwgOiBwdWJsaWMgU3RhY2tBbGxvY2F0b3JCYXNlIHsK
KyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBJbnRlcmZlcmVuY2VHcmFwaDo6SW5kZXhU
eXBlOworcHVibGljOgorICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcihDb2RlJiBjb2Rl
KQorICAgICAgICA6IFN0YWNrQWxsb2NhdG9yQmFzZShjb2RlKQorICAgICAgICAsIG1faW50ZXJm
ZXJlbmNlKCkKKyAgICAgICAgLCBtX2NvYWxlc2NhYmxlTW92ZXMoKQorICAgIHsKKyAgICAgICAg
bV9pbnRlcmZlcmVuY2Uuc2V0TWF4SW5kZXgobV9jb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOwor
ICAgIH0KKworICAgIHZvaWQgcnVuKGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgYXNzaWduZWRF
c2NhcGVkU3RhY2tTbG90cykKKyAgICB7CisgICAgICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVu
ZXNzKG1fY29kZSk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkg
eworICAgICAgICAgICAgU3RhY2tTbG90TGl2ZW5lc3M6OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2
ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKHVuc2ln
bmVkIGluc3RJbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlH
cmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2coIkludGVyZmVyaW5nOiAiLCBXVEY6OnBvaW50ZXJMaXN0RHVtcChsb2NhbENhbGMubGl2ZSgp
KSwgIlxuIik7CisKKyAgICAgICAgICAgICAgICBJbnN0KiBwcmV2SW5zdCA9IGJsb2NrLT5nZXQo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBJbnN0KiBuZXh0SW5zdCA9IGJsb2NrLT5nZXQo
aW5zdEluZGV4ICsgMSk7CisgICAgICAgICAgICAgICAgaWYgKHByZXZJbnN0ICYmIGlzQ29hbGVz
Y2FibGVNb3ZlKCpwcmV2SW5zdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ29hbGVzY2FibGVN
b3ZlIG1vdmUocHJldkluc3QtPmFyZ3NbMF0uc3RhY2tTbG90KCktPmluZGV4KCksIHByZXZJbnN0
LT5hcmdzWzFdLnN0YWNrU2xvdCgpLT5pbmRleCgpLCBibG9jay0+ZnJlcXVlbmN5KCkpOworCisg
ICAgICAgICAgICAgICAgICAgIG1fY29hbGVzY2FibGVNb3Zlcy5hcHBlbmQobW92ZSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5s
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG90aGVyU2xvdEluZGV4
ID0gb3RoZXJTbG90LT5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG90aGVy
U2xvdEluZGV4ICE9IG1vdmUuc3JjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVk
Z2UobW92ZS5kc3QsIG90aGVyU2xvdEluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgIHByZXZJbnN0ID0gbnVsbHB0cjsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJldkluc3QgPSBudWxscHRyOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgSW5zdDo6Zm9yRWFjaERlZjxBcmc+KAotICAgICAg
ICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKLSAgICAgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgICAgICAgIGZvciAo
U3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2ZSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkRWRnZShzbG90LCBvdGhlclNsb3QpOwotICAgICAgICAgICAgICAgIH0pOwot
ICAgICAgICB9OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNp
emUoKTsgaW5zdEluZGV4LS07KSB7Ci0gICAgICAgICAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5
R3JhcGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3NlKQotICAgICAgICAgICAgICAgIGRhdGFMb2co
IkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOwotCi0gICAgICAgICAg
ICAvLyBLaWxsIGRlYWQgc3RvcmVzLiBGb3Igc2ltcGxpY2l0eSB3ZSBzYXkgdGhhdCBhIHN0b3Jl
IGlzIGtpbGxhYmxlIGlmIGl0IGhhcyBvbmx5IGxhdGUKLSAgICAgICAgICAgIC8vIGRlZnMgYW5k
IHRob3NlIGxhdGUgZGVmcyBhcmUgdG8gdGhpbmdzIHRoYXQgYXJlIGRlYWQgcmlnaHQgbm93LiBX
ZSBvbmx5IGRvIHRoYXQKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCdzIHRoZSBvbmx5IGtp
bmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBoZXJlLgotICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwotICAgICAgICAgICAgaWYgKCFpbnN0Lmhh
c05vbkFyZ0VmZmVjdHMoKSkgewotICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEJhbmssIFdpZHRoKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBJbnN0Ojpmb3JFYWNoRGVmPEFy
Zz4oCisgICAgICAgICAgICAgICAgICAgIHByZXZJbnN0LCBuZXh0SW5zdCwKKyAgICAgICAgICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlLCBCYW5rLCBXaWR0aCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghQXJnOjppc0xhdGVEZWYocm9sZSkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNT
dGFjaygpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90
KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xv
dEtpbmQ6OlNwaWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2lu
ZDo6U3BpbGwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxDYWxj
LmlzTGl2ZShzbG90KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xv
dCA6IGxvY2FsQ2FsYy5saXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWRn
ZShzbG90LCBvdGhlclNsb3QpOwogICAgICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICBpZiAob2spCi0gICAgICAgICAgICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAg
ICAgICB9OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5z
aXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0
YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6OnZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxvY2stPmF0KGluc3RJbmRleCksICJcbiIpOworCisg
ICAgICAgICAgICAgICAgLy8gS2lsbCBkZWFkIHN0b3Jlcy4gRm9yIHNpbXBsaWNpdHkgd2Ugc2F5
IHRoYXQgYSBzdG9yZSBpcyBraWxsYWJsZSBpZiBpdCBoYXMgb25seSBsYXRlCisgICAgICAgICAg
ICAgICAgLy8gZGVmcyBhbmQgdGhvc2UgbGF0ZSBkZWZzIGFyZSB0byB0aGluZ3MgdGhhdCBhcmUg
ZGVhZCByaWdodCBub3cuIFdlIG9ubHkgZG8gdGhhdAorICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2UgdGhhdCdzIHRoZSBvbmx5IGtpbmQgb2YgZGVhZCBzdGFjayBzdG9yZSB3ZSB3aWxsIHNlZSBo
ZXJlLgorICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBpZiAoIWluc3QuaGFzTm9uQXJnRWZmZWN0cygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBpbnN0LmZv
ckVhY2hBcmcoCisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQmFuaywgV2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
QXJnOjppc0Vhcmx5RGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFBcmc6OmlzTGF0ZURlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2so
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFy
Zy5zdGFja1Nsb3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2lu
ZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9rID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobG9jYWxDYWxjLmlzTGl2ZShzbG90KSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvayA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3QgPSBJbnN0KCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgaW50ZXJmZXJlKGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4
ZWN1dGUoaW5zdEluZGV4KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgaW50ZXJmZXJlKGluc3RJbmRleCk7Ci0gICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShp
bnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJlKC0xKTsKKworICAgICAgICAgICAgYmxv
Y2stPmluc3RzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICAgICAgWyZdIChjb25z
dCBJbnN0JiBpbnN0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEFpckFsbG9j
YXRlU3RhY2tCeUdyYXBoQ29sb3JpbmdJbnRlcm5hbDo6cmVwb3J0TGFyZ2VNZW1vcnlVc2VzICYm
IG1faW50ZXJmZXJlbmNlLm1lbW9yeVVzZSgpID4gMTAyNCkgeworICAgICAgICAgICAgZGF0YUxv
ZygiR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yIHN0YWNrU2xvdHMsIGludGVyZmVyZW5jZUdy
YXBoKGtCKSwgY29hbGVzY2FibGUgbW92ZXMoa0IpOiAiLCBtX2NvZGUuc3RhY2tTbG90cygpLnNp
emUoKSwgIiA6ICIpOworICAgICAgICAgICAgbV9pbnRlcmZlcmVuY2UuZHVtcE1lbW9yeVVzZUlu
S0IoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiwgIiwgKG1fY29hbGVzY2FibGVNb3Zlcy5zaXpl
KCkgKiBzaXplb2YoQ29hbGVzY2FibGVNb3ZlKSkgLyAxMDI0KTsKKyAgICAgICAgICAgIGRhdGFM
b2dMbigpOwogICAgICAgICB9Ci0gICAgICAgIGludGVyZmVyZSgtMSk7Ci0gICAgICAgIAotICAg
ICAgICBibG9jay0+aW5zdHMoKS5yZW1vdmVBbGxNYXRjaGluZygKLSAgICAgICAgICAgIFsmXSAo
Y29uc3QgSW5zdCYgaW5zdCkgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICFpbnN0
OworCisgICAgICAgIGlmIChBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nSW50ZXJuYWw6
OnZlcmJvc2UpIHsKKyAgICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0
YWNrU2xvdHMoKSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAi
LCBwb2ludGVyRHVtcChzbG90KSwgIjogIik7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBzbG90SW5kZXggOiBtX2ludGVyZmVyZW5jZVtzbG90LT5pbmRleCgpXSkKKyAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZyhwb2ludGVyRHVtcChtX2NvZGUuc3RhY2tTbG90cygpW3Nsb3RJbmRl
eF0pKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgLy8gTm93IHRyeSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgorICAg
ICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICBtX2NvYWxlc2NhYmxlTW92ZXMuYmVnaW4oKSwg
bV9jb2FsZXNjYWJsZU1vdmVzLmVuZCgpLAorICAgICAgICAgICAgWyZdIChDb2FsZXNjYWJsZU1v
dmUmIGEsIENvYWxlc2NhYmxlTW92ZSYgYikgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGEuZnJlcXVlbmN5ID4gYi5mcmVxdWVuY3k7CiAgICAgICAgICAgICB9KTsKLSAgICB9CiAK
LSAgICBpZiAoQWlyQWxsb2NhdGVTdGFja0J5R3JhcGhDb2xvcmluZ0ludGVybmFsOjp2ZXJib3Nl
KSB7Ci0gICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCi0g
ICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1bXAoc2xvdCks
ICI6ICIsIHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vbc2xvdF0pLCAiXG4iKTsKLSAgICB9
Ci0gICAgCi0gICAgLy8gTm93IHRyeSB0byBjb2FsZXNjZSBzb21lIG1vdmVzLgotICAgIHN0ZDo6
c29ydCgKLSAgICAgICAgY29hbGVzY2FibGVNb3Zlcy5iZWdpbigpLCBjb2FsZXNjYWJsZU1vdmVz
LmVuZCgpLAotICAgICAgICBbJl0gKENvYWxlc2NhYmxlTW92ZSYgYSwgQ29hbGVzY2FibGVNb3Zl
JiBiKSAtPiBib29sIHsKLSAgICAgICAgICAgIHJldHVybiBhLmZyZXF1ZW5jeSA+IGIuZnJlcXVl
bmN5OwotICAgICAgICB9KTsKLSAgICAKLSAgICBJbmRleE1hcDxTdGFja1Nsb3QqLCBTdGFja1Ns
b3QqPiByZW1hcHBlZFN0YWNrU2xvdHMoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKLSAgICBh
dXRvIHJlbWFwID0gWyZdIChTdGFja1Nsb3QqIHNsb3QpIC0+IFN0YWNrU2xvdCogewotICAgICAg
ICBpZiAoIXNsb3QpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgZm9yICg7
OykgewotICAgICAgICAgICAgU3RhY2tTbG90KiByZW1hcHBlZFNsb3QgPSByZW1hcHBlZFN0YWNr
U2xvdHNbc2xvdF07Ci0gICAgICAgICAgICBpZiAoIXJlbWFwcGVkU2xvdCkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gc2xvdDsKLSAgICAgICAgICAgIHNsb3QgPSByZW1hcHBlZFNsb3Q7CisgICAg
ICAgIGZvciAoY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBtb3ZlIDogbV9jb2FsZXNjYWJsZU1vdmVz
KSB7CisgICAgICAgICAgICBJbmRleFR5cGUgc2xvdFRvS2lsbCA9IHJlbWFwKG1vdmUuc3JjKTsK
KyAgICAgICAgICAgIEluZGV4VHlwZSBzbG90VG9LZWVwID0gcmVtYXAobW92ZS5kc3QpOworICAg
ICAgICAgICAgaWYgKHNsb3RUb0tpbGwgPT0gc2xvdFRvS2VlcCkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChtX2ludGVyZmVyZW5jZS5jb250YWlucyhzbG90VG9L
aWxsLCBzbG90VG9LZWVwKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgbV9yZW1hcHBlZFN0YWNrU2xvdEluZGljZXNbc2xvdFRvS2lsbF0gPSBzbG90VG9LZWVwOwor
CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSBpbnRlcmZlcmluZ1Nsb3QgOiBtX2ludGVyZmVy
ZW5jZVtzbG90VG9LaWxsXSkKKyAgICAgICAgICAgICAgICBhZGRFZGdlKGludGVyZmVyaW5nU2xv
dCwgc2xvdFRvS2VlcCk7CisgICAgICAgICAgICBtX2ludGVyZmVyZW5jZS5tYXlDbGVhcihzbG90
VG9LaWxsKTsKICAgICAgICAgfQotICAgIH07Ci0gICAgCi0gICAgZm9yIChDb2FsZXNjYWJsZU1v
dmUmIG1vdmUgOiBjb2FsZXNjYWJsZU1vdmVzKSB7Ci0gICAgICAgIG1vdmUuc3JjID0gcmVtYXAo
bW92ZS5zcmMpOwotICAgICAgICBtb3ZlLmRzdCA9IHJlbWFwKG1vdmUuZHN0KTsKLSAgICAgICAg
aWYgKG1vdmUuc3JjID09IG1vdmUuZHN0KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IGlmIChpbnRlcmZlcmVuY2VbbW92ZS5zcmNdLmNvbnRhaW5zKG1vdmUuZHN0KSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgU3RhY2tTbG90KiBzbG90VG9LaWxsID0g
bW92ZS5zcmM7Ci0gICAgICAgIFN0YWNrU2xvdCogc2xvdFRvS2VlcCA9IG1vdmUuZHN0OwotICAg
ICAgICAKLSAgICAgICAgcmVtYXBwZWRTdGFja1Nsb3RzW3Nsb3RUb0tpbGxdID0gc2xvdFRvS2Vl
cDsKLSAgICAgICAgZm9yIChTdGFja1Nsb3QqIGludGVyZmVyaW5nU2xvdCA6IGludGVyZmVyZW5j
ZVtzbG90VG9LaWxsXSkgewotICAgICAgICAgICAgaWYgKGludGVyZmVyaW5nU2xvdCA9PSBzbG90
VG9LaWxsKQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAg
ICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFyZy5p
c1N0YWNrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFw
U3RhY2tTbG90KGFyZy5zdGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGlmIChpc1VzZWxlc3NNb3ZlKGluc3QpKQorICAgICAgICAg
ICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlz
IGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAgICAgLy8gU3RhY2tT
bG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0
IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVy
IFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBvdGhlclNsb3RzID0gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90czsKKyAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgICAg
ICBpZiAoaXNSZW1hcHBlZFNsb3RJbmRleChzbG90LT5pbmRleCgpKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW50ZXJmZXJpbmdTbG90
XS5yZW1vdmUoc2xvdFRvS2lsbCk7Ci0gICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW50ZXJmZXJp
bmdTbG90XS5hZGQoc2xvdFRvS2VlcCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG90
aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgb3RoZXJTbG90SW5kZXggOiBtX2ludGVyZmVyZW5jZVtzbG90
LT5pbmRleCgpXSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbWFwcGVkU2xvdEluZGV4KG90
aGVyU2xvdEluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBvdGhlclNsb3QgPSBtX2NvZGUuc3RhY2tTbG90cygpW290aGVyU2xv
dEluZGV4XTsKKyAgICAgICAgICAgICAgICBvdGhlclNsb3RzLmFwcGVuZChvdGhlclNsb3QpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CiAg
ICAgICAgIH0KLSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tlZXBdLmFkZChpbnRlcmZlcmVu
Y2Vbc2xvdFRvS2lsbF0uYmVnaW4oKSwgaW50ZXJmZXJlbmNlW3Nsb3RUb0tpbGxdLmVuZCgpKTsK
LSAgICAgICAgaW50ZXJmZXJlbmNlW3Nsb3RUb0tpbGxdLmNsZWFyKCk7CiAgICAgfQotICAgIAot
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykg
ewotICAgICAgICAgICAgICAgIGlmIChhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OnN0YWNrKHJlbWFwKGFyZy5zdGFja1Nsb3QoKSksIGFyZy5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNVc2VsZXNzTW92ZShpbnN0KSkKLSAg
ICAgICAgICAgICAgICBpbnN0ID0gSW5zdCgpOworCitwcml2YXRlOgorICAgIHN0cnVjdCBDb2Fs
ZXNjYWJsZU1vdmUgeworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBDb2FsZXNjYWJsZU1vdmUoSW5kZXhUeXBlIHNyYywgSW5kZXhUeXBl
IGRzdCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICAgICAgICAgIDogc3JjKHNyYykKKyAgICAgICAg
ICAgICwgZHN0KGRzdCkKKyAgICAgICAgICAgICwgZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICAg
ICAgewogICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvYWxlc2Nh
YmxlTW92ZSYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzcmMg
PT0gb3RoZXIuc3JjCisgICAgICAgICAgICAgICAgJiYgZHN0ID09IG90aGVyLmRzdAorICAgICAg
ICAgICAgICAgICYmIGZyZXF1ZW5jeSA9PSBvdGhlci5mcmVxdWVuY3k7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29hbGVzY2FibGVNb3ZlJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAqdGhpcyAhPSBDb2FsZXNjYWJsZU1vdmUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQucHJpbnQoc3JjLCAiLT4iLCBkc3QsICIoIiwgZnJlcXVlbmN5
LCAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgSW5kZXhUeXBlIHNyYyB7IHN0ZDo6bnVtZXJp
Y19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgSW5kZXhUeXBlIGRzdCB7IHN0
ZDo6bnVtZXJpY19saW1pdHM8SW5kZXhUeXBlPjo6bWF4KCkgfTsKKyAgICAgICAgZmxvYXQgZnJl
cXVlbmN5IHsgMC4wIH07CisgICAgfTsKKworICAgIHZvaWQgYWRkRWRnZShJbmRleFR5cGUgdSwg
SW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodSA9PSB2KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBtX2ludGVyZmVyZW5jZS5hZGQodSwgdik7CiAgICAgfQotICAgIAotICAg
IC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdv
cml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCi0gICAgLy8gU3RhY2tTbG90IHdlIGp1
c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8g
d2hpbGUgZW5zdXJpbmcgbm8KLSAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0
aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90
cyA9IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CisKKyAgICB2b2lkIGFkZEVkZ2UoU3RhY2tT
bG90KiB1LCBTdGFja1Nsb3QqIHYpCisgICAgeworICAgICAgICBhZGRFZGdlKHUtPmluZGV4KCks
IHYtPmluZGV4KCkpOworICAgIH0KKworICAgIEludGVyZmVyZW5jZUdyYXBoIG1faW50ZXJmZXJl
bmNlOworICAgIFZlY3RvcjxDb2FsZXNjYWJsZU1vdmU+IG1fY29hbGVzY2FibGVNb3ZlczsKK307
CisKKy8vIFdlIHRyeSB0byBhdm9pZCBjb21wdXRpbmcgdGhlIGxpdmVuZXNzIGluZm9ybWF0aW9u
IGlmIHRoZXJlIGlzIG5vIHNwaWxsIHNsb3QgdG8gYWxsb2NhdGUKK2Jvb2wgdHJ5VHJpdmlhbFN0
YWNrQWxsb2NhdGlvbihDb2RlJiBjb2RlKQorewogICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHJlbWFwcGVkU3RhY2tTbG90c1tzbG90
XSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKHNsb3QtPm9m
ZnNldEZyb21GUCgpKSB7Ci0gICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNl
dC4KKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAotICAgICAgICBI
YXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3Rd
OwotICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNp
emUoKSk7Ci0gICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xv
dHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5zaXplKCkpOwotICAgICAgICB1bnNpZ25lZCBu
ZXh0SW5kZXggPSBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLnNpemUoKTsKLSAgICAgICAgZm9y
IChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCi0gICAgICAgICAgICBv
dGhlclNsb3RzW25leHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
IAotICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7Cit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKENvZGUmIGNvZGUpCit7
CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrQnlHcmFwaENv
bG9yaW5nIik7CisKKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzID0KKyAgICAgICAgYWxsb2NhdGVB
bmRHZXRFc2NhcGVkU3RhY2tTbG90c1dpdGhvdXRDaGFuZ2luZ0ZyYW1lU2l6ZShjb2RlKTsKKwor
ICAgIGlmICghdHJ5VHJpdmlhbFN0YWNrQWxsb2NhdGlvbihjb2RlKSkgeworICAgICAgICBpZiAo
Y29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpIDwgV1RGOjptYXhTaXplRm9yU21hbGxJbnRlcmZlcmVu
Y2VHcmFwaCkgeworICAgICAgICAgICAgR3JhcGhDb2xvcmluZ1N0YWNrQWxsb2NhdG9yPFNtYWxs
SXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaD4gYWxsb2NhdG9yKGNvZGUpOworICAgICAgICAgICAg
YWxsb2NhdG9yLnJ1bihhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgfSBlbHNl
IGlmIChjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkgPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQx
Nl90Pjo6bWF4KCkpIHsKKyAgICAgICAgICAgIEdyYXBoQ29sb3JpbmdTdGFja0FsbG9jYXRvcjxM
YXJnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvci5ydW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBHcmFwaENvbG9yaW5nU3RhY2tBbGxvY2F0b3I8SHVnZUl0ZXJh
YmxlSW50ZXJmZXJlbmNlR3JhcGg+IGFsbG9jYXRvcihjb2RlKTsKKyAgICAgICAgICAgIGFsbG9j
YXRvci5ydW4oYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cyk7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICB1cGRhdGVGcmFtZVNpemVCYXNlZE9uU3RhY2tTbG90cyhjb2RlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKaW5kZXggOTc5N2Q1
ZWE4OTYzLi4yY2ZkNTQxZmExYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEyIEBACisyMDIxLTA1LTI2ICBS
b2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAgICAgICAgQWlyQWxsb2Nh
dGVTdGFja0J5R3JhcGhDb2xvcmluZyBzaG91bGQgdXNlIHRoZSBvcHRpbWl6ZWQgaW50ZXJmZXJl
bmNlIGdyYXBocyBmcm9tIEFpckFsbG9jYXRlUmVnaXN0ZXJzQnlHcmFwaENvbG9yaW5nCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjYyNTgKKworICAg
ICAgICBSZXZpZXdlZCBieSBQaGlsIFBpemxvLgorCisgICAgICAgIEkgbW92ZWQgdGhlIGludGVy
ZmVyZW5jZSBncmFwaHMgZGF0YXN0cnVjdHVyZXMgZnJvbSBBaXJBbGxvY2F0ZVJlZ2lzdGVyc0J5
R3JhcGhDb2xvcmluZyB0byB0aGVpciBvd24gd3RmL0ludGVyZmVyZW5jZUdyYXBoLmggZmlsZS4K
KyAgICAgICAgVGhlcmUgYXJlIHRocmVlIG9mIHRoZW06CisgICAgICAgIC0gU21hbGxJbnRlcmZl
cmVuY2VHcmFwaCwgYmVzdCBmb3IgbiA8IDQwMAorICAgICAgICAtIExhcmdlSW50ZXJmZXJlbmNl
R3JhcGgsIGZvciBuIDwgMioqMTYKKyAgICAgICAgLSBIdWdlSW50ZXJmZXJlbmNlR3JhcGgsIGZv
ciBuIHVwIHRvIDIqKjMyCisgICAgICAgIEkgYWxzbyBhZGRlZCAiSXRlcmFibGUiIHZlcnNpb25z
IG9mIHRoZW0sIHRoYXQgaGF2ZSBhbiBvcGVyYXRvcltdIG1ldGhvZCB3aG9zZSByZXN1bHQgeW91
IGNhbiBpdGVyYXRlIG9uIHRvIGdldCBhbGwgdGhlIGluZGljZXMgd2hpY2ggaW50ZXJmZXJlIHdp
dGggYSBnaXZlbiBpbmRleC4KKyAgICAgICAgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
IGlzIHRoZSBzYW1lIGFzIHRoZSBub24taXRlcmFibGUgdmVyc2lvbiwgYnV0IHRoZSBMYXJnZSBh
bmQgSHVnZSB2ZXJzaW9ucyBhcmUgYSBiaXQgc2xvd2VyIHRoYW4gdGhlaXIgY291bnRlcnBhcnRz
IGFuZCB1c2UgMnggbWVtb3J5LgorCisgICAgICAgIEFsbCBvZiB0aGVzZSB3ZXJlIHRlc3RlZCBi
eSBydW5uaW5nIEpldFN0cmVhbTIgd2l0aCB0aGUgVEVTVF9PUFRJTUlaRURfSU5URVJGRVJFTkNF
X0dSQVBIIHNldCB0byAxLgorICAgICAgICBUaGlzIGZsYWcgbWFrZXMgdGhlIG9wdGltaXplZCBk
YXRhc3RydWN0dXJlcyBydW4gaW4gcGFyYWxsZWwgd2l0aCBhIHJlZmVyZW5jZSBpbXBsZW1lbnRh
dGlvbiwgYW5kIHRoZWlyIHJlc3VsdHMgYXJlIGNoZWNrZWQgZm9yIGVxdWFsaXR5IG9uIGV2ZXJ5
IG1ldGhvZCBjYWxsLgorICAgICAgICBUaGVyZSBpcyBvbmUgc21hbGwgZGlmZmVyZW5jZSBhbGxv
d2VkOiBpdGVyYXRpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gZ28gdGhyb3VnaCBlbGVtZW50cyBp
biB0aGUgc2FtZSBvcmRlci4KKworICAgICAgICBJIGFsc28gYWRkZWQgYSBjbGVhcigpIG1ldGhv
ZCB0byBMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldCwgYW5kIGFkZGVkIHRoZSBOb3ROdWxs
IGZsYWcgdG8gaXRzIHZhcmlvdXMgdXNlcyBvZiBwbGFjZW1lbnQgbmV3LgorCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6CisgICAgICAgIChXVEY6Olc+OjptZW1vcnlV
c2UgY29uc3QpOgorICAgICAgICAqIHd0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpjb250YWlucyk6CisgICAgICAgIChX
VEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAg
ICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rvcjo6YWRkKToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlQml0VmVjdG9yOjpjbGVhcik6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJp
dFZlY3Rvcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6
OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpmb3JF
YWNoKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpzaXplIGNvbnN0KToK
KyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjptZW1vcnlVc2UgY29uc3QpOgor
ICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6OmR1bXBNZW1vcnlVc2VJbktCIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRl
cmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6
Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlQml0VmVjdG9yOjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0gY29uc3Qp
OgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VCaXRWZWN0b3I6Okl0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IhPSBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUJpdFZlY3Rv
cjo6SXRlcmFibGU6OmJlZ2luIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlQml0
VmVjdG9yOjpJdGVyYWJsZTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
Qml0VmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNl
Qml0VmVjdG9yOjppbmRleCBjb25zdCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rv
cjo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmFkZEFuZFJl
dHVybklzTmV3RW50cnkpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VWZWN0b3I6OmFkZCk6
CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6Y2xlYXIpOgorICAgICAgICAoV1RG
OjpJbnRlcmZlcmVuY2VWZWN0b3I6Om1heUNsZWFyKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJl
bmNlVmVjdG9yOjpzZXRNYXhJbmRleCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rv
cjo6Zm9yRWFjaCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6c2l6ZSBjb25z
dCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6bWVtb3J5VXNlIGNvbnN0KToK
KyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpkdW1wTWVtb3J5VXNlSW5LQiBjb25z
dCk6CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZVZlY3Rvcjo6SXRlcmFibGU6OmJlZ2luIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpJdGVyYWJsZTo6ZW5kIGNv
bnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlVmVjdG9yOjpvcGVyYXRvcltdIGNvbnN0
KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpjb250
YWlucyk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjo6
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1
cGxpY2F0aW5nQWRhcHRlcjo6YWRkKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVw
bGljYXRpbmdBZGFwdGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdlc0R1
cGxpY2F0aW5nQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRn
ZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6VW5kaXJl
Y3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6VW5k
aXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyOjptZW1vcnlVc2UgY29uc3QpOgor
ICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI6OmR1bXBNZW1v
cnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRp
bmdBZGFwdGVyOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVk
Z2VzRGVkdXBBZGFwdGVyOjpjb250YWlucyk6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdl
c0RlZHVwQWRhcHRlcjo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6CisgICAgICAgIChXVEY6OlVu
ZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlcjo6YWRkKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3Rl
ZEVkZ2VzRGVkdXBBZGFwdGVyOjpjbGVhcik6CisgICAgICAgIChXVEY6OlVuZGlyZWN0ZWRFZGdl
c0RlZHVwQWRhcHRlcjo6bWF5Q2xlYXIpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRnZXNE
ZWR1cEFkYXB0ZXI6OnNldE1heEluZGV4KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2Vz
RGVkdXBBZGFwdGVyOjpmb3JFYWNoKToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVk
dXBBZGFwdGVyOjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6VW5kaXJlY3RlZEVkZ2VzRGVk
dXBBZGFwdGVyOjptZW1vcnlVc2UgY29uc3QpOgorICAgICAgICAoV1RGOjpVbmRpcmVjdGVkRWRn
ZXNEZWR1cEFkYXB0ZXI6OmR1bXBNZW1vcnlVc2VJbktCIGNvbnN0KToKKyAgICAgICAgKFdURjo6
SW50ZXJmZXJlbmNlSGFzaFNldDo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVu
Y2VIYXNoU2V0OjphZGRBbmRSZXR1cm5Jc05ld0VudHJ5KToKKyAgICAgICAgKFdURjo6SW50ZXJm
ZXJlbmNlSGFzaFNldDo6YWRkKToKKyAgICAgICAgKFdURjo6SW50ZXJmZXJlbmNlSGFzaFNldDo6
Y2xlYXIpOgorICAgICAgICAoV1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0OjpzZXRNYXhJbmRleCk6
CisgICAgICAgIChXVEY6OkludGVyZmVyZW5jZUhhc2hTZXQ6OmZvckVhY2gpOgorICAgICAgICAo
V1RGOjpJbnRlcmZlcmVuY2VIYXNoU2V0OjpzaXplIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50
ZXJmZXJlbmNlSGFzaFNldDo6bWVtb3J5VXNlIGNvbnN0KToKKyAgICAgICAgKFdURjo6SW50ZXJm
ZXJlbmNlSGFzaFNldDo6ZHVtcE1lbW9yeVVzZUluS0IgY29uc3QpOgorICAgICAgICAoV1RGOjpJ
bnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Y29udGFpbnMpOgorICAgICAgICAoV1RGOjpJ
bnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6YWRkQW5kUmV0dXJuSXNOZXdFbnRyeSk6Cisg
ICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjphZGQpOgorICAgICAg
ICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Y2xlYXIpOgorICAgICAgICAo
V1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6bWF5Q2xlYXIpOgorICAgICAgICAo
V1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6c2V0TWF4SW5kZXgpOgorICAgICAg
ICAoV1RGOjpJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDo6Zm9yRWFjaCk6CisgICAgICAg
IChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjpzaXplIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6SW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg6Om1lbW9yeVVzZSBjb25zdCk6
CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEludGVyZmVyZW5jZUdyYXBoOjpkdW1wTWVtb3J5
VXNlSW5LQiBjb25zdCk6CisgICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChXVEY6Okluc3RydW1l
bnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJhYmxlOjpiZWdpbiBjb25zdCk6Cisg
ICAgICAgIChXVEY6Okluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg6Okl0ZXJh
YmxlOjplbmQgY29uc3QpOgorICAgICAgICAoV1RGOjpJbnN0cnVtZW50ZWRJdGVyYWJsZUludGVy
ZmVyZW5jZUdyYXBoOjpvcGVyYXRvcltdIGNvbnN0KToKKyAgICAgICAgKiB3dGYvTGlrZWx5RGVu
c2VVbnNpZ25lZEludGVnZXJTZXQuaDoKKyAgICAgICAgKFdURjo6TGlrZWx5RGVuc2VVbnNpZ25l
ZEludGVnZXJTZXQ6Okxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0KToKKyAgICAgICAgKFdU
Rjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmNsZWFyKToKKyAgICAgICAgKFdURjo6
TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OmFkZCk6CisgICAgICAgIChXVEY6Okxpa2Vs
eURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Ojplc3RpbWF0ZUhhc2hTZXRTaXplKToKKyAgICAgICAg
KFdURjo6TGlrZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQ6OnRyYW5zaXRpb25Ub0hhc2hTZXQp
OgorICAgICAgICAoV1RGOjpMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDo6dHJhbnNpdGlv
blRvQml0VmVjdG9yKToKKwogMjAyMS0wNS0yNiAgQ2FtZXJvbiBNY0Nvcm1hY2sgIDxoZXljYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQgc2JpeCBnbHlwaHMgZnJvbSBiZWluZyByZW5k
ZXJlZCBpbiB0aGUgR1BVIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCmluZGV4IDM4MjQxYmI2MDk4OC4uZmNjODgyYjA3Zjg1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM3MSw2ICszNzEsNyBAQAogCQkzMTNFREVD
OTc3OEU0OUM5QkVBOTFDRkMgLyogU3RhY2tUcmFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTdGFja1RyYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMzM3QjJENjgyNjU0NkVBQTAwRERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRl
Z2VyU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2Vy
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzM3QjJENjkyNjU0NkVBQTAw
RERGRDNEIC8qIExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRlcmZlcmVuY2VHcmFwaC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbnRlcmZlcmVuY2VHcmFwaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzN0M3Q0MyOTFFQTQwQTczMDA3QkQ5NTYgLyogV2Vha0xpbmtpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0xpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzgyMDI5RTI0NkM4NEIwMDk5RkQ2NzY0IC8qIEFTQ0lJTGl0ZXJhbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBU0NJSUxpdGVyYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzkxQkQ2QkE0RDE2NEZEMjk0RjlBOTNEIC8qIFN0ZE1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdGRNYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwNzksNiArMTA4MCw3IEBACiAJCQkJMzEzN0UxRDdEQkQ4
NEFDMzhGQUU0RDM0IC8qIEluZGV4U2V0LmggKi8sCiAJCQkJMjY4NEQ0MzUxQzAwMEQ0MDAwODFE
NjYzIC8qIEluZGV4U3BhcnNlU2V0LmggKi8sCiAJCQkJQThBNDcyQkMxNTFBODI1QTAwNDEyM0ZG
IC8qIElubGluZUFTTS5oICovLAorCQkJCTMzRkQ0ODExMjY1Q0IzODAwMEFCRTRGNCAvKiBJbnRl
cmZlcmVuY2VHcmFwaC5oICovLAogCQkJCUE3MERBMDgyMTc5OUYwNEQwMDUyOUE5QiAvKiBJbnNl
cnRpb24uaCAqLywKIAkJCQk1MTgyQzIyQzFGMkJDN0U2MDA1OUJBN0MgLyogSW5zdGFuY2VDb3Vu
dGVkLmggKi8sCiAJCQkJMEY3RUI4NUIxRkE4RkY0MTAwRjFBQkNCIC8qIElzb01hbGxvYy5oICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCAwMTBkOWU4MGQzNzguLmRkMGU4NjgyYjlhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQKQEAgLTEwMCw2ICsxMDAsNyBAQCBzZXQoV1RGX1BVQkxJQ19IRUFE
RVJTCiAgICAgSW5saW5lQVNNLmgKICAgICBJbnNlcnRpb24uaAogICAgIEluc3RhbmNlQ291bnRl
ZC5oCisgICAgSW50ZXJmZXJlbmNlR3JhcGguaAogICAgIElzb01hbGxvYy5oCiAgICAgSXNvTWFs
bG9jSW5saW5lcy5oCiAgICAgSXRlcmF0b3JBZGFwdG9ycy5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoU2V0LmggYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKaW5kZXggYTQwMmNl
MjczNzVhLi4yYTI3MjgwNjBmNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0hhc2hTZXQu
aAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgKQEAgLTY1LDYgKzY1LDcgQEAgcHVibGlj
OgogCiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkg
Y29uc3Q7CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3Q7CiAKICAgICB2b2lkIHJlc2VydmVJbml0aWFsQ2FwYWNpdHkodW5zaWduZWQga2V5
Q291bnQpIHsgbV9pbXBsLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoa2V5Q291bnQpOyB9CkBAIC0y
MDIsNiArMjAzLDEyIEBAIGlubGluZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjpjYXBh
Y2l0eSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKIH0KIAordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgViwgdHlwZW5hbWUgVz4KK2lubGlu
ZSB1bnNpZ25lZCBIYXNoU2V0PFQsIFUsIFYsIFc+OjptZW1vcnlVc2UoKSBjb25zdAoreworICAg
IHJldHVybiBjYXBhY2l0eSgpICogc2l6ZW9mKFQpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWLCB0eXBlbmFtZSBXPgogaW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWLCBXPjo6aXNFbXB0eSgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9JbnRlcmZlcmVuY2VHcmFwaC5oIGIvU291cmNlL1dURi93dGYvSW50ZXJmZXJlbmNlR3Jh
cGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjA0MmZhZGE5YjYw
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XVEYvd3RmL0ludGVyZmVyZW5jZUdyYXBoLmgK
QEAgLTAsMCArMSw1MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0xpa2VseURlbnNlVW5zaWduZWRJbnRlZ2Vy
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8g
VGhpcyBmaWxlIG9mZmVycyBtdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSBzaW1wbGUgaW50
ZXJmZXJlbmNlIGdyYXBoLCB3aXRoIHZhcnlpbmcgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNz
LgorLy8gQ29uY2VwdHVhbGx5IHRoZXkgYXJlIGp1c3Qgc2V0cyBvZiBwYWlycyBvZiBpbnRlZ2Vy
cworLy8gQWxsIG9mIHRoZW0gaGF2ZSB0aGUgc2FtZSBpbnRlcmZhY2U6CisvLyAgIGJvb2wgY29u
dGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorLy8gICBib29sIGFkZEFuZFJldHVybklz
TmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorLy8gICB2b2lkIGFkZChJbmRleFR5
cGUgdSwgSW5kZXhUeXBlIHYpCisvLyAgIHZvaWQgY2xlYXIoKQorLy8gICB2b2lkIG1heUNsZWFy
KEluZGV4VHlwZSB1KQorLy8gICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVkIG4pCisvLyAgIHZv
aWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorLy8gICB1bnNpZ25lZCBzaXplKCkK
Ky8vICAgdW5zaWduZWQgbWVtb3J5VXNlKCkKKy8vICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigp
CisvLyBUaHJlZSB1c2VmdWwgdHlwZSBhbGlhc2VzIGFyZSBkZWZpbmVkOgorLy8gICBTbWFsbElu
dGVyZmVyZW5jZUdyYXBoLCB3aGljaCBpcyB0aGUgZmFzdGVzdCBidXQgaGFzIHF1YWRyYXRpYyBt
ZW1vcnkgdXNlIGluIHRoZSBtYXhpbXVtIHZlcnRleCBpbmRleCAoYmVzdCBmb3IgbiA8IDQwMCBh
cyBpdCBpcyBhbHJlYWR5IDIwa0IgYnkgdGhhdCBwb2ludCkKKy8vICAgTGFyZ2VJbnRlcmZlcmVu
Y2VHcmFwaCwgYXMgbG9uZyBhcyB0aGUgaW5kaWNlcyBmaXQgaW4gYSB1aW50MTZfdAorLy8gICBI
dWdlSW50ZXJmZXJlbmNlR3JhcGggb3RoZXJ3aXNlCisvLyBJZiB5b3UgbmVlZCB0byBpdGVyYXRl
IG92ZXIgdGhlIGluZGljZXMgdGhhdCBpbnRlcmZlcmUgd2l0aCBhIGdpdmVuIGluZGV4LCB5b3Ug
bXVzdCB1c2UgdGhlIGZvbGxvd2luZzoKKy8vICAgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdy
YXBoCisvLyAgIExhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gICBIdWdlSXRlcmFi
bGVJbnRlcmZlcmVuY2VHcmFwaAorLy8gVGhlIGxhcmdlIGFuZCBodWdlIHZlcnNpb25zIGFyZSAy
eCB0aGUgbWVtb3J5IG9mIHRoZWlyIG5vbi1pdGVyYWJsZSB2ZXJzaW9ucywgYnV0IG9mZmVyIGFu
IGFkZGl0aW9uYWwgb3BlcmF0b3JbXSBtZXRob2QsIHdoaWNoIHJldHVybnMgYW4gaXRlcmFibGUg
b2JqZWN0CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgSW50ZXJmZXJlbmNlQml0VmVj
dG9yIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSBUOworICAgIGJvb2wgY29udGFp
bnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYml0
VmVjdG9yLnF1aWNrR2V0KGluZGV4KHUsIHYpKTsKKyAgICB9CisKKyAgICBib29sIGFkZEFuZFJl
dHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAg
Ym9vbCBhbHJlYWR5SW4gPSBtX2JpdFZlY3Rvci5xdWlja1NldChpbmRleCh1LCB2KSk7CisgICAg
ICAgIG1fc2l6ZSArPSAhYWxyZWFkeUluOworICAgICAgICByZXR1cm4gIWFscmVhZHlJbjsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAg
ICAgICAodm9pZCkgYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fYml0VmVjdG9yLmNsZWFyQWxsKCk7CisgICAg
ICAgIG1fc2l6ZSA9IDA7CisgICAgfQorCisgICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUpIHsg
fQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAgICAgICAg
bV9udW1FbGVtZW50cyA9IG47CisgICAgICAgIG1fYml0VmVjdG9yLmVuc3VyZVNpemUobipuKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoSW5kZXhUeXBl
IGkgPSAwOyBpIDwgbV9udW1FbGVtZW50czsgKytpKSB7CisgICAgICAgICAgICBmb3IgKEluZGV4
VHlwZSBqID0gaSArIDE7IGogPCBtX251bUVsZW1lbnRzOyArK2opIHsKKyAgICAgICAgICAgICAg
ICBpZiAobV9iaXRWZWN0b3IucXVpY2tHZXQoaW5kZXgoaSwgaikpKQorICAgICAgICAgICAgICAg
ICAgICBmdW5jdG9yKHsgaSwgaiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgIHVu
c2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIChtX2JpdFZlY3Rvci5zaXplKCkgKyA3
KSA+PiAzOyB9CisKKyAgICB2b2lkIGR1bXBNZW1vcnlVc2VJbktCKCkgY29uc3QgeyBkYXRhTG9n
KG1lbW9yeVVzZSgpIC8gMTAyNCk7IH0KKworICAgIHN0cnVjdCBJdGVyYWJsZSB7CisgICAgICAg
IHN0cnVjdCBpdGVyYXRvciB7CisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCA9IG1faXRlcmFibGUubV9iaXRW
ZWN0b3IuZmluZEJpdChtX2luZGV4ICsgMSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBJbmRleFR5cGUgb3BlcmF0b3Iq
KCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SW5kZXhUeXBlPihtX2luZGV4IC0gbV9pdGVyYWJsZS5tX3N0YXJ0aW5nSW5kZXgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8vIFdlIGNhbm5v
dCBqdXN0IHVzZSBhIG5vcm1hbCBjb21wYXJpc29uIGJleW9uZCBtX2l0ZXJhYmxlLm1fZW5kLCBi
ZWNhdXNlIHRoZSBmaW5kQml0IGluIG9wZXJhdG9yKysgbWF5IHNlbmQgdXMgcHJldHR5IG11Y2gg
YW55d2hlcmUKKyAgICAgICAgICAgICAgICAvLyBXb3JzZTogaXQgaXMgcG9zc2libGUgZm9yIHRo
ZSB1c2VyIG9mIHRoaXMgaXRlcmF0b3IgdG8gYWRkIGVsZW1lbnRzIHRvIHRoZSBpbnRlcmZlcmVu
Y2UgZ3JhcGggYmV0d2VlbiBjYWxscyB0byArKworICAgICAgICAgICAgICAgIC8vIFRoaXMgd29u
J3QgaW52YWxpZGF0ZSB1cy9jYXVzZSBwcm9ibGVtcyBkaXJlY3RseSwgYXMgdGhlIHVzZXIgd29u
J3QgYWZmZWN0IHRoZSBzbGljZSBvZiB0aGUgYml0IHZlY3RvciB0aGF0IHdlJ3JlIGl0ZXJhdGlu
ZyBvdmVyLgorICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGV5IG1heSB3ZWxsIHNldCBiaXRzIGJl
eW9uZCBpdC4gU28gd2UgY2Fubm90IGNvbXB1dGUgYW4gImlkZWFsIiBlbmQgaXRlcmF0b3IgKGJ5
IGxvb2tpbmcgZm9yIHRoZSBmaXJzdCBiaXQgc2V0IGFmdGVyIHRoZSBzbGljZSB3ZSBjYXJlIGFi
b3V0KSBhaGVhZCBvZiB0aW1lLgorICAgICAgICAgICAgICAgIC8vIEluc3RlYWQgd2Ugc2V0IG1f
ZW5kIHRvIGluZGV4KHUrMSwgMCkgKHNvIGp1c3QgYWZ0ZXIgdGhlIHNsaWNlIG9mIGludGVyZXN0
KSwgYW5kIHdlIHVzZSB0aGlzIHNsaWdodGx5IHdlaXJkIGNvbXBhcmlzb24gb3BlcmF0b3IgdG8g
c3RpbGwgc3RvcCBpbiB0aW1lIG9uY2Ugd2UgZ28gYmV5b25kIGl0LgorICAgICAgICAgICAgICAg
IGlmIChtX2luZGV4ID49IG1faXRlcmFibGUubV9lbmQgJiYgb3RoZXIubV9pbmRleCA+PSBtX2l0
ZXJhYmxlLm1fZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29uc3QgSXRlcmFibGUmIG1faXRlcmFi
bGU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4geyAqdGhpcywgbV9iZWdpbiB9OyB9Cisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHsgKnRoaXMsIG1fZW5kIH07IH0K
KworICAgICAgICBjb25zdCBCaXRWZWN0b3ImIG1fYml0VmVjdG9yOworICAgICAgICB1bnNpZ25l
ZCBtX3N0YXJ0aW5nSW5kZXg7CisgICAgICAgIHVuc2lnbmVkIG1fYmVnaW47CisgICAgICAgIHVu
c2lnbmVkIG1fZW5kOworICAgIH07CisKKyAgICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlw
ZSB1KSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgYmVnaW4gPSBtX2JpdFZlY3Rvci5m
aW5kQml0KGluZGV4KHUsIDApLCB0cnVlKTsKKyAgICAgICAgdW5zaWduZWQgZW5kID0gaW5kZXgo
dSArIDEsIDApOworICAgICAgICByZXR1cm4geyBtX2JpdFZlY3RvciwgaW5kZXgodSwgMCksIGJl
Z2luLCBlbmQgfTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgaW5kZXgoSW5kZXhU
eXBlIGksIEluZGV4VHlwZSBqKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGkgKiBtX251
bUVsZW1lbnRzICsgajsKKyAgICB9CisKKyAgICBCaXRWZWN0b3IgbV9iaXRWZWN0b3I7CisgICAg
dW5zaWduZWQgbV9zaXplIHswfTsKKyAgICBJbmRleFR5cGUgbV9udW1FbGVtZW50czsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBJVD4KK2NsYXNzIEludGVyZmVyZW5jZVZl
Y3RvciB7CitwdWJsaWM6CisgICAgdXNpbmcgSW5kZXhUeXBlID0gSVQ7CisgICAgYm9vbCBjb250
YWlucyhJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbdV0uY29udGFpbnModik7CisgICAgfQorCisgICAgYm9vbCBhZGRBbmRSZXR1cm5Jc05l
d0VudHJ5KEluZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIGJvb2wgaXNO
ZXdFbnRyeSA9IG1fdmVjdG9yW3VdLmFkZCh2KS5pc05ld0VudHJ5OworICAgICAgICBtX3NpemUg
Kz0gaXNOZXdFbnRyeTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnk7CisgICAgfQorCisgICAg
dm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgKHZvaWQp
IGFkZEFuZFJldHVybklzTmV3RW50cnkodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICBtX3ZlY3Rvci5jbGVhcigpOworICAgICAgICBtX3NpemUgPSAwOwor
ICAgIH0KKworICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlIHUpIHsgbV92ZWN0b3JbdV0uY2xl
YXIoKTsgfQorCisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4VHlwZT46Om1heCgpKTsKKyAg
ICAgICAgbV92ZWN0b3IucmVzaXplKG4pOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKSA7ICsr
aSkgeworICAgICAgICAgICAgZm9yIChJbmRleFR5cGUgaiA6IG1fdmVjdG9yW2ldKQorICAgICAg
ICAgICAgICAgIGZ1bmN0b3IoeyBpLCBqIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgdW5zaWduZWQgbWVt
b3J5VXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIG1lbW9yeSA9IDA7CisgICAg
ICAgIGZvciAoY29uc3QgVCYgc2V0IDogbV92ZWN0b3IpCisgICAgICAgICAgICBtZW1vcnkgKz0g
c2V0Lm1lbW9yeVVzZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5OworICAgIH0KKworICAgIHZv
aWQgZHVtcE1lbW9yeVVzZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkgLyAxMDI0
KTsgfQorCisgICAgc3RydWN0IEl0ZXJhYmxlIHsKKyAgICAgICAgdXNpbmcgaXRlcmF0b3IgPSB0
eXBlbmFtZSBUOjppdGVyYXRvcjsKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3NldC5iZWdpbigpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2V0LmVuZCgpOyB9CisgICAgICAgIGNvbnN0IFQmIG1fc2V0OworICAgIH07CisKKyAg
ICBJdGVyYWJsZSBvcGVyYXRvcltdKEluZGV4VHlwZSB1KSBjb25zdCB7IHJldHVybiB7IG1fdmVj
dG9yW3VdIH07IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8VD4gbV92ZWN0b3I7CisgICAgdW5z
aWduZWQgbV9zaXplIHswfTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBVbmRp
cmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXIgeworcHVibGljOgorICAgIHVzaW5nIEluZGV4
VHlwZSA9IHR5cGVuYW1lIFQ6OkluZGV4VHlwZTsKKyAgICB1c2luZyBJdGVyYWJsZSA9IHR5cGVu
YW1lIFQ6Okl0ZXJhYmxlOworICAgIGJvb2wgY29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlw
ZSB2KSB7IHJldHVybiBtX3VuZGVybHlpbmcuY29udGFpbnModSwgdik7IH0KKworICAgIGJvb2wg
YWRkQW5kUmV0dXJuSXNOZXdFbnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgewor
ICAgICAgICBib29sIGlzTmV3RW50cnkxID0gbV91bmRlcmx5aW5nLmFkZEFuZFJldHVybklzTmV3
RW50cnkodSwgdik7CisgICAgICAgIGJvb2wgaXNOZXdFbnRyeTIgPSBtX3VuZGVybHlpbmcuYWRk
QW5kUmV0dXJuSXNOZXdFbnRyeSh2LCB1KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpc05ld0Vu
dHJ5MiwgaXNOZXdFbnRyeTEgPT0gaXNOZXdFbnRyeTIpOworICAgICAgICByZXR1cm4gaXNOZXdF
bnRyeTE7CisgICAgfQorCisgICAgdm9pZCBhZGQoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQor
ICAgIHsKKyAgICAgICAgbV91bmRlcmx5aW5nLmFkZCh1LCB2KTsKKyAgICAgICAgbV91bmRlcmx5
aW5nLmFkZCh2LCB1KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkgeyBtX3VuZGVybHlpbmcu
Y2xlYXIoKTsgfQorICAgIHZvaWQgbWF5Q2xlYXIoSW5kZXhUeXBlIHUpIHsgbV91bmRlcmx5aW5n
Lm1heUNsZWFyKHUpOyB9CisgICAgdm9pZCBzZXRNYXhJbmRleCh1bnNpZ25lZCBuKSB7IG1fdW5k
ZXJseWluZy5zZXRNYXhJbmRleChuKTsgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSB7IG1fdW5kZXJseWlu
Zy5mb3JFYWNoKGZ1bmN0b3IpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdW5kZXJseWluZy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBtZW1vcnlVc2UoKSBjb25zdCB7
IHJldHVybiBtX3VuZGVybHlpbmcubWVtb3J5VXNlKCk7IH0KKyAgICB2b2lkIGR1bXBNZW1vcnlV
c2VJbktCKCkgY29uc3QgeyBtX3VuZGVybHlpbmcuZHVtcE1lbW9yeVVzZUluS0IoKTsgfQorICAg
IEl0ZXJhYmxlIG9wZXJhdG9yW10oSW5kZXhUeXBlIHUpIGNvbnN0IHsgcmV0dXJuIG1fdW5kZXJs
eWluZ1t1XTsgfQorCitwcml2YXRlOgorICAgIFQgbV91bmRlcmx5aW5nOworfTsKKworLy8gVGhp
cyBpcyBnZW5lcmFsbHkgYmV0dGVyIHRoYW4gdGhlIER1cGxpY2F0aW5nIHZlcnNpb24sIHRoZXJl
IGFyZSB0d28gcmVhc29ucyBub3QgdG8gdXNlIGl0IHRob3VnaDoKKy8vIC0gRm9yIEJpdFZlY3Rv
ciwgaXQgaGFzIG5vIGVmZmVjdCBvbiBtZW1vcnkgdXNlLCBhbmQgYWRkcyBhIGJyYW5jaCB0byBl
dmVyeSBjYWxsIHRvIGNvbnRhaW5zL2FkZEFuZFJldHVybklzTmV3RW50cnkKKy8vIC0gSXQgbWFr
ZXMgaXQgaW1wb3NzaWJsZSB0byBpdGVyYXRlIG92ZXIgdGhlIGluZGljZXMgdGhhdCBpbnRlcmZl
cmUgd2l0aCBhIHBhcnRpY3VsYXIgaW5kZXguIFRoaXMgY2FuIGJlIHJlcXVpcmVkIGZvciBzb21l
IHVzZXMgKHNlZSBBaXJBbGxvY2F0ZVN0YWNrQnlHcmFwaENvbG9yaW5nKQordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIFVuZGlyZWN0ZWRFZGdlc0RlZHVwQWRhcHRlciB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgSW5kZXhUeXBlID0gdHlwZW5hbWUgVDo6SW5kZXhUeXBlOworICAgIGJvb2wgY29u
dGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgaWYgKHYgPCB1
KQorICAgICAgICAgICAgc3RkOjpzd2FwKHUsIHYpOworICAgICAgICByZXR1cm4gbV91bmRlcmx5
aW5nLmNvbnRhaW5zKHUsIHYpOworICAgIH0KKworICAgIGJvb2wgYWRkQW5kUmV0dXJuSXNOZXdF
bnRyeShJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodiA8IHUp
CisgICAgICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIHJldHVybiBtX3VuZGVybHlp
bmcuYWRkQW5kUmV0dXJuSXNOZXdFbnRyeSh1LCB2KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZChJ
bmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBpZiAodiA8IHUpCisgICAg
ICAgICAgICBzdGQ6OnN3YXAodSwgdik7CisgICAgICAgIG1fdW5kZXJseWluZy5hZGQodSwgdik7
CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgbV91bmRlcmx5aW5nLmNsZWFyKCk7IH0KKyAg
ICB2b2lkIG1heUNsZWFyKEluZGV4VHlwZSB1KSB7IG1fdW5kZXJseWluZy5tYXlDbGVhcih1KTsg
fQorICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikgeyBtX3VuZGVybHlpbmcuc2V0TWF4
SW5kZXgobik7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgeyBtX3VuZGVybHlpbmcuZm9yRWFjaChmdW5j
dG9yKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3VuZGVybHlpbmcu
c2l6ZSgpOyB9CisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkgY29uc3QgeyByZXR1cm4gbV91bmRl
cmx5aW5nLm1lbW9yeVVzZSgpOyB9CisgICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0
IHsgbV91bmRlcmx5aW5nLmR1bXBNZW1vcnlVc2VJbktCKCk7IH0KKworcHJpdmF0ZToKKyAgICBU
IG1fdW5kZXJseWluZzsKK307CisKKy8vIFRoZSBiaXQgdmVjdG9yIGFwcHJvYWNoIHVzZXMgbipu
IGJpdHMsIG9yIDIwa0IgZm9yIG4gPSA0MDAuCitjb25zdGV4cHIgdW5zaWduZWQgbWF4U2l6ZUZv
clNtYWxsSW50ZXJmZXJlbmNlR3JhcGggPSA0MDA7Cit1c2luZyBEZWZhdWx0U21hbGxJbnRlcmZl
cmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdlc0R1cGxpY2F0aW5nQWRhcHRlcjxJbnRlcmZlcmVu
Y2VCaXRWZWN0b3I8dWludDE2X3Q+PjsKK3VzaW5nIERlZmF1bHRTbWFsbEl0ZXJhYmxlSW50ZXJm
ZXJlbmNlR3JhcGggPSBEZWZhdWx0U21hbGxJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIERlZmF1
bHRMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPElu
dGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50MTZfdD4s
IHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0SHVnZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJl
Y3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2ln
bmVkSW50ZWdlclNldDx1aW50MzJfdD4sIHVpbnQzMl90Pj47Cit1c2luZyBEZWZhdWx0TGFyZ2VJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFw
dGVyPEludGVyZmVyZW5jZVZlY3RvcjxMaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldDx1aW50
MTZfdD4sIHVpbnQxNl90Pj47Cit1c2luZyBEZWZhdWx0SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGggPSBVbmRpcmVjdGVkRWRnZXNEdXBsaWNhdGluZ0FkYXB0ZXI8SW50ZXJmZXJlbmNlVmVj
dG9yPExpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0PHVpbnQzMl90PiwgdWludDMyX3Q+PjsK
KworLy8gU2V0IHRvIG9uZSB0byBydW4gYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gaW4gcGFy
YWxsZWwgd2l0aCB0aGUgb3B0aW1pemVkIGRhdGFzdHJ1Y3R1cmUsIHZlcmlmeWluZyB0aGF0IHRo
ZXkgYWdyZWUgb24gZXZlcnkgbWV0aG9kIGNhbGwuCisvLyBCZXdhcmU6IHRoaXMgaXMgbmF0dXJh
bGx5IG11Y2ggc2xvd2VyIGFuZCBtZW1vcnkgaHVuZ3J5CisjZGVmaW5lIFRFU1RfT1BUSU1JWkVE
X0lOVEVSRkVSRU5DRV9HUkFQSCAwCisjaWYgIVRFU1RfT1BUSU1JWkVEX0lOVEVSRkVSRU5DRV9H
UkFQSAorCit1c2luZyBTbWFsbEludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdFNtYWxsSW50ZXJm
ZXJlbmNlR3JhcGg7Cit1c2luZyBMYXJnZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdExhcmdl
SW50ZXJmZXJlbmNlR3JhcGg7Cit1c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBEZWZhdWx0
SHVnZUludGVyZmVyZW5jZUdyYXBoOworCit1c2luZyBTbWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGggPSBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOwordXNpbmcgTGFy
Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVsdExhcmdlSXRlcmFibGVJbnRlcmZl
cmVuY2VHcmFwaDsKK3VzaW5nIEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gRGVmYXVs
dEh1Z2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoOworCisjZWxzZSAvLyBURVNUX09QVElNSVpF
RF9JTlRFUkZFUkVOQ0VfR1JBUEgKKworLy8gVGhpcyBpcyBhbiB1bm9wdGltaXplZCByZWZlcmVu
Y2UgaW1wbGVtZW50YXRpb24sIGZvciB1c2Ugd2l0aCBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VH
cmFwaCBiZWxvdwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBJbnRlcmZlcmVuY2VIYXNo
U2V0IHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSBUOworICAgIHVzaW5nIEludGVy
ZmVyZW5jZUVkZ2UgPSBzdGQ6OnBhaXI8SW5kZXhUeXBlLCBJbmRleFR5cGU+OworICAgIGJvb2wg
Y29udGFpbnMoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc2V0LmNvbnRhaW5zKHsgdSwgdiB9KTsKKyAgICB9CisKKyAgICBib29sIGFkZEFuZFJldHVy
bklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fc2V0LmFkZCh7IHUsIHYgfSkuaXNOZXdFbnRyeTsKKyAgICB9CisKKyAgICB2b2lkIGFk
ZChJbmRleFR5cGUgdSwgSW5kZXhUeXBlIHYpCisgICAgeworICAgICAgICBtX3NldC5hZGQoeyB1
LCB2IH0pOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zZXQu
Y2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIHNldE1heEluZGV4KHVuc2lnbmVkIG4pCisgICAg
eworICAgICAgICBBU1NFUlRfVU5VU0VEKG4sIG4gPCBzdGQ6Om51bWVyaWNfbGltaXRzPEluZGV4
VHlwZT46Om1heCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGZvciAoYXV0byBlZGdlIDogbV9zZXQpCisgICAgICAgICAgICBmdW5jdG9yKGVkZ2UpOworICAg
IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NldC5zaXplKCk7IH0K
KworICAgIHVuc2lnbmVkIG1lbW9yeVVzZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmNhcGFjaXR5
KCkgKiBzaXplb2YoSW50ZXJmZXJlbmNlRWRnZSk7IH0KKworICAgIHZvaWQgZHVtcE1lbW9yeVVz
ZUluS0IoKSBjb25zdCB7IGRhdGFMb2cobWVtb3J5VXNlKCkgLyAxMDI0KTsgfQorCitwcml2YXRl
OgorICAgIEhhc2hTZXQ8SW50ZXJmZXJlbmNlRWRnZT4gbV9zZXQ7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KK2NsYXNzIEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdy
YXBoIHsKK3B1YmxpYzoKKyAgICB1c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBUOjpJbmRleFR5
cGU7CisgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8SW5kZXhUeXBlLCB0eXBlbmFtZSBV
OjpJbmRleFR5cGU+Ojp2YWx1ZSk7CisgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdSwgSW5k
ZXhUeXBlIHYpCisgICAgeworICAgICAgICBib29sIGNvbnRhaW5zSW5BID0gbV9zZXRBLmNvbnRh
aW5zKHUsIHYpOworICAgICAgICBib29sIGNvbnRhaW5zSW5CID0gbV9zZXRCLmNvbnRhaW5zKHUs
IHYpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjb250YWluc0luQSA9PSBjb250YWluc0luQik7
CisgICAgICAgIHJldHVybiBjb250YWluc0luQTsKKyAgICB9CisKKyAgICBib29sIGFkZEFuZFJl
dHVybklzTmV3RW50cnkoSW5kZXhUeXBlIHUsIEluZGV4VHlwZSB2KQorICAgIHsKKyAgICAgICAg
Ym9vbCBpc05ld0VudHJ5QSA9IG1fc2V0QS5hZGRBbmRSZXR1cm5Jc05ld0VudHJ5KHUsIHYpOwor
ICAgICAgICBib29sIGlzTmV3RW50cnlCID0gbV9zZXRCLmFkZEFuZFJldHVybklzTmV3RW50cnko
dSwgdik7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzTmV3RW50cnlBID09IGlzTmV3RW50cnlC
KTsKKyAgICAgICAgcmV0dXJuIGlzTmV3RW50cnlBOworICAgIH0KKworICAgIHZvaWQgYWRkKElu
ZGV4VHlwZSB1LCBJbmRleFR5cGUgdikKKyAgICB7CisgICAgICAgIG1fc2V0QS5hZGQodSwgdik7
CisgICAgICAgIG1fc2V0Qi5hZGQodSwgdik7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisg
ICAgeworICAgICAgICBtX3NldEEuY2xlYXIoKTsKKyAgICAgICAgbV9zZXRCLmNsZWFyKCk7Cisg
ICAgfQorCisgICAgdm9pZCBtYXlDbGVhcihJbmRleFR5cGUgdSkKKyAgICB7CisgICAgICAgIG1f
c2V0QS5tYXlDbGVhcih1KTsKKyAgICAgICAgbV9zZXRCLm1heUNsZWFyKHUpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0TWF4SW5kZXgodW5zaWduZWQgbikKKyAgICB7CisgICAgICAgIEFTU0VSVChu
IDwgc3RkOjpudW1lcmljX2xpbWl0czxJbmRleFR5cGU+OjptYXgoKSk7CisgICAgICAgIG1fc2V0
QS5zZXRNYXhJbmRleChuKTsKKyAgICAgICAgbV9zZXRCLnNldE1heEluZGV4KG4pOworICAgIH0K
KworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9zZXRBLmZvckVhY2goZnVuY3Rv
cik7CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICB1
bnNpZ25lZCBzaXplQSA9IG1fc2V0QS5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIHNpemVCID0g
bV9zZXRCLnNpemUoKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoc2l6ZUEgPT0gc2l6ZUIpOwor
ICAgICAgICByZXR1cm4gc2l6ZUE7CisgICAgfQorCisgICAgdW5zaWduZWQgbWVtb3J5VXNlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldEEubWVtb3J5VXNlKCkgKyBtX3NldEIu
bWVtb3J5VXNlKCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wTWVtb3J5VXNlSW5LQigpIGNvbnN0
CisgICAgeworICAgICAgICBkYXRhTG9nKG1fc2V0QS5tZW1vcnlVc2UoKSAvIDEwMjQsICIgLT4g
IiwgbV9zZXRCLm1lbW9yeVVzZSgpIC8gMTAyNCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
VCBtX3NldEE7CisgICAgVSBtX3NldEI7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlw
ZW5hbWUgVT4KK2NsYXNzIEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGggOiBw
dWJsaWMgSW5zdHJ1bWVudGVkSW50ZXJmZXJlbmNlR3JhcGg8VCwgVT4geworcHVibGljOgorICAg
IHVzaW5nIEJhc2UgPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxULCBVPjsKKyAgICB1
c2luZyBJbmRleFR5cGUgPSB0eXBlbmFtZSBCYXNlOjpJbmRleFR5cGU7CisKKyAgICBzdHJ1Y3Qg
SXRlcmFibGUgeworICAgICAgICBJdGVyYWJsZSh0eXBlbmFtZSBUOjpJdGVyYWJsZSBpdGVyYWJs
ZUEsIHR5cGVuYW1lIFU6Okl0ZXJhYmxlIGl0ZXJhYmxlQikKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yIChJbmRleFR5cGUgdmFsdWUgOiBpdGVyYWJsZUEpCisgICAgICAgICAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAgIFZlY3RvcjxJbmRleFR5cGU+IHZhbHVl
c0I7CisgICAgICAgICAgICBmb3IgKEluZGV4VHlwZSB2YWx1ZSA6IGl0ZXJhYmxlQikKKyAgICAg
ICAgICAgICAgICB2YWx1ZXNCLmFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChtX3ZhbHVlcy5zaXplKCkgPT0gdmFsdWVzQi5zaXplKCkpOworICAgICAgICAgICAgc3Rk
Ojpzb3J0KG1fdmFsdWVzLmJlZ2luKCksIG1fdmFsdWVzLmVuZCgpKTsKKyAgICAgICAgICAgIHN0
ZDo6c29ydCh2YWx1ZXNCLmJlZ2luKCksIHZhbHVlc0IuZW5kKCkpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKG1fdmFsdWVzW2ldID09IHZhbHVlc0JbaV0pOworICAgICAgICB9
CisgICAgICAgIHVzaW5nIGl0ZXJhdG9yID0gdHlwZW5hbWUgVmVjdG9yPEluZGV4VHlwZT46OmNv
bnN0X2l0ZXJhdG9yOworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7CisgICAgICAgIH0KKyAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPEluZGV4VHlwZT4gbV92
YWx1ZXM7CisgICAgfTsKKworICAgIEl0ZXJhYmxlIG9wZXJhdG9yW10oSW5kZXhUeXBlIHUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4geyBCYXNlOjptX3NldEFbdV0sIEJhc2U6Om1fc2V0
Qlt1XSB9OworICAgIH0KK307CisKK3VzaW5nIFJlZmVyZW5jZUludGVyZmVyZW5jZUdyYXBoID0g
VW5kaXJlY3RlZEVkZ2VzRGVkdXBBZGFwdGVyPEludGVyZmVyZW5jZUhhc2hTZXQ8dWludDE2X3Q+
PjsKK3VzaW5nIEh1Z2VSZWZlcmVuY2VJbnRlcmZlcmVuY2VHcmFwaCA9IFVuZGlyZWN0ZWRFZGdl
c0RlZHVwQWRhcHRlcjxJbnRlcmZlcmVuY2VIYXNoU2V0PHVpbnQzMl90Pj47CisKK3VzaW5nIFNt
YWxsSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZlcmVuY2VHcmFwaDxSZWZl
cmVuY2VJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdFNtYWxsSW50ZXJmZXJlbmNlR3JhcGg+Owor
dXNpbmcgTGFyZ2VJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEludGVyZmVyZW5jZUdy
YXBoPFJlZmVyZW5jZUludGVyZmVyZW5jZUdyYXBoLCBEZWZhdWx0TGFyZ2VJbnRlcmZlcmVuY2VH
cmFwaD47Cit1c2luZyBIdWdlSW50ZXJmZXJlbmNlR3JhcGggPSBJbnN0cnVtZW50ZWRJbnRlcmZl
cmVuY2VHcmFwaDxIdWdlUmVmZXJlbmNlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1bHRIdWdlSW50
ZXJmZXJlbmNlR3JhcGg+OworCit1c2luZyBSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5jZUdy
YXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFwdGVyPEludGVyZmVyZW5jZVZlY3Rv
cjxIYXNoU2V0PHVpbnQxNl90LCBJbnRIYXNoPHVpbnQxNl90PiwgVW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8dWludDE2X3Q+PiwgdWludDE2X3Q+PjsKK3VzaW5nIEh1Z2VSZWZlcmVuY2VJ
dGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gVW5kaXJlY3RlZEVkZ2VzRHVwbGljYXRpbmdBZGFw
dGVyPEludGVyZmVyZW5jZVZlY3RvcjxIYXNoU2V0PHVpbnQzMl90LCBJbnRIYXNoPHVpbnQzMl90
PiwgVW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDMyX3Q+PiwgdWludDMyX3Q+PjsK
KwordXNpbmcgU21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoID0gSW5zdHJ1bWVudGVkSXRl
cmFibGVJbnRlcmZlcmVuY2VHcmFwaDxSZWZlcmVuY2VJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBo
LCBEZWZhdWx0U21hbGxJdGVyYWJsZUludGVyZmVyZW5jZUdyYXBoPjsKK3VzaW5nIExhcmdlSXRl
cmFibGVJbnRlcmZlcmVuY2VHcmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNl
R3JhcGg8UmVmZXJlbmNlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaCwgRGVmYXVsdExhcmdlSXRl
cmFibGVJbnRlcmZlcmVuY2VHcmFwaD47Cit1c2luZyBIdWdlSXRlcmFibGVJbnRlcmZlcmVuY2VH
cmFwaCA9IEluc3RydW1lbnRlZEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg8SHVnZVJlZmVyZW5j
ZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGgsIERlZmF1bHRIdWdlSXRlcmFibGVJbnRlcmZlcmVu
Y2VHcmFwaD47CisKKyNlbmRpZiAvLyBURVNUX09QVElNSVpFRF9JTlRFUkZFUkVOQ0VfR1JBUEgK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U21hbGxJbnRlcmZlcmVuY2VHcmFw
aDsKK3VzaW5nIFdURjo6TGFyZ2VJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIFdURjo6SHVnZUlu
dGVyZmVyZW5jZUdyYXBoOwordXNpbmcgV1RGOjpTbWFsbEl0ZXJhYmxlSW50ZXJmZXJlbmNlR3Jh
cGg7Cit1c2luZyBXVEY6OkxhcmdlSXRlcmFibGVJbnRlcmZlcmVuY2VHcmFwaDsKK3VzaW5nIFdU
Rjo6SHVnZUl0ZXJhYmxlSW50ZXJmZXJlbmNlR3JhcGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNldC5oIGIvU291cmNlL1dURi93dGYvTGlr
ZWx5RGVuc2VVbnNpZ25lZEludGVnZXJTZXQuaAppbmRleCA5YjZiM2Q4N2U3ODQuLjg4ZTNmNDUx
MDk1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvTGlrZWx5RGVuc2VVbnNpZ25lZEludGVn
ZXJTZXQuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9MaWtlbHlEZW5zZVVuc2lnbmVkSW50ZWdlclNl
dC5oCkBAIC01Myw3ICs1Myw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX21pbigwKQogICAgICAg
ICAsIG1fbWF4KDApCiAgICAgewotICAgICAgICBuZXcgKCZtX2lubGluZS5iaXRWZWN0b3IpIEJp
dFZlY3RvcjsKKyAgICAgICAgbmV3IChOb3ROdWxsLCAmbV9pbmxpbmUuYml0VmVjdG9yKSBCaXRW
ZWN0b3I7CiAgICAgfQogCiAgICAgfkxpa2VseURlbnNlVW5zaWduZWRJbnRlZ2VyU2V0KCkKQEAg
LTcwLDkgKzcwLDIyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX21heChvdGhlci5tX21heCkKICAg
ICB7CiAgICAgICAgIGlmIChpc0JpdFZlY3RvcigpKQotICAgICAgICAgICAgbmV3ICgmbV9pbmxp
bmUuYml0VmVjdG9yKSBCaXRWZWN0b3IoV1RGTW92ZShvdGhlci5tX2lubGluZS5iaXRWZWN0b3Ip
KTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVj
dG9yKFdURk1vdmUob3RoZXIubV9pbmxpbmUuYml0VmVjdG9yKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG5ldyAoJm1faW5saW5lLmhhc2hTZXQpIFNldChXVEZNb3ZlKG90aGVyLm1faW5s
aW5lLmhhc2hTZXQpKTsKKyAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJm1faW5saW5lLmhhc2hT
ZXQpIFNldChXVEZNb3ZlKG90aGVyLm1faW5saW5lLmhhc2hTZXQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fbWluID0g
MDsKKyAgICAgICAgbV9tYXggPSAwOworICAgICAgICBpZiAoaXNCaXRWZWN0b3IoKSkKKyAgICAg
ICAgICAgIG1faW5saW5lLmJpdFZlY3Rvci5jbGVhckFsbCgpOworICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgIG1faW5saW5lLmhhc2hTZXQufkhhc2hTZXQoKTsKKyAgICAgICAgICAgIG5ldyAo
Tm90TnVsbCwgJm1faW5saW5lLmJpdFZlY3RvcikgQml0VmVjdG9yOworICAgICAgICB9CiAgICAg
fQogCiAgICAgYm9vbCBjb250YWlucyhJbmRleFR5cGUgdmFsdWUpIGNvbnN0CkBAIC0xMzEsOSAr
MTQ0LDcgQEAgcHVibGljOgogICAgICAgICBJbmRleFR5cGUgbmV3TWluID0gc3RkOjptaW4obV9t
aW4sIHZhbHVlKTsKICAgICAgICAgSW5kZXhUeXBlIG5ld01heCA9IHN0ZDo6bWF4KG1fbWF4LCB2
YWx1ZSk7CiAgICAgICAgIHVuc2lnbmVkIGJpdFZlY3RvclNpemUgPSAobmV3TWF4IC0gbmV3TWlu
KSAvIDg7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hTZXRFc3RpbWF0ZWRPY2N1cGFuY3lPdmVyaGVh
ZCA9IDM7IC8vIG1heCBvY2N1cGFuY3kgZm9yIGEgbGFyZ2UgSGFzaFNldCBpcyA1MCUKLSAgICAg
ICAgdW5zaWduZWQgd291bGRCZUhhc2hTZXRDYXBhY2l0eSA9IHN0ZDo6bWF4KDh1LCBtX3NpemUp
ICogaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJoZWFkOwotICAgICAgICB1bnNpZ25lZCB3
b3VsZEJlSGFzaFNldFNpemUgPSB3b3VsZEJlSGFzaFNldENhcGFjaXR5ICogc2l6ZW9mKEluZGV4
VHlwZSk7CisgICAgICAgIHVuc2lnbmVkIHdvdWxkQmVIYXNoU2V0U2l6ZSA9IGVzdGltYXRlSGFz
aFNldFNpemUobV9zaXplKTsKICAgICAgICAgaWYgKHdvdWxkQmVIYXNoU2V0U2l6ZSAqIDIgPCBi
aXRWZWN0b3JTaXplKSB7CiAgICAgICAgICAgICB0cmFuc2l0aW9uVG9IYXNoU2V0KCk7CiAgICAg
ICAgICAgICBhdXRvIHJlc3VsdCA9IG1faW5saW5lLmhhc2hTZXQuYWRkKHZhbHVlKTsKQEAgLTI2
OSw2ICsyODAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICYmICFVbnNpZ25lZFdpdGhaZXJv
S2V5SGFzaFRyYWl0czxJbmRleFR5cGU+Ojppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSk7CiAgICAgfQog
CisgICAgdW5zaWduZWQgZXN0aW1hdGVIYXNoU2V0U2l6ZSh1bnNpZ25lZCBuKQorICAgIHsKKyAg
ICAgICAgdW5zaWduZWQgaGFzaFNldEVzdGltYXRlZE9jY3VwYW5jeU92ZXJoZWFkID0gMzsgLy8g
bWF4IG9jY3VwYW5jeSBmb3IgYSBsYXJnZSBIYXNoU2V0IGlzIDUwJQorICAgICAgICB1bnNpZ25l
ZCB3b3VsZEJlSGFzaFNldENhcGFjaXR5ID0gc3RkOjptYXgoOHUsIG4pICogaGFzaFNldEVzdGlt
YXRlZE9jY3VwYW5jeU92ZXJoZWFkOworICAgICAgICByZXR1cm4gd291bGRCZUhhc2hTZXRDYXBh
Y2l0eSAqIHNpemVvZihJbmRleFR5cGUpOworICAgIH0KKwogICAgIHZvaWQgdHJhbnNpdGlvblRv
SGFzaFNldCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXNCaXRWZWN0b3IoKSk7CkBAIC0yNzgs
NyArMjk2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgZm9yIChJbmRleFR5cGUgb2xkSW5kZXggOiBt
X2lubGluZS5iaXRWZWN0b3IpCiAgICAgICAgICAgICBuZXdTZXQuYWRkKG9sZEluZGV4ICsgbV9t
aW4pOwogICAgICAgICBtX2lubGluZS5iaXRWZWN0b3IufkJpdFZlY3RvcigpOwotICAgICAgICBu
ZXcgKCZtX2lubGluZS5oYXNoU2V0KSBTZXQoV1RGTW92ZShuZXdTZXQpKTsKKyAgICAgICAgbmV3
IChOb3ROdWxsLCAmbV9pbmxpbmUuaGFzaFNldCkgU2V0KFdURk1vdmUobmV3U2V0KSk7CiAgICAg
ICAgIG1fc2l6ZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKTsKIAogICAg
ICAgICBBU1NFUlQoIWlzQml0VmVjdG9yKCkpOwpAQCAtMjk3LDcgKzMxNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKG5ld0JpdFZlY3Rvci5xdWlja0dldCgwKSk7CiAg
ICAgICAgIG1faW5saW5lLmhhc2hTZXQuflNldCgpOwotICAgICAgICBuZXcgKCZtX2lubGluZS5i
aXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZlY3RvcikpOworICAgICAgICBuZXcg
KE5vdE51bGwsICZtX2lubGluZS5iaXRWZWN0b3IpIEJpdFZlY3RvcihXVEZNb3ZlKG5ld0JpdFZl
Y3RvcikpOwogCiAgICAgICAgIEFTU0VSVChpc0JpdFZlY3RvcigpKTsKICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>