<?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>142036</bug_id>
          
          <creation_ts>2015-02-25 18:54:48 -0800</creation_ts>
          <short_desc>DFG SSA stack accesses shouldn&apos;t speak of VariableAccessDatas</short_desc>
          <delta_ts>2015-02-26 11:52:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>141174</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1072258</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-25 18:54:48 -0800</bug_when>
    <thetext>VariableAccessData is super useful in ThreadedCPS because it allows us to region about things that span basic blocks.  It also allows us to do stepwise type inference on variables.  But it&apos;s purely harmful in SSA.  SSA shouldn&apos;t speak of it.

The main effect of this is that it will allow us to easily introduce new stack accesses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072259</commentid>
    <comment_count>1</comment_count>
      <attachid>247390</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-25 18:56:11 -0800</bug_when>
    <thetext>Created attachment 247390
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072286</commentid>
    <comment_count>2</comment_count>
      <attachid>247402</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-25 21:17:42 -0800</bug_when>
    <thetext>Created attachment 247402
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072287</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-25 21:19:54 -0800</bug_when>
    <thetext>Attachment 247402 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:102:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:224:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:233:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:395:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp:193:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:209:  There should be exactly one empty line instead of 0 between &quot;disassembler/ARM64/A64DOpcode.cpp&quot; and &quot;disassembler/ARMv7/ARMv7DOpcode.cpp&quot;.  [list/emptyline] [5]
Total errors found: 7 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072289</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-25 21:25:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 247402 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:102:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:112:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:224:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:233:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]
&gt; ERROR: Source/JavaScriptCore/dfg/DFGPutStackSinkingPhase.cpp:395:  Place
&gt; brace on its own line for function definitions.  [whitespace/braces] [4]

No.

&gt; ERROR: Source/JavaScriptCore/dfg/DFGStackLayoutPhase.cpp:193:  More than one
&gt; command on the same line  [whitespace/newline] [4]

Fixed.

&gt; ERROR: Source/JavaScriptCore/CMakeLists.txt:209:  There should be exactly
&gt; one empty line instead of 0 between &quot;disassembler/ARM64/A64DOpcode.cpp&quot; and
&gt; &quot;disassembler/ARMv7/ARMv7DOpcode.cpp&quot;.  [list/emptyline] [5]

No.

&gt; Total errors found: 7 in 31 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072419</commentid>
    <comment_count>5</comment_count>
      <attachid>247402</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-02-26 10:22:03 -0800</bug_when>
    <thetext>Comment on attachment 247402
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072452</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-26 11:52:30 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/180691</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247390</attachid>
            <date>2015-02-25 18:56:11 -0800</date>
            <delta_ts>2015-02-25 21:17:42 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>106322</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTY3LDYgKzE2NywxNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBHZXRT
dGFjazogeworICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBub2RlLT5zdGFja0FjY2Vz
c0RhdGEoKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVz
KCkub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIC8vIFRoZSB2YWx1ZSBpbiB0aGUgbG9j
YWwgc2hvdWxkIGFscmVhZHkgYmUgY2hlY2tlZC4KKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBub2RlLCB2YWx1ZS5pc1R5cGUodHlwZUZpbHRlckZvcihkYXRhLT5mb3JtYXQpKSk7CisgICAg
ICAgIGlmICh2YWx1ZS52YWx1ZSgpKQorICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgZm9yTm9kZShub2RlKSA9IHZhbHVlOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDogewogICAgICAg
ICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUt
PnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSk7CiAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSgpKQpA
QCAtMTc1LDkgKzE4NiwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTZXRMb2NhbDoK
LSAgICBjYXNlIFB1dExvY2FsOiB7Ci0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFu
ZChub2RlLT5sb2NhbCgpLm9mZnNldCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAg
IGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKG5v
ZGUtPmxvY2FsKCkpID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBQdXRTdGFjazogeworICAgICAgICBtX3N0YXRlLnZh
cmlhYmxlcygpLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4
MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOTksMTEgKzM5OSwyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdy
YXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRM
b2NhbDoKLSAgICBjYXNlIFB1dExvY2FsOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFy
aWFibGVzLCBub2RlLT5sb2NhbCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFi
bGVMb2MsIEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEdldFN0
YWNrOiB7CisgICAgICAgIEFidHJhY3RIZWFwIGhlYXAoVmFyaWFibGVzLCBub2RlLT5zdGFja0Fj
Y2Vzc0RhdGEoKS0+bG9jYWwpOworICAgICAgICByZWFkKGhlYXApOworICAgICAgICBkZWYoSGVh
cExvY2F0aW9uKFZhcmlhYmxlc0xvYywgaGVhcCksIG5vZGUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgICAgICAKKyAgICBjYXNlIFB1dFN0YWNrOiB7CisgICAgICAgIEFic3RyYWN0SGVh
cCBoZWFwKFZhcmlhYmxlcywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAg
ICAgd3JpdGUoaGVhcCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVzTG9jLCBo
ZWFwLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgLy8gVGhpcyBhY3R1YWxseSB3
cml0ZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFzIHdlbGwuIEJ1dCB3aGVuIGl0IHJlYWRzIHRoZSBh
cnJheSwgaXQgZG9lcwogICAgICAgICAvLyBzbyBpbiBhIHdheSB0aGF0IG1heSB0cmlnZ2VyIGdl
dHRlcnMgb3IgdmFyaW91cyB0cmFwcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODA1ODAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDcgKzM5NywxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmln
aW4sIG5vZGUtPmNoaWxkcmVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxpbmtlZChWaXJ0dWFsUmVn
aXN0ZXIob3BlcmFuZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9m
b3JtID09IFNTQSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlLT5jb252ZXJ0VG9H
ZXRTdGFjayhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChWaXJ0dWFsUmVnaXN0ZXIob3Bl
cmFuZCksIEZsdXNoZWRKU1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvR2V0TG9jYWxVbmxpbmtl
ZChWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxODA1ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIwNiw4ICsyMDYsOSBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0
ZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6Ci0gICAgY2FzZSBQdXRMb2NhbDoKLSAgICBj
YXNlIEtpbGxMb2NhbDoKKyAgICBjYXNlIFB1dFN0YWNrOgorICAgIGNhc2UgS2lsbFN0YWNrOgor
ICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNhc2UgQ3Jl
YXRlQWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw4ICsxMDU4LDkgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZUltbWVkaWF0ZToKICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAgICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0
OgotICAgICAgICBjYXNlIFB1dExvY2FsOgotICAgICAgICBjYXNlIEtpbGxMb2NhbDoKKyAgICAg
ICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgY2FzZSBLaWxsU3RhY2s6CisgICAgICAgIGNhc2Ug
R2V0U3RhY2s6CiAgICAgICAgICAgICAvLyBUaGVzZSBhcmUganVzdCBub2RlcyB0aGF0IHdlIGRv
bid0IGN1cnJlbnRseSBleHBlY3QgdG8gc2VlIGR1cmluZyBmaXh1cC4KICAgICAgICAgICAgIC8v
IElmIHdlIGV2ZXIgd2FudGVkIHRvIGluc2VydCB0aGVtIHByaW9yIHRvIGZpeHVwLCB0aGVuIHdl
IGp1c3QgaGF2ZSB0byBjcmVhdGUKICAgICAgICAgICAgIC8vIGZpeHVwIHJ1bGVzIGZvciB0aGVt
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkocmV2
aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1h
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDExIEBAIGlubGluZSBGbHVzaEZvcm1h
dCBtZXJnZShGbHVzaEZvcm1hdCBhLCAKICAgICByZXR1cm4gQ29uZmxpY3RpbmdGbHVzaDsKIH0K
IAoraW5saW5lIEZsdXNoRm9ybWF0IGlzQ29uY3JldGUoRmx1c2hGb3JtYXQgZm9ybWF0KQorewor
ICAgIHJldHVybiBmb3JtYXQgIT0gRGVhZEZvcm1hdCAmJiBmb3JtYXQgIT0gQ29uZmxpY3RpbmdG
bHVzaDsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODA1
ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgyLDYgKzI4MiwxMyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBv
cGVyYW5kKTsKICAgICAgICAgfQogICAgIH0KKyAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NE
YXRhKCkpIHsKKyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCk7CisgICAgICAgIG91dC5wcmludChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAg
ICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+bWFjaGluZUxvY2FsKTsKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOworICAgIH0KICAgICBpZiAobm9kZS0+aGFzVW5saW5r
ZWRMb2NhbCgpKSAKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2Fs
KCkpOwogICAgIGlmIChub2RlLT5oYXNVbmxpbmtlZE1hY2hpbmVMb2NhbCgpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4Myw3
ICs3ODMsNyBAQCBwdWJsaWM6CiAgICAgLy8gdGhhdCBzdXJ2aXZlZCBEQ0UuIEFsbCBvZiB0aGVt
IGV4Y2VwdCBtYXliZSAidGhpcyIgd2lsbCBzdXJ2aXZlIERDRSwgYmVjYXVzZSBvZiB0aGUgRmx1
c2gKICAgICAvLyBub2Rlcy4KICAgICAvLwotICAgIC8vIEluIFNTQSwgdGhpcyBpcyBhbGwgb2Yg
dGhlIEdldExvY2FsIG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUg
YmxvY2sgdGhhdAorICAgIC8vIEluIFNTQSwgdGhpcyBpcyBhbGwgb2YgdGhlIEdldFN0YWNrIG5v
ZGVzIGZvciB0aGUgYXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sgdGhhdAogICAg
IC8vIG1heSBoYXZlIHNvbWUgc3BlY3VsYXRpb24gaW4gdGhlIHByb2xvZ3VlIGFuZCBzdXJ2aXZl
ZCBEQ0UuIE5vdGUgdGhhdCB0byBnZXQgdGhlIHNwZWN1bGF0aW9uCiAgICAgLy8gZm9yIGFuIGFy
Z3VtZW50IGluIFNTQSwgeW91IG11c3QgdXNlIG1fYXJndW1lbnRGb3JtYXRzLCBzaW5jZSB3ZSBz
dGlsbCBoYXZlIHRvIHNwZWN1bGF0ZQogICAgIC8vIGV2ZW4gaWYgdGhlIGFyZ3VtZW50IGdvdCBr
aWxsZWQuIEZvciBleGFtcGxlOgpAQCAtNzk0LDcgKzc5NCw3IEBAIHB1YmxpYzoKICAgICAvLwog
ICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgYWx3YXlzIGludCBkdXJpbmcgcHJvZmlsaW5nLiBUaGUg
QXJpdGhBZGQgZm9yICJ4ICsgMSIgd2lsbCBiZSBkZWFkIGFuZCB3aWxsCiAgICAgLy8gaGF2ZSBh
IHByb3ZlbiBjaGVjayBmb3IgdGhlIGVkZ2UgdG8gIngiLiBTbywgd2Ugd2lsbCBub3QgaW5zZXJ0
IGEgQ2hlY2sgbm9kZSBhbmQgd2Ugd2lsbAotICAgIC8vIGtpbGwgdGhlIEdldExvY2FsIGZvciAi
eCIuIEJ1dCwgd2UgbXVzdCBkbyB0aGUgaW50IGNoZWNrIGluIHRoZSBwcm9nb2x1ZSwgYmVjYXVz
ZSB0aGF0J3MgdGhlCisgICAgLy8ga2lsbCB0aGUgR2V0U3RhY2sgZm9yICJ4Ii4gQnV0LCB3ZSBt
dXN0IGRvIHRoZSBpbnQgY2hlY2sgaW4gdGhlIHByb2dvbHVlLCBiZWNhdXNlIHRoYXQncyB0aGUK
ICAgICAvLyB0aGluZyB3ZSB1c2VkIHRvIGFsbG93IERDRSBvZiBBcml0aEFkZC4gT3RoZXJ3aXNl
IHRoZSBhZGQgY291bGQgYmUgaW1wdXJlOgogICAgIC8vCiAgICAgLy8gICAgIHZhciBvID0gewpA
QCAtODIxLDYgKzgyMSw3IEBAIHB1YmxpYzoKICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9u
RGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRpb25EYXRhOwogICAgIEJhZzxDYWxsVmFyYXJnc0Rh
dGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAgIEJhZzxMb2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZh
cmFyZ3NEYXRhOworICAgIEJhZzxTdGFja0FjY2Vzc0RhdGE+IG1fc3RhY2tBY2Nlc3NEYXRhOwog
ICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURhdGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwog
ICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVu
ZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwogICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4MDU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc5LDggKzc5LDkgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgY2FzZSBQdXRCeU9mZnNldEhp
bnQ6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgotICAgIGNhc2UgUHV0TG9jYWw6Ci0gICAg
Y2FzZSBLaWxsTG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICBjYXNlIEtpbGxTdGFjazoK
KyAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0U2Nv
cGU6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDYgQEAgYm9vbCBOb2Rl
OjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3JhcGgmIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAg
ICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKLSAgICBjYXNlIFB1dExvY2Fs
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFs
c2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTgwNTgw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE5Nyw2ICsxOTcsMjUgQEAgc3RydWN0IExvYWRWYXJhcmdzRGF0YSB7CiAgICAgdW5zaWdu
ZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGxvYWQuIEluY2x1ZGVz
ICJ0aGlzIi4KIH07CiAKK3N0cnVjdCBTdGFja0FjY2Vzc0RhdGEgeworICAgIFN0YWNrQWNjZXNz
RGF0YSgpCisgICAgICAgIDogZm9ybWF0KERlYWRGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZv
cm1hdCkKKyAgICAgICAgOiBsb2NhbChsb2NhbCkKKyAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIFZpcnR1
YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7CisgICAgRmx1c2hGb3JtYXQgZm9ybWF0OworICAgIAor
ICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSB7IHJldHVybiBGbHVzaGVkQXQoZm9ybWF0LCBtYWNo
aW5lTG9jYWwpOyB9Cit9OworCiAvLyBUaGlzIHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVk
aWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBp
bW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBhbiBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEg
c3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmll
cikgZnJvbSBhIE5vZGUqLgpAQCAtNDg0LDYgKzUwMywxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29udmVydFRvR2V0
U3RhY2soU3RhY2tBY2Nlc3NEYXRhKiBkYXRhKQorICAgIHsKKyAgICAgICAgbV9vcCA9IEdldFN0
YWNrOworICAgICAgICBtX2ZsYWdzICY9IH5Ob2RlTXVzdEdlbmVyYXRlOworICAgICAgICBtX29w
SW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGRhdGEpOworICAgICAgICBtX29wSW5mbzIg
PSAwOworICAgICAgICBjaGlsZHJlbi5yZXNldCgpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNv
bnZlcnRUb0dldEJ5T2Zmc2V0KFN0b3JhZ2VBY2Nlc3NEYXRhJiBkYXRhLCBFZGdlIHN0b3JhZ2Up
CiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJ
ZEZsdXNoIHx8IG1fb3AgPT0gTXVsdGlHZXRCeU9mZnNldCk7CkBAIC03MTcsNyArNzQ1LDcgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKLSAgICAgICAgY2FzZSBL
aWxsTG9jYWw6CisgICAgICAgIGNhc2UgS2lsbFN0YWNrOgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03NDcs
NiArNzc1LDIzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIFZpcnR1YWxSZWdpc3Rl
cihtX29wSW5mbzIpOwogICAgIH0KICAgICAKKyAgICBib29sIGhhc1N0YWNrQWNjZXNzRGF0YSgp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBQdXRTdGFjazoK
KyAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIFN0YWNrQWNjZXNzRGF0YSogc3RhY2tBY2Nlc3NEYXRhKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNTdGFja0FjY2Vzc0RhdGEoKSk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8U3RhY2tBY2Nlc3NEYXRhKj4obV9vcEluZm8pOworICAgIH0KKyAgICAKICAgICBib29s
IGhhc1BoaSgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBVcHNpbG9uOwpAQCAtMTQy
OCw4ICsxNDczLDYgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgp
KSB7CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgICAgIGNhc2UgUHV0TG9jYWw6Ci0gICAg
ICAgIGNhc2UgS2lsbExvY2FsOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2Ug
Wm9tYmllSGludDoKICAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTgwNTgwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw4ICs1NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogYmV0
dGVyIG5hbWVzIGZvciBhIGxvdCBvZiB0aGVzZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzNzMwNyAqL1wKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpT
KSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKLSAgICBtYWNybyhQdXRMb2NhbCwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEtpbGxMb2NhbCwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIFwKKyAgICBtYWNybyhQdXRTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3Jv
KEtpbGxTdGFjaywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKEdldFN0YWNrLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCisgICAgXAogICAgIG1hY3JvKE1vdkhpbnQsIDApIFwKICAgICBtYWNy
byhab21iaWVIaW50LCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JBdmFpbGFiaWxpdHlBbmFs
eXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lvbiAxODA1ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMjEgKzEyOCwyMCBAQCB2b2lkIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kCiB2b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3Vs
YXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKLSAgICBjYXNlIFB1dExvY2FsOiB7Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgbV9hdmFpbGFiaWxp
dHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkuc2V0Rmx1c2godmFyaWFibGUt
PmZsdXNoZWRBdCgpKTsKKyAgICBjYXNlIFB1dFN0YWNrOiB7CisgICAgICAgIFN0YWNrQWNjZXNz
RGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOworICAgICAgICBtX2F2YWlsYWJp
bGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVzaChkYXRhLT5mbHVzaGVk
QXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBLaWxsTG9j
YWw6IHsKKyAgICBjYXNlIEtpbGxTdGFjazogewogICAgICAgICBtX2F2YWlsYWJpbGl0eS5tX2xv
Y2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1c2goRmx1c2hlZEF0KENv
bmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBHZXRM
b2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFy
aWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgIEF2YWlsYWJpbGl0eShub2RlLCB2
YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOworICAgIGNhc2UgR2V0U3RhY2s6IHsKKyAgICAgICAgU3Rh
Y2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7CisgICAgICAgIG1f
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwpID0gQXZhaWxhYmlsaXR5
KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU0MCw4ICs1NDAsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlSW1tZWRpYXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhpbnQ6CiAgICAgICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgICAgIGNhc2UgUHV0TG9jYWw6Ci0gICAg
ICAgIGNhc2UgS2lsbExvY2FsOiB7CisgICAgICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIGNh
c2UgS2lsbFN0YWNrOgorICAgICAgICBjYXNlIEdldFN0YWNrOiB7CiAgICAgICAgICAgICAvLyBU
aGlzIG5vZGUgc2hvdWxkIG5ldmVyIGJlIHZpc2libGUgYXQgdGhpcyBzdGFnZSBvZiBjb21waWxh
dGlvbi4gSXQgaXMKICAgICAgICAgICAgIC8vIGluc2VydGVkIGJ5IGZpeHVwKCksIHdoaWNoIGZv
bGxvd3MgdGhpcyBwaGFzZS4KICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExv
Y2FsU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmgiCi0KLSNpZiBFTkFCTEUoREZHX0pJVCkKLQotI2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5s
aW5lcy5oIgotI2luY2x1ZGUgIkRGR0dyYXBoLmgiCi0jaW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0
LmgiCi0jaW5jbHVkZSAiREZHUGhhc2UuaCIKLSNpbmNsdWRlICJERkdQcmVjaXNlTG9jYWxDbG9i
YmVyaXplLmgiCi0jaW5jbHVkZSAiREZHU1NBQ2FsY3VsYXRvci5oIgotI2luY2x1ZGUgIkRGR1Zh
bGlkYXRlLmgiCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotI2luY2x1ZGUgIk9wZXJhbmRzSW5s
aW5lcy5oIgotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7Ci0KLW5hbWVzcGFjZSB7
Ci0KLWJvb2wgdmVyYm9zZSA9IGZhbHNlOwotCi1jbGFzcyBWYXJpYWJsZURlZmVycmFsIHsKLXB1
YmxpYzoKLSAgICBWYXJpYWJsZURlZmVycmFsKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBudWxscHRyKQotICAgICAgICA6IG1fdmFyaWFibGUodmFyaWFibGUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBzdGF0aWMgVmFyaWFibGVEZWZlcnJhbCBjb25mbGljdCgpCi0gICAgewotICAg
ICAgICByZXR1cm4gVmFyaWFibGVEZWZlcnJhbChjb25mbGljdE1hcmtlcigpKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYWJsZTsgfQot
ICAgIAotICAgIGJvb2wgaGFzVmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmICFp
c0NvbmZsaWN0KCk7IH0KLSAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNWYXJpYWJsZSgpKTsKLSAgICAgICAgcmV0
dXJuIG1fdmFyaWFibGU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNDb25mbGljdCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YXJpYWJsZSA9PSBjb25mbGljdE1hcmtlcigpOwot
ICAgIH0KLSAgICAKLSAgICBWYXJpYWJsZURlZmVycmFsIG1lcmdlKFZhcmlhYmxlRGVmZXJyYWwg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIgfHwgIW90aGVy
KQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICBpZiAoISp0aGlzKQotICAgICAg
ICAgICAgcmV0dXJuIG90aGVyOwotICAgICAgICByZXR1cm4gY29uZmxpY3QoKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KFZhcmlhYmxlRGVmZXJyYWwgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV92YXJpYWJsZSA9PSBvdGhlci5tX3ZhcmlhYmxlOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmICghKnRoaXMpCi0gICAgICAgICAgICBvdXQucHJpbnQoIi0iKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXNDb25mbGljdCgpKQotICAgICAgICAgICAgb3V0LnByaW50KCJDb25mbGljdCIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX3Zhcmlh
YmxlKSk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCopIGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wKG91dCk7Ci0gICAg
fQotICAgIAotcHJpdmF0ZToKLSAgICBzdGF0aWMgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb25mbGlj
dE1hcmtlcigpCi0gICAgewotICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZhcmlhYmxlQWNj
ZXNzRGF0YSo+KHN0YXRpY19jYXN0PGludHB0cl90PigxKSk7Ci0gICAgfQotICAgIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogbV92YXJpYWJsZTsKLX07Ci0KLWNsYXNzIFB1dExvY2FsU2lua2lu
Z1BoYXNlIDogcHVibGljIFBoYXNlIHsKLXB1YmxpYzoKLSAgICBQdXRMb2NhbFNpbmtpbmdQaGFz
ZShHcmFwaCYgZ3JhcGgpCi0gICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRMb2NhbCBzaW5raW5n
IikKLSAgICB7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcnVuKCkKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBPbmUgb2YgdGhlIHByb2JsZW1zIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCB3
aWxsIGNyZWF0ZSBhIGR1cGxpY2F0ZSBQaGkgZ3JhcGgKLSAgICAgICAgLy8gZm9yIHN1bmtlbiBQ
dXRMb2NhbHMgaW4gdGhlIHByZXNlbmNlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wgZmxvdyBtZXJn
ZXMsIGFuZCB3aGVyZSB0aGUKLSAgICAgICAgLy8gdmFsdWUgYmVpbmcgUHV0TG9jYWwnZCBpcyBh
bHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29kZS4gV2UgY291bGQgd29yayBhcm91bmQg
dGhpcwotICAgICAgICAvLyBieSBkb2luZyB0aGUgc2lua2luZyBvdmVyIENQUywgb3IgbWF5YmUg
anVzdCBieSBkb2luZyByZWFsbHkgc21hcnQgaG9pc3RpbmcuIEl0J3MgYWxzbwotICAgICAgICAv
LyBwb3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhpIGdyYXBoIGNhbiBiZSBkZWR1cGxpY2F0
ZWQgYnkgTExWTS4gSXQgd291bGQgYmUgYmVzdCBpZiB3ZQotICAgICAgICAvLyBjb3VsZCBvYnNl
cnZlIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSBncmFwaCBpbiBwbGFjZSB0aGF0IGRvZXMg
d2hhdCB3ZSB3YW50LiBJbgotICAgICAgICAvLyBwcmluY2lwbGUgaWYgd2UgaGF2ZSBhIHJlcXVl
c3QgdG8gcGxhY2UgYSBQaGkgYXQgYSBwYXJ0aWN1bGFyIHBsYWNlLCB3ZSBjb3VsZCBqdXN0IGNo
ZWNrCi0gICAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgdGhhdCBkb2VzIHdoYXQg
d2Ugd2FudC4gQmVjYXVzZSBQdXRMb2NhbFNpbmtpbmdQaGFzZSBydW5zIGp1c3QKLSAgICAgICAg
Ly8gYWZ0ZXIgU1NBIGNvbnZlcnNpb24sIHdlIGhhdmUgYWxtb3N0IGEgZ3VhcmFudGVlIHRoYXQg
dGhlIFBoaSBncmFwaCB3ZSBwcm9kdWNlIGhlcmUgd291bGQKLSAgICAgICAgLy8gYmUgdHJpdmlh
bGx5IHJlZHVuZGFudCB0byB0aGUgb25lIHdlIGFscmVhZHkgaGF2ZS4KLSAgICAgICAgCi0gICAg
ICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUHV0
TG9jYWwgc2lua2luZzpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIFNTQUNhbGN1bGF0b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBo
KTsKLSAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX2dyYXBoKTsKLSAgICAgICAg
Ci0gICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgdmFyaW91cyBsb2NhbHMgYXJlIGxp
dmUuCi0gICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRIZWFkKG1fZ3JhcGgp
OwotICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29sPj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsK
LSAgICAgICAgCi0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nr
c0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGxpdmVBdEhlYWRbYmxvY2tdID0gT3Bl
cmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBi
bG9jay0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbGl2ZUF0
SGVhZFtibG9ja10uZmlsbChmYWxzZSk7Ci0gICAgICAgICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5m
aWxsKGZhbHNlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYm9vbCBjaGFuZ2VkOwot
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9j
a3MoKTsgYmxvY2tJbmRleC0tOykgewotICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIWJsb2Nr
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0gbGl2ZUF0VGFpbFtibG9ja107Ci0gICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2Rl
SW5kZXgtLTspIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChu
b2RlSW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwgbm9kZSwgIjogIiwgbGl2ZSwgIlxuIik7
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhh
bmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUg
YXQgIiwgbm9kZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQo
b3BlcmFuZCkgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhh
bmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBOb2RlKiBzb3VyY2UpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291
cmNlID09IG5vZGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBhIGxvYWQuIElnbm9yZSBpdC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFB1dExvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXZlLm9w
ZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobGl2
ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBsaXZl
OwotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlLnNpemUo
KTsgaS0tOykKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdmVBdFRhaWxbcHJlZGVjZXNzb3Jd
W2ldIHw9IGxpdmVbaV07Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgCi0gICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOwotICAgICAgICAKLSAgICAgICAgLy8g
QWxsIG9mIHRoZSBhcmd1bWVudHMgc2hvdWxkIGJlIGxpdmUgYXQgaGVhZCBvZiByb290LiBOb3Rl
IHRoYXQgd2UgbWF5IGZpbmQgdGhhdCBzb21lCi0gICAgICAgIC8vIGxvY2FscyBhcmUgbGl2ZSBh
dCBoZWFkIG9mIHJvb3QuIFRoaXMgc2VlbXMgd3JvbmcgYnV0IGlzbid0LiBUaGlzIHdpbGwgaGFw
cGVuIGZvciBleGFtcGxlCi0gICAgICAgIC8vIGlmIHRoZSBmdW5jdGlvbiBhY2Nlc3NlcyBjbG9z
dXJlIHZhcmlhYmxlICM0MiBmb3Igc29tZSBvdGhlciBmdW5jdGlvbiBhbmQgd2UgZWl0aGVyIGRv
bid0Ci0gICAgICAgIC8vIGhhdmUgdmFyaWFibGUgIzQyIGF0IGFsbCBvciB3ZSBoYXZlbid0IHNl
dCBpdCBhdCByb290LCBmb3Igd2hhdGV2ZXIgcmVhc29uLiBCYXNpY2FsbHkgdGhpcwotICAgICAg
ICAvLyBhcmlzZXMgc2luY2Ugb3VyIGFsaWFzaW5nIGZvciBjbG9zdXJlIHZhcmlhYmxlcyBpcyBj
b25zZXJ2YXRpdmVseSBiYXNlZCBvbiB2YXJpYWJsZSBudW1iZXIKLSAgICAgICAgLy8gYW5kIGln
bm9yZXMgdGhlIG93bmluZyBzeW1ib2wgdGFibGUuIFdlIHNob3VsZCBwcm9iYWJseSBmaXggdGhp
cyBldmVudHVhbGx5IGFuZCBtYWtlIG91cgotICAgICAgICAvLyBhbGlhc2luZyBtb3JlIHByZWNp
c2UuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEZvciBvdXIgcHVycG9zZXMgaGVyZSwgdGhlIGlt
cHJlY2lzaW9uIGluIHRoZSBhbGlhc2luZyBpcyBoYXJtbGVzcy4gSXQganVzdCBtZWFucyB0aGF0
IHdlCi0gICAgICAgIC8vIG1heSBub3QgZG8gYXMgbXVjaCBQaGkgcHJ1bmluZyBhcyB3ZSB3YW50
ZWQuCi0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkLmF0SW5kZXgoMCkubnVtYmVy
T2ZBcmd1bWVudHMoKTsgaS0tOykKLSAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVs
bHB0ciwgbGl2ZUF0SGVhZC5hdEluZGV4KDApLmFyZ3VtZW50KGkpKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE5leHQgaWRlbnRpZnkgd2hlcmUgd2Ugd291bGQgd2FudCB0byBzaW5rIFB1dExvY2Fs
cyB0by4gV2Ugc2F5IHRoYXQgdGhlcmUgaXMgYSBkZWZlcnJlZAotICAgICAgICAvLyBmbHVzaCBp
ZiB3ZSBoYWQgYSBQdXRMb2NhbCB3aXRoIGEgZ2l2ZW4gVmFyaWFibGVBY2Nlc3NEYXRhKiBidXQg
aXQgaGFzbid0IGJlZW4KLSAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4gRGVmZXJyYWxzIGhh
dmUgdGhlIGZvbGxvd2luZyBsYXR0aWNlOyBidXQgaXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUK
LSAgICAgICAgLy8gVE9QIHBhcnQgb2YgdGhlIGxhdHRpY2Ugc2VydmVzIGFuIGVudGlyZWx5IGRp
ZmZlcmVudCBwdXJwb3NlIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGxhdHRpY2U6Ci0gICAgICAgIC8v
IGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhIHJlZ2lvbiBvZiBjb2RlIHdoZXJlIG5vYm9k
eSBzaG91bGQgaGF2ZSBiZWVuIHJlbHlpbmcgb24gdGhlCi0gICAgICAgIC8vIHZhbHVlLiBUaGUg
cmVzdCBvZiB0aGUgbGF0dGljZSBtZWFucyB0aGF0IHdlIGVpdGhlciBoYXZlIGEgUHV0TG9jYWwg
dGhhdCBpcyBkZWZlcnJlZCAoaS5lLgotICAgICAgICAvLyBzdGlsbCBuZWVkcyB0byBiZSBleGVj
dXRlZCkgb3IgdGhlcmUgaXNuJ3Qgb25lIChiZWNhdXNlIHdlJ3ZlIGFscmFlZHkgZXhlY3V0ZWQg
aXQpLgotICAgICAgICAvLwotICAgICAgICAvLyBCb3R0b206Ci0gICAgICAgIC8vICAgICBJbnN0
YW50aWF0ZWQgYXMgVmFyaWFibGVEZWZlcnJhbCgpLiAKLSAgICAgICAgLy8gICAgIE1lYW5zIHRo
YXQgYWxsIHByZXZpb3VzIFB1dExvY2FscyBoYXZlIGJlZW4gZXhlY3V0ZWQgc28gdGhlcmUgaXMg
bm90aGluZyBkZWZlcnJlZC4KLSAgICAgICAgLy8gICAgIER1cmluZyBtZXJnaW5nIHRoaXMgaXMg
c3Vib3JkaW5hdGUgdG8gdGhlIG90aGVyIGtpbmRzIG9mIGRlZmVycmFscywgYmVjYXVzZSBpdAot
ICAgICAgICAvLyAgICAgcmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGFscmVhZHkgZXhl
Y3V0ZWQgYWxsIG5lY2Vzc2FyeSBQdXRMb2NhbHMuIFRoaXMgaW1wbGllcwotICAgICAgICAvLyAg
ICAgdGhhdCB0aGVyZSAqaGFkKiBiZWVuIHNvbWUgUHV0TG9jYWxzIHRoYXQgd2Ugc2hvdWxkIGhh
dmUgZXhlY3V0ZWQuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRvcDoKLSAgICAgICAgLy8gICAg
IEluc3RhbnRpYXRlZCBhcyBWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgpLgotICAgICAgICAv
LyAgICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHdlIGtub3csIHZpYSBmb3J3YXJkIGZsb3cs
IHRoYXQgdGhlcmUgaXNuJ3QgYW55IHZhbHVlIGluIHRoZQotICAgICAgICAvLyAgICAgZ2l2ZW4g
bG9jYWwgdGhhdCBhbnlvbmUgc2hvdWxkIGhhdmUgYmVlbiByZWx5aW5nIG9uLiBUaGlzIGNvbWVz
IGludG8gcGxheSBhdCB0aGUKLSAgICAgICAgLy8gICAgIHByb2xvZ3VlIChiZWNhdXNlIGluIFNT
QSBmb3JtIGF0IHRoZSBwcm9sb2d1ZSBubyBsb2NhbCBoYXMgYW55IHZhbHVlKSBvciB3aGVuIHdl
IG1lcmdlCi0gICAgICAgIC8vICAgICBkZWZlcnJhbHMgZm9yIGRpZmZlcmVudCBWYXJpYWJsZUFj
Y2Vzc0RhdGEqJ3MuIEEgVkFEIGVuY29tcGFzc2VzIGEgbGV4aWNhbCBzY29wZSBpbgotICAgICAg
ICAvLyAgICAgd2hpY2ggdGhlIGxvY2FsIGhhcyBzb21lIHNlbWFudGljIG1lYW5pbmc7IGlmIHdl
IGhhZCBzdG9yZXMgZnJvbSBkaWZmZXJlbnQgbGV4aWNhbAotICAgICAgICAvLyAgICAgc2NvcGVz
IHRoYXQgZ290IG1lcmdlZCB0b2dldGhlciB0aGVuIHdlIGtub3cgdGhhdCB3ZSdyZSBub3QgaW4g
ZWl0aGVyIHNjb3BlIGFueW1vcmUuCi0gICAgICAgIC8vICAgICBOb3RlIHRoYXQgdGhpcyBpcyBh
bGwgYXBwcm94aW1hdGUgYW5kIG9ubHkgcHJlY2lzZSBlbm91Z2ggdG8gbGF0ZXIgYW5zd2VyIHF1
ZXN0aW9ucwotICAgICAgICAvLyAgICAgcGVydGluZW50IHRvIHNpbmtpbmcuIEZvciBleGFtcGxl
LCB0aGlzIGRvZXNuJ3QgYWx3YXlzIGRldGVjdCB3aGVuIGEgbG9jYWwgaXMgbm8KLSAgICAgICAg
Ly8gICAgIGxvbmdlciBzZW1hbnRpY2FsbHkgcmVsZXZhbnQgLSB3ZSBtYXkgd2VsbCBoYXZlIGEg
ZGVmZXJyYWwgZnJvbSBpbnNpZGUgc29tZSBpbmxpbmVkCi0gICAgICAgIC8vICAgICBjYWxsIHN1
cnZpdmUgb3V0c2lkZSBvZiB0aGF0IGlubGluZWQgY29kZSwgYW5kIHRoaXMgaXMgZ2VuZXJhbGx5
IE9LLiBJbiB0aGUgd29yc3QgY2FzZQotICAgICAgICAvLyAgICAgaXQgbWVhbnMgdGhhdCB3ZSBt
aWdodCB0aGluayB0aGF0IGEgZGVmZXJyYWwgdGhhdCBpcyBhY3R1YWxseSBkZWFkIG11c3Qgc3Rp
bGwgYmUKLSAgICAgICAgLy8gICAgIGV4ZWN1dGVkLiBCdXQgd2UgdXN1YWxseSBjYXRjaCB0aGF0
IHdpdGggbGl2ZW5lc3MuIExpdmVuZXNzIGRvZXNuJ3QgYWx3YXlzIGNhdGNoIGl0Ci0gICAgICAg
IC8vICAgICBiZWNhdXNlIGxpdmVuZXNzIGlzIGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gICAgIFdoYXQgVG9wIGRvZXMgZ2l2ZSB1cyBpcyBkZXRlY3RzIHNpdHVhdGlvbnMg
d2hlcmUgd2UgYm90aCBkb24ndCBuZWVkIHRvIGNhcmUgYWJvdXQgYQotICAgICAgICAvLyAgICAg
ZGVmZXJyYWwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0IHdlIGNvdWxkIHJlYXNvbiBhYm91dCBp
dCBhbnl3YXkuIElmIHdlIG1lcmdlZAotICAgICAgICAvLyAgICAgZGVmZXJyYWxzIGZvciBkaWZm
ZXJlbnQgdmFyaWFibGVzIHRoZW4gd2Ugd291bGRuJ3Qga25vdyB0aGUgZm9ybWF0IHRvIHVzZS4g
U28sIHdlCi0gICAgICAgIC8vICAgICB1c2UgVG9wIGluIHRoYXQgY2FzZSBiZWNhdXNlIHRoYXQn
cyBhbHNvIGEgY2FzZSB3aGVyZSB3ZSBrbm93IHRoYXQgd2UgY2FuIGlnbm9yZSB0aGUKLSAgICAg
ICAgLy8gICAgIGRlZmVycmFsLgotICAgICAgICAvLwotICAgICAgICAvLyBEZWZlcnJhbCB3aXRo
IGEgY29uY3JldGUgVmFyaWFibGVBY2Nlc3NEYXRhKjoKLSAgICAgICAgLy8gICAgIEluc3RhbnRp
YXRlZCBhcyBWYXJpYWJsZURlZmVycmFsKHNvbWVWYXJpYWJsZUFjY2Vzc0RhdGEpCi0gICAgICAg
IC8vICAgICBSZXByZXNlbnRzIHRoZSBmYWN0IHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUgd291bGQg
aGF2ZSBkb25lIGEgUHV0TG9jYWwgYnV0IHdlIGhhdmVuJ3QKLSAgICAgICAgLy8gICAgIGlkZW50
aWZpZWQgYW4gb3BlcmF0aW9uIHRoYXQgd291bGQgaGF2ZSBvYnNlcnZlZCB0aGF0IFB1dExvY2Fs
LgotICAgICAgICAvLwotICAgICAgICAvLyBUaGlzIGNvZGUgaGFzIHNvbWUgaW50ZXJlc3Rpbmcg
cXVpcmtzIGJlY2F1c2Ugb2YgdGhlIGZhY3QgdGhhdCBuZWl0aGVyIGxpdmVuZXNzIG5vcgotICAg
ICAgICAvLyBkZWZlcnJhbHMgYXJlIHZlcnkgcHJlY2lzZS4gVGhleSBhcmUgb25seSBwcmVjaXNl
IGVub3VnaCB0byBiZSBhYmxlIHRvIGNvcnJlY3RseSB0ZWxsIHVzCi0gICAgICAgIC8vIHdoZW4g
d2UgbWF5IFtzaWNdIG5lZWQgdG8gZXhlY3V0ZSBQdXRMb2NhbHMuIFRoaXMgbWVhbnMgdGhhdCB0
aGV5IG1heSByZXBvcnQgdGhlIG5lZWQgdG8KLSAgICAgICAgLy8gZXhlY3V0ZSBhIFB1dExvY2Fs
IGluIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGRvbid0IHJlYWxseSBuZWVkIGl0LCBhbmQgdGhh
dCdzIHRvdGFsbHkgT0suCi0gICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJy
YWw+PiBkZWZlcnJlZEF0SGVhZChtX2dyYXBoKTsKLSAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8
VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRUYWlsKG1fZ3JhcGgpOwotICAgICAgICAKLSAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3Jk
ZXIoKSkgewotICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbYmxvY2tdID0KLSAgICAgICAgICAg
ICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgZGVmZXJyZWRBdFRhaWxbYmxvY2tdID0KLSAgICAg
ICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPihPcGVyYW5kc0xpa2UsIGJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkZWZlcnJl
ZEF0SGVhZC5hdEluZGV4KDApLmZpbGwoVmFyaWFibGVEZWZlcnJhbDo6Y29uZmxpY3QoKSk7Ci0g
ICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJs
ZURlZmVycmFsPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEtpbGxM
b2NhbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpID0gVmFyaWFibGVEZWZlcnJhbDo6Y29uZmxpY3QoKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAob3BlcmFuZC5pc0hlYWRlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbWF0ZXJpYWxpemUganVzdCBi
ZWZvcmUgYW55IHJlYWRzLgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgfTsK
LSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNlKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUgaXQuCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwobm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChkZWZlcnJlZCA9PSBk
ZWZlcnJlZEF0VGFpbFtibG9ja10pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRl
ZmVycmVkOwotICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gZGVmZXJy
ZWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0
dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvckluZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVy
RHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvciksICI6ICIsIGRlZmVycmVk
W2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAi
KTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtp
XSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29y
XVtpXS5tZXJnZShkZWZlcnJlZFtpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Ci0gICAgICAgIAotICAgICAgICAvLyBX
ZSB3aXNoIHRvIGluc2VydCBQdXRMb2NhbHMgYXQgYWxsIG9mIHRoZSBtYXRlcmlhbGl6YXRpb24g
cG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAotICAgICAgICAvLyBpbXBsaWNpdGx5IGFzIHRoZSBw
bGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERlYWQgd2hpbGUgaXQgd2FzIHByZXZpb3Vz
bHkgbm90IERlYWQuCi0gICAgICAgIC8vIFRvIGRvIHRoaXMsIHdlIG1heSBuZWVkIHRvIGJ1aWxk
IHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1ZmYgbGlrZSB0aGlzOgotICAgICAgICAv
LwotICAgICAgICAvLyBCZWZvcmU6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBpZiAocCkK
LSAgICAgICAgLy8gICAgICAgICBQdXRMb2NhbChyNDIsIEB4KQotICAgICAgICAvLyAgICAgZWxz
ZQotICAgICAgICAvLyAgICAgICAgIFB1dExvY2FsKHI0MiwgQHkpCi0gICAgICAgIC8vCi0gICAg
ICAgIC8vIEFmdGVyOgotICAgICAgICAvLwotICAgICAgICAvLyAgICAgaWYgKHApCi0gICAgICAg
IC8vICAgICAgICAgVXBzaWxvbihAeCwgXnopCi0gICAgICAgIC8vICAgICBlbHNlCi0gICAgICAg
IC8vICAgICAgICAgVXBzaWxvbihAeSwgXnopCi0gICAgICAgIC8vICAgICB6OiBQaGkoKQotICAg
ICAgICAvLyAgICAgUHV0TG9jYWwocjQyLCBAeikKLSAgICAgICAgLy8KLSAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGVhY2gg
bG9jYWwsIGFuZCBhIERlZiBpcyBhbnkKLSAgICAgICAgLy8gUHV0TG9jYWwgaW4gdGhlIG9yaWdp
bmFsIHByb2dyYW0uIFRoZSBvcmlnaW5hbCBQdXRMb2NhbHMgd2lsbCBzaW1wbHkgdmFuaXNoLgot
ICAgICAgICAKLSAgICAgICAgT3BlcmFuZHM8U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBvcGVy
YW5kVG9WYXJpYWJsZSgKLSAgICAgICAgICAgIE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygw
KS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgVmVjdG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5k
ZXhUb09wZXJhbmQ7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQub3BlcmFuZEZvcklu
ZGV4KGkpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdWYXJpYWJsZSgpOwotICAgICAgICAgICAg
b3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKSA9IHZhcmlhYmxlOwotICAgICAgICAg
ICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9PSB2YXJpYWJsZS0+aW5kZXgoKSk7Ci0g
ICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQob3BlcmFuZCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHB1dExvY2Fsc1RvU2luazsKLSAgICAgICAg
Ci0gICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKLSAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewotICAg
ICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2Ug
UHV0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIHB1dExvY2Fsc1RvU2luay5hZGQobm9kZSk7
Ci0gICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSwgYmxv
Y2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICAgICAgICAgIHNzYUNh
bGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFi
bGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSwgYmxvY2ssIG5vZGUpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIHNzYUNhbGN1bGF0b3IuY29tcHV0ZVBoaXMoCi0gICAgICAgICAgICBb
Jl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxvY2sp
IC0+IE5vZGUqIHsKLSAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGlu
ZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9IGRlZmVycmVkQXRI
ZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY291
bGQgaGF2ZSBhbiBpbnZhbGlkIGRlZmVycmFsIGJlY2F1c2UgbGl2ZW5lc3MgaXMgaW1wcmVjaXNl
LgotICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgUGhpIGZvciAi
LCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShT
cGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOwotICAgICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbnVsbHB0ciwgdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKTsKLSAg
ICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZURlZmVycmFsLnZhcmlh
YmxlKCktPmZsdXNoRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFn
cyhyZXN1bHRGb3IoZm9ybWF0KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7Ci0g
ICAgICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIE9wZXJhbmRzPE5vZGUqPiBtYXBwaW5n
KE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAg
ICAgT3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4gZGVmZXJyZWQ7Ci0gICAgICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAg
ICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5vcGVyYW5kRm9ySW5kZXgoaSkpOwotICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2
YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBzc2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVm
QXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFkZWYpCi0gICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRlZi0+dmFsdWUoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiOiAi
LCBtYXBwaW5nLCAiXG4iKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkg
ewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBwaGlEZWYtPnZh
bHVlKCksICJcbiIpOwotICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9
IHBoaURlZi0+dmFsdWUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUlu
ZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAg
ICAgICAgICBjYXNlIFB1dExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsK
LSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxl
RGVmZXJyYWwodmFyaWFibGUpOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0
byAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksICIgYXQgIiwgbm9kZSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIEtpbGxMb2NhbDogewotICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkg
PSBWYXJpYWJsZURlZmVycmFsKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OiB7
Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
SGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFy
aWFibGVEZWZlcnJhbCA9IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0TG9jYWwuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRMb2NhbCBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBub2Rl
LCAiXG4iKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBw
aW5nLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsIGluY29taW5nKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRMb2NhbCwgbm9kZS0+b3JpZ2lu
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJpYWJsZURlZmVycmFsLnZh
cmlhYmxlKCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoaW5jb21pbmcsIHVz
ZUtpbmRGb3IodmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgpKSkpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9w
ZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOwotICAgICAgICAgICAgICAgICAgICB9OwotICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNj
YXBlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVy
LCBOb2RlKikgeyB9KTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGEgR2V0TG9jYWwsIHRoZW4gd2UgYWxzbyBjcmVhdGUgYSBtYXBwaW5nLgot
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8ganVzdCBl
bGltaW5hdGUgc3VjaCBHZXRMb2NhbHMsIHdoZW4gd2Uga25vdwotICAgICAgICAgICAgICAgICAg
ICAvLyB3aGF0IHRoZWlyIGluY29taW5nIHZhbHVlIHdpbGwgYmUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2MjQKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0TG9jYWwpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
YXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBzaXplX3QgdXBzaWxvbkluc2VydGlvblBv
aW50ID0gYmxvY2stPnNpemUoKSAtIDE7Ci0gICAgICAgICAgICBOb2RlT3JpZ2luIHVwc2lsb25P
cmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47Ci0gICAgICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgewotICAgICAgICAgICAg
ICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNG
b3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKLSAgICAgICAgICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxl
LT5pbmRleCgpXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAi
IGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxv
Y2spLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVEZWZlcnJhbCB2YXJpYWJs
ZURlZmVycmFsID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nl
c3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG51bGxwdHIsIHZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwu
dmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1
c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOwotICAgICAgICAgICAgICAgICAgICBOb2RlKiBp
bmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbmNvbWluZykgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gdG90
YWxseSBoYXBwZW4sIHNlZSB0ZXN0cy9zdHJlc3MvcHV0LWxvY2FsLWNvbnNlcnZhdGl2ZS5qcy4K
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXJpc2VzIGJlY2F1c2UgZGVmZXJyYWwg
YW5kIGxpdmVuZXNzIGFyZSBib3RoIGNvbnNlcnZhdGl2ZS4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIENvbnNlcnZhdGl2ZSBsaXZlbmVzcyBtZWFucyB0aGF0IGEgbG9hZCBmcm9tIGEgKmRp
ZmZlcmVudCogY2xvc3VyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgbWF5
IGxlYWQgdXMgdG8gYmVsaWV2ZSB0aGF0IG91ciBsb2NhbCBpcyBsaXZlLiBDb25zZXJ2YXRpdmUK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVycmFsIG1heSBsZWFkIHVzIHRvIGJlbGll
dmUgdGhhdCB0aGUgbG9jYWwgZG9lc24ndCBoYXZlIGEgdG9wIGRlZmVycmFsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIHNvbWVvbmUgaGFzIGRvbmUgc29tZXRoaW5nIHRoYXQg
d291bGQgaGF2ZSBmb3JjZWQgaXQgdG8gYmUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1h
dGVyaWFsaXplZC4gVGhlIGJhc2ljIHBhdHRlcm4gaXM6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0Q2xvc3VyZVZhcihsb2M0MikgLy8g
bG9jNDIncyBkZWZlcnJhbCBpcyBub3cgYm90dG9tCi0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZiAocHJlZGljYXRlMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBQdXRDbG9z
dXJlVmFyKGxvYzQyKSAvLyBwcmV2ZW50IEdDU0Ugb2Ygb3VyIEdldENsb3N1cmVWYXIncwotICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHByZWRpY2F0ZTIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgUHV0TG9jYWwobG9jNDIpIC8vIHdlIG5vdyBoYXZlIGEgY29uY3JldGUg
ZGVmZXJyYWwKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8vIHdlIHN0aWxsIGhhdmUgdGhl
IGNvbmNyZXRlIGRlZmVycmFsIGJlY2F1c2Ugd2UgbWVyZ2VkIHdpdGggYm90dG9tCi0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHZXRDbG9zdXJlVmFyKGxvYzQyKSAvLyBmb3JjZSBtYXRlcmlh
bGl6YXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSB3aWxsIGhhdmUgYSBQaGkgd2l0aCBubyBpbmNvbWluZyB2YWx1ZSBmb3JtIHRo
ZSBiYXNpYyBibG9jayB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBieXBhc3NlZCB0
aGUgUHV0TG9jYWwuCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIE5vdGU6IHdlIHNvcnQgb2YgY291bGQgaGF2ZSB1c2VkIHRoZSBlcXVpdmFsZW50
IG9mIExMVk0ncyB1bmRlZiBoZXJlLiBUaGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBv
aW50IGlzIHRoYXQgaXQncyBPSyB0byBqdXN0IGxlYXZlIHJhbmRvbSBiaXRzIGluIHRoZSBsb2Nh
bCBpZiB3ZSdyZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29taW5nIGRvd24gdGhpcyBw
YXRoLiBCdXQsIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Ygc2F5aW5nIHRoYXQgaW4gb3VyIElSCi0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyByaWdodCBub3cgYW5kIGFueXdheSBpdCBwcm9iYWJs
eSBkb2Vzbid0IG1hdHRlciB0aGF0IG11Y2guCi0gICAgICAgICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJvdHRv
bUNvbnN0YW50Rm9yVXNlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgdXBzaWxvbk9yaWdpbiwgdXNlS2luZCkubm9kZSgpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNl
cnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCi0gICAgICAgICAg
ICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmQpKTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gRmluYWxseSBlbGltaW5hdGUgdGhlIHN1bmtlbiBQdXRMb2NhbHMgYnkgdHVybmlu
ZyB0aGVtIGludG8gUGhhbnRvbXMuIFRoaXMga2VlcHMgd2hhdGV2ZXIKLSAgICAgICAgLy8gdHlw
ZSBjaGVjayB0aGV5IHdlcmUgZG9pbmcuIEFsc28gcHJlcGVuZCBLaWxsTG9jYWxzIHRvIHRoZW0g
dG8gZW5zdXJlIHRoYXQgd2Uga25vdyB0aGF0Ci0gICAgICAgIC8vIHRoZSByZWxldmFudCB2YWx1
ZSB3YXMgKm5vdCogc3RvcmVkIHRvIHRoZSBzdGFjay4KLSAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgewotICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoIXB1dExvY2Fs
c1RvU2luay5jb250YWlucyhub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxMb2NhbCwgbm9k
ZS0+b3JpZ2luLCBPcEluZm8obm9kZS0+bG9jYWwoKS5vZmZzZXQoKSkpOwotICAgICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAgZGF0YUxvZygiR3Jh
cGggYWZ0ZXIgUHV0TG9jYWwgc2lua2luZzpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLX07
Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotICAgIAotYm9vbCBwZXJmb3JtUHV0TG9jYWxT
aW5raW5nKEdyYXBoJiBncmFwaCkKLXsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFB1dExvY2FsIFNpbmtpbmcgUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8UHV0
TG9jYWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKLX0KLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwotCi0jZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmgJKHJldmlzaW9uIDE4
MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw0NiArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIERGR1B1dExvY2FsU2lua2luZ1Bo
YXNlX2gKLSNkZWZpbmUgREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAotCi0jaWYgRU5BQkxFKERG
R19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQotY2xhc3MgR3JhcGg7
Ci0KLS8vIFNpbmtzIFB1dExvY2FscyB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IHBvaW50IHdoZXJl
IHRoZXkgY2FuIHBvc3NpYmx5IGhhcHBlbiwgd2hpY2ggaXMgdXN1YWxseQotLy8gc2lkZS1lZmZl
Y3RzIHRoYXQgbWF5IG9ic2VydmUgdGhlbS4gVGhpcyBlbGltaW5hdGVzIFB1dExvY2FscyBpZiBp
dCBzaW5rcyB0aGVtIHBhc3QgdGhlIHBvaW50IG9mCi0vLyB0aGVpciBkZWF0aHMuCi0KLWJvb2wg
cGVyZm9ybVB1dExvY2FsU2lua2luZyhHcmFwaCYpOwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQotI2VuZGlmIC8vIERGR1B1dExvY2Fs
U2lua2luZ1BoYXNlX2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRT
dGFja1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDU4MCkJKGZyb20g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHA6MTgw
NTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1B1dExvY2FsU2lua2luZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jsb2NrTWFwSW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisj
aW5jbHVkZSAiREZHSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNs
dWRlICJERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHU1NBQ2FsY3Vs
YXRvci5oIgorI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgorI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitjbGFz
cyBWYXJpYWJsZURlZmVycmFsIHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZURlZmVycmFsKFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBudWxscHRyKQorICAgICAgICA6IG1fdmFyaWFibGUo
dmFyaWFibGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgVmFyaWFibGVEZWZlcnJh
bCBjb25mbGljdCgpCisgICAgeworICAgICAgICByZXR1cm4gVmFyaWFibGVEZWZlcnJhbChjb25m
bGljdE1hcmtlcigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhbV92YXJpYWJsZTsgfQorICAgIAorICAgIGJvb2wgaGFzVmFyaWFibGUoKSBjb25z
dCB7IHJldHVybiAhISp0aGlzICYmICFpc0NvbmZsaWN0KCk7IH0KKyAgICAKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNW
YXJpYWJsZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fdmFyaWFibGU7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNDb25mbGljdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJpYWJs
ZSA9PSBjb25mbGljdE1hcmtlcigpOworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZURlZmVycmFs
IG1lcmdlKFZhcmlhYmxlRGVmZXJyYWwgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
KnRoaXMgPT0gb3RoZXIgfHwgIW90aGVyKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICBpZiAoISp0aGlzKQorICAgICAgICAgICAgcmV0dXJuIG90aGVyOworICAgICAgICByZXR1
cm4gY29uZmxpY3QoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KFZhcmlhYmxl
RGVmZXJyYWwgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YXJpYWJsZSA9
PSBvdGhlci5tX3ZhcmlhYmxlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICBv
dXQucHJpbnQoIi0iKTsKKyAgICAgICAgZWxzZSBpZiAoaXNDb25mbGljdCgpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCJDb25mbGljdCIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihtX3ZhcmlhYmxlKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVt
cEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCopIGNvbnN0CisgICAgewor
ICAgICAgICBkdW1wKG91dCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgVmFy
aWFibGVBY2Nlc3NEYXRhKiBjb25mbGljdE1hcmtlcigpCisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KHN0YXRpY19jYXN0PGludHB0cl90Pigx
KSk7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogbV92YXJpYWJsZTsKK307
CisKK2NsYXNzIFB1dExvY2FsU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoK
KyAgICBQdXRMb2NhbFNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2Uo
Z3JhcGgsICJQdXRMb2NhbCBzaW5raW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wg
cnVuKCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlIHByb2JsZW1zIG9mIHRo
aXMgYXBwcm9hY2ggaXMgdGhhdCBpdCB3aWxsIGNyZWF0ZSBhIGR1cGxpY2F0ZSBQaGkgZ3JhcGgK
KyAgICAgICAgLy8gZm9yIHN1bmtlbiBQdXRMb2NhbHMgaW4gdGhlIHByZXNlbmNlIG9mIGludGVy
ZXN0aW5nIGNvbnRyb2wgZmxvdyBtZXJnZXMsIGFuZCB3aGVyZSB0aGUKKyAgICAgICAgLy8gdmFs
dWUgYmVpbmcgUHV0TG9jYWwnZCBpcyBhbHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29k
ZS4gV2UgY291bGQgd29yayBhcm91bmQgdGhpcworICAgICAgICAvLyBieSBkb2luZyB0aGUgc2lu
a2luZyBvdmVyIENQUywgb3IgbWF5YmUganVzdCBieSBkb2luZyByZWFsbHkgc21hcnQgaG9pc3Rp
bmcuIEl0J3MgYWxzbworICAgICAgICAvLyBwb3NzaWJsZSB0aGF0IHRoZSBkdXBsaWNhdGUgUGhp
IGdyYXBoIGNhbiBiZSBkZWR1cGxpY2F0ZWQgYnkgTExWTS4gSXQgd291bGQgYmUgYmVzdCBpZiB3
ZQorICAgICAgICAvLyBjb3VsZCBvYnNlcnZlIHRoYXQgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSBn
cmFwaCBpbiBwbGFjZSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBJbgorICAgICAgICAvLyBwcmlu
Y2lwbGUgaWYgd2UgaGF2ZSBhIHJlcXVlc3QgdG8gcGxhY2UgYSBQaGkgYXQgYSBwYXJ0aWN1bGFy
IHBsYWNlLCB3ZSBjb3VsZCBqdXN0IGNoZWNrCisgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFscmVh
ZHkgYSBQaGkgdGhhdCBkb2VzIHdoYXQgd2Ugd2FudC4gQmVjYXVzZSBQdXRMb2NhbFNpbmtpbmdQ
aGFzZSBydW5zIGp1c3QKKyAgICAgICAgLy8gYWZ0ZXIgU1NBIGNvbnZlcnNpb24sIHdlIGhhdmUg
YWxtb3N0IGEgZ3VhcmFudGVlIHRoYXQgdGhlIFBoaSBncmFwaCB3ZSBwcm9kdWNlIGhlcmUgd291
bGQKKyAgICAgICAgLy8gYmUgdHJpdmlhbGx5IHJlZHVuZGFudCB0byB0aGUgb25lIHdlIGFscmVh
ZHkgaGF2ZS4KKyAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAgICBk
YXRhTG9nKCJHcmFwaCBiZWZvcmUgUHV0TG9jYWwgc2lua2luZzpcbiIpOworICAgICAgICAgICAg
bV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFNTQUNhbGN1bGF0
b3Igc3NhQ2FsY3VsYXRvcihtX2dyYXBoKTsKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hl
cmUgdmFyaW91cyBsb2NhbHMgYXJlIGxpdmUuCisgICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJv
b2w+PiBsaXZlQXRIZWFkKG1fZ3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxib29s
Pj4gbGl2ZUF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAg
IGxpdmVBdEhlYWRbYmxvY2tdID0gT3BlcmFuZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdID0gT3BlcmFu
ZHM8Ym9vbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10uZmlsbChmYWxzZSk7CisgICAgICAg
ICAgICBsaXZlQXRUYWlsW2Jsb2NrXS5maWxsKGZhbHNlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBjaGFuZ2VkOworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2Vk
ID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxib29sPiBsaXZlID0g
bGl2ZUF0VGFpbFtibG9ja107CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkxpdmUgYXQgIiwg
bm9kZSwgIjogIiwgbGl2ZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
ICAiLCBvcGVyYW5kLCAiIGlzIGxpdmUgYXQgIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICB9OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgcHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUs
IGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBb
Jl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFB1dExvY2FsKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAobGl2ZSA9PSBsaXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bGl2ZUF0SGVhZFtibG9ja10gPSBsaXZlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJl
ZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBsaXZlLnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpdmVBdFRhaWxbcHJlZGVjZXNzb3JdW2ldIHw9IGxpdmVbaV07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQp
OworICAgICAgICAKKyAgICAgICAgLy8gQWxsIG9mIHRoZSBhcmd1bWVudHMgc2hvdWxkIGJlIGxp
dmUgYXQgaGVhZCBvZiByb290LiBOb3RlIHRoYXQgd2UgbWF5IGZpbmQgdGhhdCBzb21lCisgICAg
ICAgIC8vIGxvY2FscyBhcmUgbGl2ZSBhdCBoZWFkIG9mIHJvb3QuIFRoaXMgc2VlbXMgd3Jvbmcg
YnV0IGlzbid0LiBUaGlzIHdpbGwgaGFwcGVuIGZvciBleGFtcGxlCisgICAgICAgIC8vIGlmIHRo
ZSBmdW5jdGlvbiBhY2Nlc3NlcyBjbG9zdXJlIHZhcmlhYmxlICM0MiBmb3Igc29tZSBvdGhlciBm
dW5jdGlvbiBhbmQgd2UgZWl0aGVyIGRvbid0CisgICAgICAgIC8vIGhhdmUgdmFyaWFibGUgIzQy
IGF0IGFsbCBvciB3ZSBoYXZlbid0IHNldCBpdCBhdCByb290LCBmb3Igd2hhdGV2ZXIgcmVhc29u
LiBCYXNpY2FsbHkgdGhpcworICAgICAgICAvLyBhcmlzZXMgc2luY2Ugb3VyIGFsaWFzaW5nIGZv
ciBjbG9zdXJlIHZhcmlhYmxlcyBpcyBjb25zZXJ2YXRpdmVseSBiYXNlZCBvbiB2YXJpYWJsZSBu
dW1iZXIKKyAgICAgICAgLy8gYW5kIGlnbm9yZXMgdGhlIG93bmluZyBzeW1ib2wgdGFibGUuIFdl
IHNob3VsZCBwcm9iYWJseSBmaXggdGhpcyBldmVudHVhbGx5IGFuZCBtYWtlIG91cgorICAgICAg
ICAvLyBhbGlhc2luZyBtb3JlIHByZWNpc2UuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBv
dXIgcHVycG9zZXMgaGVyZSwgdGhlIGltcHJlY2lzaW9uIGluIHRoZSBhbGlhc2luZyBpcyBoYXJt
bGVzcy4gSXQganVzdCBtZWFucyB0aGF0IHdlCisgICAgICAgIC8vIG1heSBub3QgZG8gYXMgbXVj
aCBQaGkgcHJ1bmluZyBhcyB3ZSB3YW50ZWQuCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsaXZl
QXRIZWFkLmF0SW5kZXgoMCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKKyAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVhZC5hdEluZGV4KDApLmFyZ3Vt
ZW50KGkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5leHQgaWRlbnRpZnkgd2hlcmUgd2Ugd291
bGQgd2FudCB0byBzaW5rIFB1dExvY2FscyB0by4gV2Ugc2F5IHRoYXQgdGhlcmUgaXMgYSBkZWZl
cnJlZAorICAgICAgICAvLyBmbHVzaCBpZiB3ZSBoYWQgYSBQdXRMb2NhbCB3aXRoIGEgZ2l2ZW4g
VmFyaWFibGVBY2Nlc3NEYXRhKiBidXQgaXQgaGFzbid0IGJlZW4KKyAgICAgICAgLy8gbWF0ZXJp
YWxpemVkIHlldC4gRGVmZXJyYWxzIGhhdmUgdGhlIGZvbGxvd2luZyBsYXR0aWNlOyBidXQgaXQn
cyB3b3J0aCBub3RpbmcgdGhhdCB0aGUKKyAgICAgICAgLy8gVE9QIHBhcnQgb2YgdGhlIGxhdHRp
Y2Ugc2VydmVzIGFuIGVudGlyZWx5IGRpZmZlcmVudCBwdXJwb3NlIHRoYW4gdGhlIHJlc3Qgb2Yg
dGhlIGxhdHRpY2U6CisgICAgICAgIC8vIGl0IGp1c3QgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhIHJl
Z2lvbiBvZiBjb2RlIHdoZXJlIG5vYm9keSBzaG91bGQgaGF2ZSBiZWVuIHJlbHlpbmcgb24gdGhl
CisgICAgICAgIC8vIHZhbHVlLiBUaGUgcmVzdCBvZiB0aGUgbGF0dGljZSBtZWFucyB0aGF0IHdl
IGVpdGhlciBoYXZlIGEgUHV0TG9jYWwgdGhhdCBpcyBkZWZlcnJlZCAoaS5lLgorICAgICAgICAv
LyBzdGlsbCBuZWVkcyB0byBiZSBleGVjdXRlZCkgb3IgdGhlcmUgaXNuJ3Qgb25lIChiZWNhdXNl
IHdlJ3ZlIGFscmFlZHkgZXhlY3V0ZWQgaXQpLgorICAgICAgICAvLworICAgICAgICAvLyBCb3R0
b206CisgICAgICAgIC8vICAgICBJbnN0YW50aWF0ZWQgYXMgVmFyaWFibGVEZWZlcnJhbCgpLiAK
KyAgICAgICAgLy8gICAgIE1lYW5zIHRoYXQgYWxsIHByZXZpb3VzIFB1dExvY2FscyBoYXZlIGJl
ZW4gZXhlY3V0ZWQgc28gdGhlcmUgaXMgbm90aGluZyBkZWZlcnJlZC4KKyAgICAgICAgLy8gICAg
IER1cmluZyBtZXJnaW5nIHRoaXMgaXMgc3Vib3JkaW5hdGUgdG8gdGhlIG90aGVyIGtpbmRzIG9m
IGRlZmVycmFscywgYmVjYXVzZSBpdAorICAgICAgICAvLyAgICAgcmVwcmVzZW50cyB0aGUgZmFj
dCB0aGF0IHdlJ3ZlIGFscmVhZHkgZXhlY3V0ZWQgYWxsIG5lY2Vzc2FyeSBQdXRMb2NhbHMuIFRo
aXMgaW1wbGllcworICAgICAgICAvLyAgICAgdGhhdCB0aGVyZSAqaGFkKiBiZWVuIHNvbWUgUHV0
TG9jYWxzIHRoYXQgd2Ugc2hvdWxkIGhhdmUgZXhlY3V0ZWQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFRvcDoKKyAgICAgICAgLy8gICAgIEluc3RhbnRpYXRlZCBhcyBWYXJpYWJsZURlZmVycmFs
Ojpjb25mbGljdCgpLgorICAgICAgICAvLyAgICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHdl
IGtub3csIHZpYSBmb3J3YXJkIGZsb3csIHRoYXQgdGhlcmUgaXNuJ3QgYW55IHZhbHVlIGluIHRo
ZQorICAgICAgICAvLyAgICAgZ2l2ZW4gbG9jYWwgdGhhdCBhbnlvbmUgc2hvdWxkIGhhdmUgYmVl
biByZWx5aW5nIG9uLiBUaGlzIGNvbWVzIGludG8gcGxheSBhdCB0aGUKKyAgICAgICAgLy8gICAg
IHByb2xvZ3VlIChiZWNhdXNlIGluIFNTQSBmb3JtIGF0IHRoZSBwcm9sb2d1ZSBubyBsb2NhbCBo
YXMgYW55IHZhbHVlKSBvciB3aGVuIHdlIG1lcmdlCisgICAgICAgIC8vICAgICBkZWZlcnJhbHMg
Zm9yIGRpZmZlcmVudCBWYXJpYWJsZUFjY2Vzc0RhdGEqJ3MuIEEgVkFEIGVuY29tcGFzc2VzIGEg
bGV4aWNhbCBzY29wZSBpbgorICAgICAgICAvLyAgICAgd2hpY2ggdGhlIGxvY2FsIGhhcyBzb21l
IHNlbWFudGljIG1lYW5pbmc7IGlmIHdlIGhhZCBzdG9yZXMgZnJvbSBkaWZmZXJlbnQgbGV4aWNh
bAorICAgICAgICAvLyAgICAgc2NvcGVzIHRoYXQgZ290IG1lcmdlZCB0b2dldGhlciB0aGVuIHdl
IGtub3cgdGhhdCB3ZSdyZSBub3QgaW4gZWl0aGVyIHNjb3BlIGFueW1vcmUuCisgICAgICAgIC8v
ICAgICBOb3RlIHRoYXQgdGhpcyBpcyBhbGwgYXBwcm94aW1hdGUgYW5kIG9ubHkgcHJlY2lzZSBl
bm91Z2ggdG8gbGF0ZXIgYW5zd2VyIHF1ZXN0aW9ucworICAgICAgICAvLyAgICAgcGVydGluZW50
IHRvIHNpbmtpbmcuIEZvciBleGFtcGxlLCB0aGlzIGRvZXNuJ3QgYWx3YXlzIGRldGVjdCB3aGVu
IGEgbG9jYWwgaXMgbm8KKyAgICAgICAgLy8gICAgIGxvbmdlciBzZW1hbnRpY2FsbHkgcmVsZXZh
bnQgLSB3ZSBtYXkgd2VsbCBoYXZlIGEgZGVmZXJyYWwgZnJvbSBpbnNpZGUgc29tZSBpbmxpbmVk
CisgICAgICAgIC8vICAgICBjYWxsIHN1cnZpdmUgb3V0c2lkZSBvZiB0aGF0IGlubGluZWQgY29k
ZSwgYW5kIHRoaXMgaXMgZ2VuZXJhbGx5IE9LLiBJbiB0aGUgd29yc3QgY2FzZQorICAgICAgICAv
LyAgICAgaXQgbWVhbnMgdGhhdCB3ZSBtaWdodCB0aGluayB0aGF0IGEgZGVmZXJyYWwgdGhhdCBp
cyBhY3R1YWxseSBkZWFkIG11c3Qgc3RpbGwgYmUKKyAgICAgICAgLy8gICAgIGV4ZWN1dGVkLiBC
dXQgd2UgdXN1YWxseSBjYXRjaCB0aGF0IHdpdGggbGl2ZW5lc3MuIExpdmVuZXNzIGRvZXNuJ3Qg
YWx3YXlzIGNhdGNoIGl0CisgICAgICAgIC8vICAgICBiZWNhdXNlIGxpdmVuZXNzIGlzIGNvbnNl
cnZhdGl2ZS4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIFdoYXQgVG9wIGRvZXMgZ2l2ZSB1
cyBpcyBkZXRlY3RzIHNpdHVhdGlvbnMgd2hlcmUgd2UgYm90aCBkb24ndCBuZWVkIHRvIGNhcmUg
YWJvdXQgYQorICAgICAgICAvLyAgICAgZGVmZXJyYWwgYW5kIHRoZXJlIGlzIG5vIHdheSB0aGF0
IHdlIGNvdWxkIHJlYXNvbiBhYm91dCBpdCBhbnl3YXkuIElmIHdlIG1lcmdlZAorICAgICAgICAv
LyAgICAgZGVmZXJyYWxzIGZvciBkaWZmZXJlbnQgdmFyaWFibGVzIHRoZW4gd2Ugd291bGRuJ3Qg
a25vdyB0aGUgZm9ybWF0IHRvIHVzZS4gU28sIHdlCisgICAgICAgIC8vICAgICB1c2UgVG9wIGlu
IHRoYXQgY2FzZSBiZWNhdXNlIHRoYXQncyBhbHNvIGEgY2FzZSB3aGVyZSB3ZSBrbm93IHRoYXQg
d2UgY2FuIGlnbm9yZSB0aGUKKyAgICAgICAgLy8gICAgIGRlZmVycmFsLgorICAgICAgICAvLwor
ICAgICAgICAvLyBEZWZlcnJhbCB3aXRoIGEgY29uY3JldGUgVmFyaWFibGVBY2Nlc3NEYXRhKjoK
KyAgICAgICAgLy8gICAgIEluc3RhbnRpYXRlZCBhcyBWYXJpYWJsZURlZmVycmFsKHNvbWVWYXJp
YWJsZUFjY2Vzc0RhdGEpCisgICAgICAgIC8vICAgICBSZXByZXNlbnRzIHRoZSBmYWN0IHRoYXQg
dGhlIG9yaWdpbmFsIGNvZGUgd291bGQgaGF2ZSBkb25lIGEgUHV0TG9jYWwgYnV0IHdlIGhhdmVu
J3QKKyAgICAgICAgLy8gICAgIGlkZW50aWZpZWQgYW4gb3BlcmF0aW9uIHRoYXQgd291bGQgaGF2
ZSBvYnNlcnZlZCB0aGF0IFB1dExvY2FsLgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGNv
ZGUgaGFzIHNvbWUgaW50ZXJlc3RpbmcgcXVpcmtzIGJlY2F1c2Ugb2YgdGhlIGZhY3QgdGhhdCBu
ZWl0aGVyIGxpdmVuZXNzIG5vcgorICAgICAgICAvLyBkZWZlcnJhbHMgYXJlIHZlcnkgcHJlY2lz
ZS4gVGhleSBhcmUgb25seSBwcmVjaXNlIGVub3VnaCB0byBiZSBhYmxlIHRvIGNvcnJlY3RseSB0
ZWxsIHVzCisgICAgICAgIC8vIHdoZW4gd2UgbWF5IFtzaWNdIG5lZWQgdG8gZXhlY3V0ZSBQdXRM
b2NhbHMuIFRoaXMgbWVhbnMgdGhhdCB0aGV5IG1heSByZXBvcnQgdGhlIG5lZWQgdG8KKyAgICAg
ICAgLy8gZXhlY3V0ZSBhIFB1dExvY2FsIGluIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGRvbid0
IHJlYWxseSBuZWVkIGl0LCBhbmQgdGhhdCdzIHRvdGFsbHkgT0suCisgICAgICAgIEJsb2NrTWFw
PE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+PiBkZWZlcnJlZEF0SGVhZChtX2dyYXBoKTsKKyAg
ICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRUYWls
KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgZGVmZXJyZWRBdEhl
YWRbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPihP
cGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgZGVmZXJy
ZWRBdFRhaWxbYmxvY2tdID0KKyAgICAgICAgICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVy
cmFsPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBkZWZlcnJlZEF0SGVhZC5hdEluZGV4KDApLmZpbGwoVmFyaWFibGVE
ZWZlcnJhbDo6Y29uZmxpY3QoKSk7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRI
ZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKE5vZGUq
IG5vZGUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRl
ZmVycmVkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlLT5vcCgpID09IEtpbGxMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gVmFyaWFibGVEZWZlcnJh
bDo6Y29uZmxpY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBhdXRvIGVzY2FwZUhhbmRsZXIgPSBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5pc0hlYWRlcigpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZvcmUgYW55IHJlYWRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgTm9kZSogc291cmNl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBub2RlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBsb2FkLiBJZ25vcmUg
aXQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZhcmlhYmxl
RGVmZXJyYWwobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChkZWZlcnJlZCA9PSBkZWZlcnJlZEF0VGFpbFtibG9ja10pCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmVycmVkQXRUYWlsW2Jsb2NrXSA9IGRlZmVycmVkOworICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpID0gZGVmZXJyZWQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKCJDb25zaWRlcmluZyAiLCBWaXJ0dWFsUmVnaXN0ZXIoZGVmZXJyZWQub3BlcmFuZEZvcklu
ZGV4KGkpKSwgIiBhdCAiLCBwb2ludGVyRHVtcChibG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1
Y2Nlc3NvciksICI6ICIsIGRlZmVycmVkW2ldLCAiIGFuZCAiLCBkZWZlcnJlZEF0SGVhZFtzdWNj
ZXNzb3JdW2ldLCAiIG1lcmdlcyB0byAiKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZGVm
ZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXS5tZXJnZShkZWZlcnJlZFtpXSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vz
c29yXVtpXSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7
CisgICAgICAgIAorICAgICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBQdXRMb2NhbHMgYXQgYWxs
IG9mIHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAgICAg
ICAvLyBpbXBsaWNpdGx5IGFzIHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERl
YWQgd2hpbGUgaXQgd2FzIHByZXZpb3VzbHkgbm90IERlYWQuCisgICAgICAgIC8vIFRvIGRvIHRo
aXMsIHdlIG1heSBuZWVkIHRvIGJ1aWxkIHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1
ZmYgbGlrZSB0aGlzOgorICAgICAgICAvLworICAgICAgICAvLyBCZWZvcmU6CisgICAgICAgIC8v
CisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8gICAgICAgICBQdXRMb2NhbChyNDIs
IEB4KQorICAgICAgICAvLyAgICAgZWxzZQorICAgICAgICAvLyAgICAgICAgIFB1dExvY2FsKHI0
MiwgQHkpCisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyOgorICAgICAgICAvLworICAgICAg
ICAvLyAgICAgaWYgKHApCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeCwgXnopCisgICAg
ICAgIC8vICAgICBlbHNlCisgICAgICAgIC8vICAgICAgICAgVXBzaWxvbihAeSwgXnopCisgICAg
ICAgIC8vICAgICB6OiBQaGkoKQorICAgICAgICAvLyAgICAgUHV0TG9jYWwocjQyLCBAeikKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgYW4gU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUgZm9yIGVhY2ggbG9jYWwsIGFuZCBhIERlZiBpcyBhbnkKKyAgICAgICAg
Ly8gUHV0TG9jYWwgaW4gdGhlIG9yaWdpbmFsIHByb2dyYW0uIFRoZSBvcmlnaW5hbCBQdXRMb2Nh
bHMgd2lsbCBzaW1wbHkgdmFuaXNoLgorICAgICAgICAKKyAgICAgICAgT3BlcmFuZHM8U1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqPiBvcGVyYW5kVG9WYXJpYWJsZSgKKyAgICAgICAgICAgIE9wZXJh
bmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgVmVj
dG9yPFZpcnR1YWxSZWdpc3Rlcj4gaW5kZXhUb09wZXJhbmQ7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtX2dyYXBoLmJsb2NrKDApLT52YXJp
YWJsZXNBdEhlYWQub3BlcmFuZEZvckluZGV4KGkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3NhQ2FsY3VsYXRvci5uZXdW
YXJpYWJsZSgpOworICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5k
KSA9IHZhcmlhYmxlOworICAgICAgICAgICAgQVNTRVJUKGluZGV4VG9PcGVyYW5kLnNpemUoKSA9
PSB2YXJpYWJsZS0+aW5kZXgoKSk7CisgICAgICAgICAgICBpbmRleFRvT3BlcmFuZC5hcHBlbmQo
b3BlcmFuZCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHB1
dExvY2Fsc1RvU2luazsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgUHV0TG9jYWw6CisgICAgICAgICAgICAgICAgICAgIHB1
dExvY2Fsc1RvU2luay5hZGQobm9kZSk7CisgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0
b3IubmV3RGVmKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3Bl
cmFuZChub2RlLT5sb2NhbCgpKSwgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgR2V0TG9jYWw6Cisg
ICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3RGVmKAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSwgYmxvY2ss
IG5vZGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNzYUNhbGN1bGF0b3IuY29t
cHV0ZVBoaXMoCisgICAgICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IE5vZGUqIHsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoIWxpdmVBdEhlYWRbYmxvY2td
Lm9wZXJhbmQob3BlcmFuZCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFi
bGVEZWZlcnJhbCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOworCisg
ICAgICAgICAgICAgICAgLy8gV2UgY291bGQgaGF2ZSBhbiBpbnZhbGlkIGRlZmVycmFsIGJlY2F1
c2UgbGl2ZW5lc3MgaXMgaW1wcmVjaXNlLgorICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVE
ZWZlcnJhbC5oYXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJs
b2NrKSwgIlxuIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgTm9kZSogcGhp
Tm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRvcCwgUGhpLCBOb2RlT3JpZ2luKCkpOwor
ICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgdmFyaWFibGVEZWZl
cnJhbC5oYXNWYXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQg
PSB2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9ybWF0KCk7CisgICAgICAgICAg
ICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhyZXN1bHRGb3IoZm9ybWF0KSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBoaU5vZGU7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAg
IE9wZXJhbmRzPE5vZGUqPiBtYXBwaW5nKE9wZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4gZGVm
ZXJyZWQ7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG1hcHBpbmcuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQobWFwcGluZy5v
cGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJh
bmQob3BlcmFuZCk7CisgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6RGVmKiBkZWYgPSBz
c2FDYWxjdWxhdG9yLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFkZWYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IGRl
Zi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiTWFwcGluZyBhdCB0b3Agb2YgIiwg
cG9pbnRlckR1bXAoYmxvY2spLCAiOiAiLCBtYXBwaW5nLCAiXG4iKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0
b3IucGhpc0ZvckJsb2NrKGJsb2NrKSkgeworICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbcGhpRGVmLT52YXJpYWJsZSgpLT5pbmRleCgpXTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KDAs
IHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgIE1hcHBpbmcgIiwgb3Bl
cmFuZCwgIiB0byAiLCBwaGlEZWYtPnZhbHVlKCksICJcbiIpOworICAgICAgICAgICAgICAgIG1h
cHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9j
a107CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRl
ZmVycmVkLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFB1dExvY2FsOiB7CisgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3Bl
cmFuZChvcGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwodmFyaWFibGUpOworICAgICAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAg
IE1hcHBpbmcgIiwgb3BlcmFuZCwgIiB0byAiLCBub2RlLT5jaGlsZDEoKS5ub2RlKCksICIgYXQg
Iiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVy
YW5kKSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIEtpbGxMb2NhbDogeworICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBWYXJpYWJsZURlZmVycmFsKCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9IGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlRGVmZXJyYWwu
aGFzVmFyaWFibGUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0
IGEgUHV0TG9jYWwuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnNlcnRpbmcgYSBQdXRMb2NhbCBmb3Ig
Iiwgb3BlcmFuZCwgIiBhdCAiLCBub2RlLCAiXG4iKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIGluY29taW5nKTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBQdXRMb2NhbCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyh2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmRGb3IodmFyaWFibGVEZWZlcnJhbC52YXJpYWJs
ZSgpLT5mbHVzaEZvcm1hdCgpKSkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBw
cmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBOb2RlKikgeyB9KTsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGEgR2V0TG9jYWwsIHRoZW4gd2Ug
YWxzbyBjcmVhdGUgYSBtYXBwaW5nLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
c2hvdWxkIGJlIGFibGUgdG8ganVzdCBlbGltaW5hdGUgc3VjaCBHZXRMb2NhbHMsIHdoZW4gd2Ug
a25vdworICAgICAgICAgICAgICAgICAgICAvLyB3aGF0IHRoZWlyIGluY29taW5nIHZhbHVlIHdp
bGwgYmUuCisgICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDE2MjQKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gR2V0TG9jYWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPmxvY2FsKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBub2RlOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0gfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBz
aXplX3QgdXBzaWxvbkluc2VydGlvblBvaW50ID0gYmxvY2stPnNpemUoKSAtIDE7CisgICAgICAg
ICAgICBOb2RlT3JpZ2luIHVwc2lsb25PcmlnaW4gPSBibG9jay0+bGFzdCgpLT5vcmlnaW47Cisg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBzc2FDYWxjdWxhdG9yLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IHBoaURlZi0+dmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52
YXJpYWJsZSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJDcmVhdGluZyBV
cHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+Iiwg
cG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOworICAg
ICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIHZhcmlhYmxlRGVm
ZXJyYWwuaGFzVmFyaWFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZv
cm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNvbWluZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBjYW4gdG90YWxseSBoYXBwZW4sIHNlZSB0ZXN0cy9zdHJlc3MvcHV0
LWxvY2FsLWNvbnNlcnZhdGl2ZS5qcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
YXJpc2VzIGJlY2F1c2UgZGVmZXJyYWwgYW5kIGxpdmVuZXNzIGFyZSBib3RoIGNvbnNlcnZhdGl2
ZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnNlcnZhdGl2ZSBsaXZlbmVzcyBtZWFu
cyB0aGF0IGEgbG9hZCBmcm9tIGEgKmRpZmZlcmVudCogY2xvc3VyZQorICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmFyaWFibGUgbWF5IGxlYWQgdXMgdG8gYmVsaWV2ZSB0aGF0IG91ciBsb2Nh
bCBpcyBsaXZlLiBDb25zZXJ2YXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmVy
cmFsIG1heSBsZWFkIHVzIHRvIGJlbGlldmUgdGhhdCB0aGUgbG9jYWwgZG9lc24ndCBoYXZlIGEg
dG9wIGRlZmVycmFsCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHNvbWVvbmUg
aGFzIGRvbmUgc29tZXRoaW5nIHRoYXQgd291bGQgaGF2ZSBmb3JjZWQgaXQgdG8gYmUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIG1hdGVyaWFsaXplZC4gVGhlIGJhc2ljIHBhdHRlcm4gaXM6
CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
R2V0Q2xvc3VyZVZhcihsb2M0MikgLy8gbG9jNDIncyBkZWZlcnJhbCBpcyBub3cgYm90dG9tCisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAocHJlZGljYXRlMSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vICAgICBQdXRDbG9zdXJlVmFyKGxvYzQyKSAvLyBwcmV2ZW50IEdDU0Ugb2Yg
b3VyIEdldENsb3N1cmVWYXIncworICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHByZWRp
Y2F0ZTIpCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgUHV0TG9jYWwobG9jNDIpIC8v
IHdlIG5vdyBoYXZlIGEgY29uY3JldGUgZGVmZXJyYWwKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIC8vIHdlIHN0aWxsIGhhdmUgdGhlIGNvbmNyZXRlIGRlZmVycmFsIGJlY2F1c2Ugd2UgbWVy
Z2VkIHdpdGggYm90dG9tCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXRDbG9zdXJlVmFy
KGxvYzQyKSAvLyBmb3JjZSBtYXRlcmlhbGl6YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBQaGkgd2l0aCBu
byBpbmNvbWluZyB2YWx1ZSBmb3JtIHRoZSBiYXNpYyBibG9jayB0aGF0CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBieXBhc3NlZCB0aGUgUHV0TG9jYWwuCisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHdlIHNvcnQgb2YgY291bGQg
aGF2ZSB1c2VkIHRoZSBlcXVpdmFsZW50IG9mIExMVk0ncyB1bmRlZiBoZXJlLiBUaGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHBvaW50IGlzIHRoYXQgaXQncyBPSyB0byBqdXN0IGxlYXZl
IHJhbmRvbSBiaXRzIGluIHRoZSBsb2NhbCBpZiB3ZSdyZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY29taW5nIGRvd24gdGhpcyBwYXRoLiBCdXQsIHdlIGRvbid0IGhhdmUgYSB3YXkgb2Yg
c2F5aW5nIHRoYXQgaW4gb3VyIElSCisgICAgICAgICAgICAgICAgICAgICAgICAvLyByaWdodCBu
b3cgYW5kIGFueXdheSBpdCBwcm9iYWJseSBkb2Vzbid0IG1hdHRlciB0aGF0IG11Y2guCisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluY29taW5nID0g
aW5zZXJ0aW9uU2V0Lmluc2VydEJvdHRvbUNvbnN0YW50Rm9yVXNlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgdXBzaWxvbk9yaWdpbiwgdXNlS2lu
ZCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgU3BlY05vbmUsIFVwc2lsb24sIHVw
c2lsb25PcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8ocGhpTm9kZSksIEVk
Z2UoaW5jb21pbmcsIHVzZUtpbmQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRmluYWxseSBlbGltaW5hdGUgdGhlIHN1
bmtlbiBQdXRMb2NhbHMgYnkgdHVybmluZyB0aGVtIGludG8gUGhhbnRvbXMuIFRoaXMga2VlcHMg
d2hhdGV2ZXIKKyAgICAgICAgLy8gdHlwZSBjaGVjayB0aGV5IHdlcmUgZG9pbmcuIEFsc28gcHJl
cGVuZCBLaWxsTG9jYWxzIHRvIHRoZW0gdG8gZW5zdXJlIHRoYXQgd2Uga25vdyB0aGF0CisgICAg
ICAgIC8vIHRoZSByZWxldmFudCB2YWx1ZSB3YXMgKm5vdCogc3RvcmVkIHRvIHRoZSBzdGFjay4K
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFs
T3JkZXIoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2Rl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoIXB1dExvY2Fsc1RvU2luay5jb250YWlucyhub2RlKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIEtpbGxMb2NhbCwgbm9kZS0+b3JpZ2luLCBPcEluZm8obm9kZS0+bG9jYWwoKS5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgewor
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYWZ0ZXIgUHV0TG9jYWwgc2lua2luZzpcbiIpOwor
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorICAg
IAorYm9vbCBwZXJmb3JtUHV0TG9jYWxTaW5raW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFB1dExvY2FsIFNpbmtpbmcgUGhhc2UiKTsK
KyAgICByZXR1cm4gcnVuUGhhc2U8UHV0TG9jYWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tT
aW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjQsNyArMjQs
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJERkdQdXRMb2NhbFNp
bmtpbmdQaGFzZS5oIgorI2luY2x1ZGUgIkRGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgiCiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIApAQCAtNDQsOTMgKzQ0LDI4IEBAIG5hbWVzcGFjZSB7CiAKIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOwogCi1jbGFzcyBWYXJpYWJsZURlZmVycmFsIHsKK2NsYXNzIFB1
dFN0YWNrU2lua2luZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKIHB1YmxpYzoKLSAgICBWYXJpYWJs
ZURlZmVycmFsKFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBudWxscHRyKQotICAgICAg
ICA6IG1fdmFyaWFibGUodmFyaWFibGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBzdGF0aWMg
VmFyaWFibGVEZWZlcnJhbCBjb25mbGljdCgpCi0gICAgewotICAgICAgICByZXR1cm4gVmFyaWFi
bGVEZWZlcnJhbChjb25mbGljdE1hcmtlcigpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvciEoKSBjb25zdCB7IHJldHVybiAhbV92YXJpYWJsZTsgfQotICAgIAotICAgIGJvb2wgaGFz
VmFyaWFibGUoKSBjb25zdCB7IHJldHVybiAhISp0aGlzICYmICFpc0NvbmZsaWN0KCk7IH0KLSAg
ICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChoYXNWYXJpYWJsZSgpKTsKLSAgICAgICAgcmV0dXJuIG1fdmFyaWFibGU7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNDb25mbGljdCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV92YXJpYWJsZSA9PSBjb25mbGljdE1hcmtlcigpOwotICAgIH0KLSAgICAKLSAgICBW
YXJpYWJsZURlZmVycmFsIG1lcmdlKFZhcmlhYmxlRGVmZXJyYWwgb3RoZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAoKnRoaXMgPT0gb3RoZXIgfHwgIW90aGVyKQotICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgICAgICBpZiAoISp0aGlzKQotICAgICAgICAgICAgcmV0dXJuIG90aGVy
OwotICAgICAgICByZXR1cm4gY29uZmxpY3QoKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVy
YXRvcj09KFZhcmlhYmxlRGVmZXJyYWwgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV92YXJpYWJsZSA9PSBvdGhlci5tX3ZhcmlhYmxlOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICghKnRoaXMp
Ci0gICAgICAgICAgICBvdXQucHJpbnQoIi0iKTsKLSAgICAgICAgZWxzZSBpZiAoaXNDb25mbGlj
dCgpKQotICAgICAgICAgICAgb3V0LnByaW50KCJDb25mbGljdCIpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBvdXQucHJpbnQoUmF3UG9pbnRlcihtX3ZhcmlhYmxlKSk7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCop
IGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wKG91dCk7Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICBzdGF0aWMgVmFyaWFibGVBY2Nlc3NEYXRhKiBjb25mbGljdE1hcmtlcigpCi0gICAgewot
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KHN0YXRpY19j
YXN0PGludHB0cl90PigxKSk7Ci0gICAgfQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
bV92YXJpYWJsZTsKLX07Ci0KLWNsYXNzIFB1dExvY2FsU2lua2luZ1BoYXNlIDogcHVibGljIFBo
YXNlIHsKLXB1YmxpYzoKLSAgICBQdXRMb2NhbFNpbmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCi0g
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRMb2NhbCBzaW5raW5nIikKKyAgICBQdXRTdGFja1Np
bmtpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJQdXRTdGFj
ayBzaW5raW5nIikKICAgICB7CiAgICAgfQogICAgIAogICAgIGJvb2wgcnVuKCkKICAgICB7CiAg
ICAgICAgIC8vIEZJWE1FOiBPbmUgb2YgdGhlIHByb2JsZW1zIG9mIHRoaXMgYXBwcm9hY2ggaXMg
dGhhdCBpdCB3aWxsIGNyZWF0ZSBhIGR1cGxpY2F0ZSBQaGkgZ3JhcGgKLSAgICAgICAgLy8gZm9y
IHN1bmtlbiBQdXRMb2NhbHMgaW4gdGhlIHByZXNlbmNlIG9mIGludGVyZXN0aW5nIGNvbnRyb2wg
ZmxvdyBtZXJnZXMsIGFuZCB3aGVyZSB0aGUKLSAgICAgICAgLy8gdmFsdWUgYmVpbmcgUHV0TG9j
YWwnZCBpcyBhbHNvIG90aGVyd2lzZSBsaXZlIGluIHRoZSBERkcgY29kZS4gV2UgY291bGQgd29y
ayBhcm91bmQgdGhpcworICAgICAgICAvLyBmb3Igc3Vua2VuIFB1dFN0YWNrcyBpbiB0aGUgcHJl
c2VuY2Ugb2YgaW50ZXJlc3RpbmcgY29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQor
ICAgICAgICAvLyB2YWx1ZSBiZWluZyBQdXRTdGFjaydkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUg
aW4gdGhlIERGRyBjb2RlLiBXZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGlzCiAgICAgICAgIC8vIGJ5
IGRvaW5nIHRoZSBzaW5raW5nIG92ZXIgQ1BTLCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxs
eSBzbWFydCBob2lzdGluZy4gSXQncyBhbHNvCiAgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhl
IGR1cGxpY2F0ZSBQaGkgZ3JhcGggY2FuIGJlIGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3Vs
ZCBiZSBiZXN0IGlmIHdlCiAgICAgICAgIC8vIGNvdWxkIG9ic2VydmUgdGhhdCB0aGVyZSBpcyBh
bHJlYWR5IGEgUGhpIGdyYXBoIGluIHBsYWNlIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEluCiAg
ICAgICAgIC8vIHByaW5jaXBsZSBpZiB3ZSBoYXZlIGEgcmVxdWVzdCB0byBwbGFjZSBhIFBoaSBh
dCBhIHBhcnRpY3VsYXIgcGxhY2UsIHdlIGNvdWxkIGp1c3QgY2hlY2sKLSAgICAgICAgLy8gaWYg
dGhlcmUgaXMgYWxyZWFkeSBhIFBoaSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBCZWNhdXNlIFB1
dExvY2FsU2lua2luZ1BoYXNlIHJ1bnMganVzdAorICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbHJl
YWR5IGEgUGhpIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEJlY2F1c2UgUHV0U3RhY2tTaW5raW5n
UGhhc2UgcnVucyBqdXN0CiAgICAgICAgIC8vIGFmdGVyIFNTQSBjb252ZXJzaW9uLCB3ZSBoYXZl
IGFsbW9zdCBhIGd1YXJhbnRlZSB0aGF0IHRoZSBQaGkgZ3JhcGggd2UgcHJvZHVjZSBoZXJlIHdv
dWxkCiAgICAgICAgIC8vIGJlIHRyaXZpYWxseSByZWR1bmRhbnQgdG8gdGhlIG9uZSB3ZSBhbHJl
YWR5IGhhdmUuCiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkgewotICAgICAgICAgICAg
ZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dExvY2FsIHNpbmtpbmc6XG4iKTsKKyAgICAgICAgICAg
IGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE4MCw3ICsxMTUsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBQ
dXRMb2NhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS0+b3AoKSA9PSBQdXRTdGFjayk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZS5v
cGVyYW5kKG9wZXJhbmQpID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAg
ICAgICAgICAgICAgICB9CkBAIC0yMTIsNzYgKzE0Nyw3NyBAQCBwdWJsaWM6CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBsaXZlQXRIZWFkLmF0SW5kZXgoMCkubnVtYmVyT2ZBcmd1bWVudHMoKTsg
aS0tOykKICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgbGl2ZUF0SGVh
ZC5hdEluZGV4KDApLmFyZ3VtZW50KGkpKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5leHQgaWRl
bnRpZnkgd2hlcmUgd2Ugd291bGQgd2FudCB0byBzaW5rIFB1dExvY2FscyB0by4gV2Ugc2F5IHRo
YXQgdGhlcmUgaXMgYSBkZWZlcnJlZAotICAgICAgICAvLyBmbHVzaCBpZiB3ZSBoYWQgYSBQdXRM
b2NhbCB3aXRoIGEgZ2l2ZW4gVmFyaWFibGVBY2Nlc3NEYXRhKiBidXQgaXQgaGFzbid0IGJlZW4K
LSAgICAgICAgLy8gbWF0ZXJpYWxpemVkIHlldC4gRGVmZXJyYWxzIGhhdmUgdGhlIGZvbGxvd2lu
ZyBsYXR0aWNlOyBidXQgaXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUKLSAgICAgICAgLy8gVE9Q
IHBhcnQgb2YgdGhlIGxhdHRpY2Ugc2VydmVzIGFuIGVudGlyZWx5IGRpZmZlcmVudCBwdXJwb3Nl
IHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGxhdHRpY2U6Ci0gICAgICAgIC8vIGl0IGp1c3QgbWVhbnMg
dGhhdCB3ZSdyZSBpbiBhIHJlZ2lvbiBvZiBjb2RlIHdoZXJlIG5vYm9keSBzaG91bGQgaGF2ZSBi
ZWVuIHJlbHlpbmcgb24gdGhlCi0gICAgICAgIC8vIHZhbHVlLiBUaGUgcmVzdCBvZiB0aGUgbGF0
dGljZSBtZWFucyB0aGF0IHdlIGVpdGhlciBoYXZlIGEgUHV0TG9jYWwgdGhhdCBpcyBkZWZlcnJl
ZCAoaS5lLgotICAgICAgICAvLyBzdGlsbCBuZWVkcyB0byBiZSBleGVjdXRlZCkgb3IgdGhlcmUg
aXNuJ3Qgb25lIChiZWNhdXNlIHdlJ3ZlIGFscmFlZHkgZXhlY3V0ZWQgaXQpLgorICAgICAgICAv
LyBOZXh0IGlkZW50aWZ5IHdoZXJlIHdlIHdvdWxkIHdhbnQgdG8gc2luayBQdXRTdGFja3MgdG8u
IFdlIHNheSB0aGF0IHRoZXJlIGlzIGEgZGVmZXJyZWQKKyAgICAgICAgLy8gZmx1c2ggaWYgd2Ug
aGFkIGEgUHV0U3RhY2sgd2l0aCBhIGdpdmVuIEZsdXNoRm9ybWF0IGJ1dCBpdCBoYXNuJ3QgYmVl
biBtYXRlcmlhbGl6ZWQgeWV0LgorICAgICAgICAvLyBEZWZlcnJhbHMgaGF2ZSB0aGUgZm9sbG93
aW5nIGxhdHRpY2U7IGJ1dCBpdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZSBUT1AgcGFydCBvZiB0
aGUKKyAgICAgICAgLy8gbGF0dGljZSBzZXJ2ZXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IHB1cnBv
c2UgdGhhbiB0aGUgcmVzdCBvZiB0aGUgbGF0dGljZTogaXQganVzdCBtZWFucworICAgICAgICAv
LyB0aGF0IHdlJ3JlIGluIGEgcmVnaW9uIG9mIGNvZGUgd2hlcmUgbm9ib2R5IHNob3VsZCBoYXZl
IGJlZW4gcmVseWluZyBvbiB0aGUgdmFsdWUuIFRoZQorICAgICAgICAvLyByZXN0IG9mIHRoZSBs
YXR0aWNlIG1lYW5zIHRoYXQgd2UgZWl0aGVyIGhhdmUgYSBQdXRTdGFjayB0aGF0IGlzIGRlZmVy
cmVkIChpLmUuIHN0aWxsCisgICAgICAgIC8vIG5lZWRzIHRvIGJlIGV4ZWN1dGVkKSBvciB0aGVy
ZSBpc24ndCBvbmUgKGJlY2F1c2Ugd2UndmUgYWxyYWVkeSBleGVjdXRlZCBpdCkuCiAgICAgICAg
IC8vCiAgICAgICAgIC8vIEJvdHRvbToKLSAgICAgICAgLy8gICAgIEluc3RhbnRpYXRlZCBhcyBW
YXJpYWJsZURlZmVycmFsKCkuIAotICAgICAgICAvLyAgICAgTWVhbnMgdGhhdCBhbGwgcHJldmlv
dXMgUHV0TG9jYWxzIGhhdmUgYmVlbiBleGVjdXRlZCBzbyB0aGVyZSBpcyBub3RoaW5nIGRlZmVy
cmVkLgorICAgICAgICAvLyAgICAgUmVwcmVzZW50ZWQgYXMgRGVhZEZsdXNoLiAKKyAgICAgICAg
Ly8gICAgIE1lYW5zIHRoYXQgYWxsIHByZXZpb3VzIFB1dFN0YWNrcyBoYXZlIGJlZW4gZXhlY3V0
ZWQgc28gdGhlcmUgaXMgbm90aGluZyBkZWZlcnJlZC4KICAgICAgICAgLy8gICAgIER1cmluZyBt
ZXJnaW5nIHRoaXMgaXMgc3Vib3JkaW5hdGUgdG8gdGhlIG90aGVyIGtpbmRzIG9mIGRlZmVycmFs
cywgYmVjYXVzZSBpdAotICAgICAgICAvLyAgICAgcmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHdl
J3ZlIGFscmVhZHkgZXhlY3V0ZWQgYWxsIG5lY2Vzc2FyeSBQdXRMb2NhbHMuIFRoaXMgaW1wbGll
cwotICAgICAgICAvLyAgICAgdGhhdCB0aGVyZSAqaGFkKiBiZWVuIHNvbWUgUHV0TG9jYWxzIHRo
YXQgd2Ugc2hvdWxkIGhhdmUgZXhlY3V0ZWQuCisgICAgICAgIC8vICAgICByZXByZXNlbnRzIHRo
ZSBmYWN0IHRoYXQgd2UndmUgYWxyZWFkeSBleGVjdXRlZCBhbGwgbmVjZXNzYXJ5IFB1dFN0YWNr
cy4gVGhpcyBpbXBsaWVzCisgICAgICAgIC8vICAgICB0aGF0IHRoZXJlICpoYWQqIGJlZW4gc29t
ZSBQdXRTdGFja3MgdGhhdCB3ZSBzaG91bGQgaGF2ZSBleGVjdXRlZC4KICAgICAgICAgLy8KICAg
ICAgICAgLy8gVG9wOgotICAgICAgICAvLyAgICAgSW5zdGFudGlhdGVkIGFzIFZhcmlhYmxlRGVm
ZXJyYWw6OmNvbmZsaWN0KCkuCisgICAgICAgIC8vICAgICBSZXByZXNlbnRlZCBhcyBDb25mbGlj
dGluZ0ZsdXNoLgogICAgICAgICAvLyAgICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHdlIGtu
b3csIHZpYSBmb3J3YXJkIGZsb3csIHRoYXQgdGhlcmUgaXNuJ3QgYW55IHZhbHVlIGluIHRoZQog
ICAgICAgICAvLyAgICAgZ2l2ZW4gbG9jYWwgdGhhdCBhbnlvbmUgc2hvdWxkIGhhdmUgYmVlbiBy
ZWx5aW5nIG9uLiBUaGlzIGNvbWVzIGludG8gcGxheSBhdCB0aGUKICAgICAgICAgLy8gICAgIHBy
b2xvZ3VlIChiZWNhdXNlIGluIFNTQSBmb3JtIGF0IHRoZSBwcm9sb2d1ZSBubyBsb2NhbCBoYXMg
YW55IHZhbHVlKSBvciB3aGVuIHdlIG1lcmdlCi0gICAgICAgIC8vICAgICBkZWZlcnJhbHMgZm9y
IGRpZmZlcmVudCBWYXJpYWJsZUFjY2Vzc0RhdGEqJ3MuIEEgVkFEIGVuY29tcGFzc2VzIGEgbGV4
aWNhbCBzY29wZSBpbgotICAgICAgICAvLyAgICAgd2hpY2ggdGhlIGxvY2FsIGhhcyBzb21lIHNl
bWFudGljIG1lYW5pbmc7IGlmIHdlIGhhZCBzdG9yZXMgZnJvbSBkaWZmZXJlbnQgbGV4aWNhbAot
ICAgICAgICAvLyAgICAgc2NvcGVzIHRoYXQgZ290IG1lcmdlZCB0b2dldGhlciB0aGVuIHdlIGtu
b3cgdGhhdCB3ZSdyZSBub3QgaW4gZWl0aGVyIHNjb3BlIGFueW1vcmUuCi0gICAgICAgIC8vICAg
ICBOb3RlIHRoYXQgdGhpcyBpcyBhbGwgYXBwcm94aW1hdGUgYW5kIG9ubHkgcHJlY2lzZSBlbm91
Z2ggdG8gbGF0ZXIgYW5zd2VyIHF1ZXN0aW9ucwotICAgICAgICAvLyAgICAgcGVydGluZW50IHRv
IHNpbmtpbmcuIEZvciBleGFtcGxlLCB0aGlzIGRvZXNuJ3QgYWx3YXlzIGRldGVjdCB3aGVuIGEg
bG9jYWwgaXMgbm8KLSAgICAgICAgLy8gICAgIGxvbmdlciBzZW1hbnRpY2FsbHkgcmVsZXZhbnQg
LSB3ZSBtYXkgd2VsbCBoYXZlIGEgZGVmZXJyYWwgZnJvbSBpbnNpZGUgc29tZSBpbmxpbmVkCi0g
ICAgICAgIC8vICAgICBjYWxsIHN1cnZpdmUgb3V0c2lkZSBvZiB0aGF0IGlubGluZWQgY29kZSwg
YW5kIHRoaXMgaXMgZ2VuZXJhbGx5IE9LLiBJbiB0aGUgd29yc3QgY2FzZQotICAgICAgICAvLyAg
ICAgaXQgbWVhbnMgdGhhdCB3ZSBtaWdodCB0aGluayB0aGF0IGEgZGVmZXJyYWwgdGhhdCBpcyBh
Y3R1YWxseSBkZWFkIG11c3Qgc3RpbGwgYmUKLSAgICAgICAgLy8gICAgIGV4ZWN1dGVkLiBCdXQg
d2UgdXN1YWxseSBjYXRjaCB0aGF0IHdpdGggbGl2ZW5lc3MuIExpdmVuZXNzIGRvZXNuJ3QgYWx3
YXlzIGNhdGNoIGl0Ci0gICAgICAgIC8vICAgICBiZWNhdXNlIGxpdmVuZXNzIGlzIGNvbnNlcnZh
dGl2ZS4KKyAgICAgICAgLy8gICAgIGRlZmVycmFscyBmb3IgZGlmZmVyZW50IGZvcm1hdHMncy4g
QSBsZXhpY2FsIHNjb3BlIGluIHdoaWNoIGEgbG9jYWwgaGFkIHNvbWUgc2VtYW50aWMKKyAgICAg
ICAgLy8gICAgIG1lYW5pbmcgd2lsbCBieSB0aGlzIHBvaW50IHNoYXJlIHRoZSBzYW1lIGZvcm1h
dDsgaWYgd2UgaGFkIHN0b3JlcyBmcm9tIGRpZmZlcmVudAorICAgICAgICAvLyAgICAgbGV4aWNh
bCBzY29wZXMgdGhhdCBnb3QgbWVyZ2VkIHRvZ2V0aGVyIHRoZW4gd2UgbWF5IGhhdmUgYSBjb25m
bGljdGluZyBmb3JtYXQuIEhlbmNlCisgICAgICAgIC8vICAgICBhIGNvbmZsaWN0aW5nIGZvcm1h
dCBwcm92ZXMgdGhhdCB3ZSdyZSBubyBsb25nZXIgaW4gYW4gYXJlYSBpbiB3aGljaCB0aGUgdmFy
aWFibGUgd2FzCisgICAgICAgIC8vICAgICBpbiBzY29wZS4gTm90ZSB0aGF0IHRoaXMgaXMgYWxs
IGFwcHJveGltYXRlIGFuZCBvbmx5IHByZWNpc2UgZW5vdWdoIHRvIGxhdGVyIGFuc3dlcgorICAg
ICAgICAvLyAgICAgcXVlc3Rpb25zIHBlcnRpbmVudCB0byBzaW5raW5nLiBGb3IgZXhhbXBsZSwg
dGhpcyBkb2Vzbid0IGFsd2F5cyBkZXRlY3Qgd2hlbiBhIGxvY2FsCisgICAgICAgIC8vICAgICBp
cyBubyBsb25nZXIgc2VtYW50aWNhbGx5IHJlbGV2YW50IC0gd2UgbWF5IHdlbGwgaGF2ZSBhIGRl
ZmVycmFsIGZyb20gaW5zaWRlIHNvbWUKKyAgICAgICAgLy8gICAgIGlubGluZWQgY2FsbCBzdXJ2
aXZlIG91dHNpZGUgb2YgdGhhdCBpbmxpbmVkIGNvZGUsIGFuZCB0aGlzIGlzIGdlbmVyYWxseSBP
Sy4gSW4gdGhlCisgICAgICAgIC8vICAgICB3b3JzdCBjYXNlIGl0IG1lYW5zIHRoYXQgd2UgbWln
aHQgdGhpbmsgdGhhdCBhIGRlZmVycmFsIHRoYXQgaXMgYWN0dWFsbHkgZGVhZCBtdXN0CisgICAg
ICAgIC8vICAgICBzdGlsbCBiZSBleGVjdXRlZC4gQnV0IHdlIHVzdWFsbHkgY2F0Y2ggdGhhdCB3
aXRoIGxpdmVuZXNzLiBMaXZlbmVzcyB1c3VhbGx5IGNhdGNoZXMKKyAgICAgICAgLy8gICAgIHN1
Y2ggY2FzZXMsIGJ1dCB0aGF0J3Mgbm90IGd1YXJhbnRlZWQgc2luY2UgbGl2ZW5lc3MgaXMgY29u
c2VydmF0aXZlLgogICAgICAgICAvLwogICAgICAgICAvLyAgICAgV2hhdCBUb3AgZG9lcyBnaXZl
IHVzIGlzIGRldGVjdHMgc2l0dWF0aW9ucyB3aGVyZSB3ZSBib3RoIGRvbid0IG5lZWQgdG8gY2Fy
ZSBhYm91dCBhCiAgICAgICAgIC8vICAgICBkZWZlcnJhbCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRo
YXQgd2UgY291bGQgcmVhc29uIGFib3V0IGl0IGFueXdheS4gSWYgd2UgbWVyZ2VkCi0gICAgICAg
IC8vICAgICBkZWZlcnJhbHMgZm9yIGRpZmZlcmVudCB2YXJpYWJsZXMgdGhlbiB3ZSB3b3VsZG4n
dCBrbm93IHRoZSBmb3JtYXQgdG8gdXNlLiBTbywgd2UKLSAgICAgICAgLy8gICAgIHVzZSBUb3Ag
aW4gdGhhdCBjYXNlIGJlY2F1c2UgdGhhdCdzIGFsc28gYSBjYXNlIHdoZXJlIHdlIGtub3cgdGhh
dCB3ZSBjYW4gaWdub3JlIHRoZQorICAgICAgICAvLyAgICAgZGVmZXJyYWxzIGZvciBkaWZmZXJl
bnQgZm9ybWF0cyB0aGVuIHdlIHdvdWxkbid0IGtub3cgdGhlIGZvcm1hdCB0byB1c2UuIFNvLCB3
ZSB1c2UKKyAgICAgICAgLy8gICAgIFRvcCBpbiB0aGF0IGNhc2UgYmVjYXVzZSB0aGF0J3MgYWxz
byBhIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGF0IHdlIGNhbiBpZ25vcmUgdGhlCiAgICAgICAgIC8v
ICAgICBkZWZlcnJhbC4KICAgICAgICAgLy8KLSAgICAgICAgLy8gRGVmZXJyYWwgd2l0aCBhIGNv
bmNyZXRlIFZhcmlhYmxlQWNjZXNzRGF0YSo6Ci0gICAgICAgIC8vICAgICBJbnN0YW50aWF0ZWQg
YXMgVmFyaWFibGVEZWZlcnJhbChzb21lVmFyaWFibGVBY2Nlc3NEYXRhKQotICAgICAgICAvLyAg
ICAgUmVwcmVzZW50cyB0aGUgZmFjdCB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUg
ZG9uZSBhIFB1dExvY2FsIGJ1dCB3ZSBoYXZlbid0Ci0gICAgICAgIC8vICAgICBpZGVudGlmaWVk
IGFuIG9wZXJhdGlvbiB0aGF0IHdvdWxkIGhhdmUgb2JzZXJ2ZWQgdGhhdCBQdXRMb2NhbC4KKyAg
ICAgICAgLy8gRGVmZXJyYWwgd2l0aCBhIGNvbmNyZXRlIGZvcm1hdDoKKyAgICAgICAgLy8gICAg
IFJlcHJlc2VudGVkIGJ5IGZvcm1hdCB2YWx1ZXMgb3RoZXIgdGhhbiBEZWFkRmx1c2ggb3IgQ29u
ZmxpY3RpbmdGbHVzaC4KKyAgICAgICAgLy8gICAgIFJlcHJlc2VudHMgdGhlIGZhY3QgdGhhdCB0
aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGRvbmUgYSBQdXRTdGFjayBidXQgd2UgaGF2ZW4n
dAorICAgICAgICAvLyAgICAgaWRlbnRpZmllZCBhbiBvcGVyYXRpb24gdGhhdCB3b3VsZCBoYXZl
IG9ic2VydmVkIHRoYXQgUHV0U3RhY2suCiAgICAgICAgIC8vCiAgICAgICAgIC8vIFRoaXMgY29k
ZSBoYXMgc29tZSBpbnRlcmVzdGluZyBxdWlya3MgYmVjYXVzZSBvZiB0aGUgZmFjdCB0aGF0IG5l
aXRoZXIgbGl2ZW5lc3Mgbm9yCiAgICAgICAgIC8vIGRlZmVycmFscyBhcmUgdmVyeSBwcmVjaXNl
LiBUaGV5IGFyZSBvbmx5IHByZWNpc2UgZW5vdWdoIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IHRl
bGwgdXMKLSAgICAgICAgLy8gd2hlbiB3ZSBtYXkgW3NpY10gbmVlZCB0byBleGVjdXRlIFB1dExv
Y2Fscy4gVGhpcyBtZWFucyB0aGF0IHRoZXkgbWF5IHJlcG9ydCB0aGUgbmVlZCB0bwotICAgICAg
ICAvLyBleGVjdXRlIGEgUHV0TG9jYWwgaW4gY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgZG9uJ3Qg
cmVhbGx5IG5lZWQgaXQsIGFuZCB0aGF0J3MgdG90YWxseSBPSy4KLSAgICAgICAgQmxvY2tNYXA8
T3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRIZWFkKG1fZ3JhcGgpOwotICAg
ICAgICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPj4gZGVmZXJyZWRBdFRhaWwo
bV9ncmFwaCk7CisgICAgICAgIC8vIHdoZW4gd2UgbWF5IFtzaWNdIG5lZWQgdG8gZXhlY3V0ZSBQ
dXRTdGFja3MuIFRoaXMgbWVhbnMgdGhhdCB0aGV5IG1heSByZXBvcnQgdGhlIG5lZWQgdG8KKyAg
ICAgICAgLy8gZXhlY3V0ZSBhIFB1dFN0YWNrIGluIGNhc2VzIHdoZXJlIHdlIGFjdHVhbGx5IGRv
bid0IHJlYWxseSBuZWVkIGl0LCBhbmQgdGhhdCdzIHRvdGFsbHkgT0suCisgICAgICAgIEJsb2Nr
TWFwPE9wZXJhbmRzPEZsdXNoRm9ybWF0Pj4gZGVmZXJyZWRBdEhlYWQobV9ncmFwaCk7CisgICAg
ICAgIEJsb2NrTWFwPE9wZXJhbmRzPEZsdXNoRm9ybWF0Pj4gZGVmZXJyZWRBdFRhaWwobV9ncmFw
aCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5i
bG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CiAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9j
a10gPQotICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRz
TGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8
Rmx1c2hGb3JtYXQ+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAg
ICAgICAgICBkZWZlcnJlZEF0VGFpbFtibG9ja10gPQotICAgICAgICAgICAgICAgIE9wZXJhbmRz
PFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7
CisgICAgICAgICAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+KE9wZXJhbmRzTGlrZSwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlZmVy
cmVkQXRIZWFkLmF0SW5kZXgoMCkuZmlsbChWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgpKTsK
KyAgICAgICAgZGVmZXJyZWRBdEhlYWQuYXRJbmRleCgwKS5maWxsKENvbmZsaWN0aW5nRmx1c2gp
OwogICAgICAgICAKICAgICAgICAgZG8gewogICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFw
aC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFy
aWFibGVEZWZlcnJhbD4gZGVmZXJyZWQgPSBkZWZlcnJlZEF0SGVhZFtibG9ja107CisgICAgICAg
ICAgICAgICAgT3BlcmFuZHM8Rmx1c2hGb3JtYXQ+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRb
YmxvY2tdOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9k
ZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJy
ZWQsICJcbiIpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gS2lsbExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBWYXJpYWJsZURlZmVycmFsOjpj
b25mbGljdCgpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBLaWxsU3Rh
Y2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5s
aW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
QEAgLTI4OSw3ICsyMjUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
b3BlcmFuZC5pc0hlYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgbWF0ZXJpYWxpemUganVzdCBiZWZv
cmUgYW55IHJlYWRzLgotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChv
cGVyYW5kKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAg
IH07CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9j
YWxDbG9iYmVyaXplKApAQCAtMzAwLDcgKzIzNiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChvcGVyYW5kKSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5mb3JtYXQ7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCkBAIC0zMTYsNyArMjUyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVy
YW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRl
ckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRI
ZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOwogCiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLm1lcmdlKGRlZmVycmVkW2ldKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZShkZWZlcnJlZEF0SGVhZFtzdWNjZXNz
b3JdW2ldLCBkZWZlcnJlZFtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIlxuIik7CkBAIC0zMjYsMTYg
KzI2MiwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgfSB3aGlsZSAoY2hhbmdl
ZCk7CiAgICAgICAgIAotICAgICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBQdXRMb2NhbHMgYXQg
YWxsIG9mIHRoZSBtYXRlcmlhbGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAorICAg
ICAgICAvLyBXZSB3aXNoIHRvIGluc2VydCBQdXRTdGFja3MgYXQgYWxsIG9mIHRoZSBtYXRlcmlh
bGl6YXRpb24gcG9pbnRzLCB3aGljaCBhcmUgZGVmaW5lZAogICAgICAgICAvLyBpbXBsaWNpdGx5
IGFzIHRoZSBwbGFjZXMgd2hlcmUgd2Ugc2V0IGRlZmVycmVkIHRvIERlYWQgd2hpbGUgaXQgd2Fz
IHByZXZpb3VzbHkgbm90IERlYWQuCiAgICAgICAgIC8vIFRvIGRvIHRoaXMsIHdlIG1heSBuZWVk
IHRvIGJ1aWxkIHNvbWUgUGhpIGZ1bmN0aW9ucyB0byBoYW5kbGUgc3R1ZmYgbGlrZSB0aGlzOgog
ICAgICAgICAvLwogICAgICAgICAvLyBCZWZvcmU6CiAgICAgICAgIC8vCiAgICAgICAgIC8vICAg
ICBpZiAocCkKLSAgICAgICAgLy8gICAgICAgICBQdXRMb2NhbChyNDIsIEB4KQorICAgICAgICAv
LyAgICAgICAgIFB1dFN0YWNrKHI0MiwgQHgpCiAgICAgICAgIC8vICAgICBlbHNlCi0gICAgICAg
IC8vICAgICAgICAgUHV0TG9jYWwocjQyLCBAeSkKKyAgICAgICAgLy8gICAgICAgICBQdXRTdGFj
ayhyNDIsIEB5KQogICAgICAgICAvLwogICAgICAgICAvLyBBZnRlcjoKICAgICAgICAgLy8KQEAg
LTM0NCwxMCArMjgwLDEwIEBAIHB1YmxpYzoKICAgICAgICAgLy8gICAgIGVsc2UKICAgICAgICAg
Ly8gICAgICAgICBVcHNpbG9uKEB5LCBeeikKICAgICAgICAgLy8gICAgIHo6IFBoaSgpCi0gICAg
ICAgIC8vICAgICBQdXRMb2NhbChyNDIsIEB6KQorICAgICAgICAvLyAgICAgUHV0U3RhY2socjQy
LCBAeikKICAgICAgICAgLy8KICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHdlIGhhdmUgYW4g
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgZm9yIGVhY2ggbG9jYWwsIGFuZCBhIERlZiBpcyBhbnkK
LSAgICAgICAgLy8gUHV0TG9jYWwgaW4gdGhlIG9yaWdpbmFsIHByb2dyYW0uIFRoZSBvcmlnaW5h
bCBQdXRMb2NhbHMgd2lsbCBzaW1wbHkgdmFuaXNoLgorICAgICAgICAvLyBQdXRTdGFjayBpbiB0
aGUgb3JpZ2luYWwgcHJvZ3JhbS4gVGhlIG9yaWdpbmFsIFB1dFN0YWNrcyB3aWxsIHNpbXBseSB2
YW5pc2guCiAgICAgICAgIAogICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAogICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwpAQCAtMzY2LDE0ICszMDIsMTYgQEAgcHVibGlj
OgogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVy
YWxPcmRlcigpKSB7CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiAqYmxvY2spIHsKICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAgICBjYXNl
IFB1dExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAgICAgICAgICAgICAg
ICAgICAgIHB1dExvY2Fsc1RvU2luay5hZGQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIHNz
YUNhbGN1bGF0b3IubmV3RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChub2RlLT5sb2NhbCgpKSwgYmxvY2ssIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5v
ZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCksCisgICAgICAgICAgICAgICAgICAgICAgICBi
bG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dFN0YWNrOgogICAgICAgICAgICAgICAgICAgICBzc2FDYWxjdWxhdG9yLm5ld0RlZigKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxlLm9wZXJhbmQobm9kZS0+bG9jYWwo
KSksIGJsb2NrLCBub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1Zhcmlh
YmxlLm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0z
ODgsMjQgKzMyNiwyMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgaWYgKCFsaXZlQXRIZWFk
W2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYXJpYWJsZURlZmVycmFs
IHZhcmlhYmxlRGVmZXJyYWwgPSBkZWZlcnJlZEF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5k
KTsKKyAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSBkZWZlcnJlZEF0SGVhZFti
bG9ja10ub3BlcmFuZChvcGVyYW5kKTsKIAogICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGhh
dmUgYW4gaW52YWxpZCBkZWZlcnJhbCBiZWNhdXNlIGxpdmVuZXNzIGlzIGltcHJlY2lzZS4KLSAg
ICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSkKKyAgICAg
ICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0KSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIFBoaSBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBw
b2ludGVyRHVtcChibG9jayksICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIE5vZGUqIHBoaU5vZGUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY0hlYXBUb3AsIFBoaSwgTm9k
ZU9yaWdpbigpKTsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIs
IHZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSk7Ci0gICAgICAgICAgICAgICAgRmx1c2hG
b3JtYXQgZm9ybWF0ID0gdmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgp
OwogICAgICAgICAgICAgICAgIHBoaU5vZGUtPm1lcmdlRmxhZ3MocmVzdWx0Rm9yKGZvcm1hdCkp
OwogICAgICAgICAgICAgICAgIHJldHVybiBwaGlOb2RlOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIAogICAgICAgICBPcGVyYW5kczxOb2RlKj4gbWFwcGluZyhPcGVyYW5kc0xpa2UsIG1fZ3Jh
cGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgIE9wZXJhbmRzPFZhcmlhYmxl
RGVmZXJyYWw+IGRlZmVycmVkOworICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJy
ZWQ7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKICAgICAgICAgICAgIG1hcHBpbmcuZmlsbChudWxscHRyKTsKICAgICAg
ICAgICAgIApAQCAtNDQwLDEwICszNzYsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJEZWZlcnJlZCBhdCAiLCBub2RlLCAiOiIsIGRlZmVycmVkLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIFB1dExvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlh
YmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9j
YWwoKTsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IFZh
cmlhYmxlRGVmZXJyYWwodmFyaWFibGUpOworICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6
IHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3Rh
Y2tBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gZGF0YS0+bG9jYWw7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCkgPSBkYXRhLT5mb3JtYXQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5k
LCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4iKTsKICAg
ICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOwpAQCAtNDUxLDcgKzM4Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgS2lsbExvY2FsOiB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQu
b3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtNDYwLDIwICszOTYsMjAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0gZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJs
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNDb25j
cmV0ZShmb3JtYXQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQg
YSBQdXRMb2NhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvdHRhIGluc2VydCBhIFB1
dFN0YWNrLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0TG9jYWwgZm9yICIsIG9w
ZXJhbmQsICIgYXQgIiwgbm9kZSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiSW5zZXJ0aW5nIGEgUHV0U3RhY2sgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgbm9k
ZSwgIlxuIik7CiAKICAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFw
cGluZy5vcGVyYW5kKG9wZXJhbmQpOwogICAgICAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBub2RlLCBpbmNvbWluZyk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0TG9jYWwsIG5vZGUtPm9yaWdp
biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyaWFibGVEZWZlcnJhbC52
YXJpYWJsZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChvcGVyYW5kLCBmb3JtYXQpKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGluY29taW5nLCB1c2VLaW5kRm9yKHZh
cmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKSkpKTsKICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJh
bmQpID0gbnVsbHB0cjsKQEAgLTQ4MywxMyArNDE5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciwgTm9kZSopIHsg
fSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdy
ZSBhIEdldExvY2FsLCB0aGVuIHdlIGFsc28gY3JlYXRlIGEgbWFwcGluZy4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgd2UncmUgYSBHZXRTdGFjaywgdGhlbiB3ZSBhbHNvIGNyZWF0ZSBhIG1h
cHBpbmcuCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBqdXN0IGVsaW1pbmF0ZSBzdWNoIEdldExvY2Fscywgd2hlbiB3ZSBrbm93CiAgICAgICAgICAg
ICAgICAgICAgIC8vIHdoYXQgdGhlaXIgaW5jb21pbmcgdmFsdWUgd2lsbCBiZS4KICAgICAgICAg
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MTYyNAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKG5vZGUtPm9wKCkgPT0gR2V0U3RhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBkYXRhLT5sb2NhbDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01
MDUsMTAgKzQ0MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFt2YXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQ3JlYXRpbmcgVXBzaWxvbiBmb3IgIiwgb3BlcmFuZCwgIiBhdCAiLCBwb2ludGVyRHVtcChi
bG9jayksICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvckJsb2NrKSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JCbG9ja10ub3BlcmFuZChv
cGVyYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCB2YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpOwotICAgICAgICAgICAgICAgICAgICBG
bHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9y
bWF0KCk7CisgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGlzQ29uY3JldGUoZm9ybWF0KSk7CiAg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsK
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogaW5jb21pbmcgPSBtYXBwaW5nLm9wZXJhbmQob3Bl
cmFuZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaW5jb21pbmcpIHsKQEAgLTUyNCwxMiAr
NDU4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChwcmVkaWNh
dGUxKQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFB1dENsb3N1cmVWYXIobG9jNDIp
IC8vIHByZXZlbnQgR0NTRSBvZiBvdXIgR2V0Q2xvc3VyZVZhcidzCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBpZiAocHJlZGljYXRlMikKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAg
ICBQdXRMb2NhbChsb2M0MikgLy8gd2Ugbm93IGhhdmUgYSBjb25jcmV0ZSBkZWZlcnJhbAorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFB1dFN0YWNrKGxvYzQyKSAvLyB3ZSBub3cgaGF2
ZSBhIGNvbmNyZXRlIGRlZmVycmFsCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAvLyB3ZSBz
dGlsbCBoYXZlIHRoZSBjb25jcmV0ZSBkZWZlcnJhbCBiZWNhdXNlIHdlIG1lcmdlZCB3aXRoIGJv
dHRvbQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0Q2xvc3VyZVZhcihsb2M0MikgLy8g
Zm9yY2UgbWF0ZXJpYWxpemF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAvLwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBoYXZlIGEgUGhpIHdpdGggbm8gaW5jb21pbmcg
dmFsdWUgZm9ybSB0aGUgYmFzaWMgYmxvY2sgdGhhdAotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYnlwYXNzZWQgdGhlIFB1dExvY2FsLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYnlw
YXNzZWQgdGhlIFB1dFN0YWNrLgogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBOb3RlOiB3ZSBzb3J0IG9mIGNvdWxkIGhhdmUgdXNlZCB0aGUgZXF1
aXZhbGVudCBvZiBMTFZNJ3MgdW5kZWYgaGVyZS4gVGhlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBwb2ludCBpcyB0aGF0IGl0J3MgT0sgdG8ganVzdCBsZWF2ZSByYW5kb20gYml0cyBpbiB0
aGUgbG9jYWwgaWYgd2UncmUKQEAgLTU0OSw3ICs0ODMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIEZpbmFsbHkgZWxpbWluYXRlIHRoZSBzdW5rZW4gUHV0TG9jYWxzIGJ5IHR1cm5pbmcg
dGhlbSBpbnRvIFBoYW50b21zLiBUaGlzIGtlZXBzIHdoYXRldmVyCisgICAgICAgIC8vIEZpbmFs
bHkgZWxpbWluYXRlIHRoZSBzdW5rZW4gUHV0U3RhY2tzIGJ5IHR1cm5pbmcgdGhlbSBpbnRvIFBo
YW50b21zLiBUaGlzIGtlZXBzIHdoYXRldmVyCiAgICAgICAgIC8vIHR5cGUgY2hlY2sgdGhleSB3
ZXJlIGRvaW5nLiBBbHNvIHByZXBlbmQgS2lsbExvY2FscyB0byB0aGVtIHRvIGVuc3VyZSB0aGF0
IHdlIGtub3cgdGhhdAogICAgICAgICAvLyB0aGUgcmVsZXZhbnQgdmFsdWUgd2FzICpub3QqIHN0
b3JlZCB0byB0aGUgc3RhY2suCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dy
YXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKQEAgLTU2MCw3ICs0OTQsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsTG9jYWwsIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG5vZGUt
PmxvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2RlLT5zdGFja0FjY2Vzc0Rh
dGEoKS0+bG9jYWwpKTsKICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTU2OCw3ICs1MDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAg
ICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRMb2NhbCBzaW5raW5nOlxuIik7CisgICAgICAgICAg
ICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRTdGFjayBzaW5raW5nOlxuIik7CiAgICAgICAgICAg
ICBtX2dyYXBoLmR1bXAoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTU3OCwxMCArNTEyLDEw
IEBAIHB1YmxpYzoKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAgICAgCi1ib29sIHBlcmZv
cm1QdXRMb2NhbFNpbmtpbmcoR3JhcGgmIGdyYXBoKQorYm9vbCBwZXJmb3JtUHV0U3RhY2tTaW5r
aW5nKEdyYXBoJiBncmFwaCkKIHsKLSAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigi
REZHIFB1dExvY2FsIFNpbmtpbmcgUGhhc2UiKTsKLSAgICByZXR1cm4gcnVuUGhhc2U8UHV0TG9j
YWxTaW5raW5nUGhhc2U+KGdyYXBoKTsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lv
bigiREZHIFB1dFN0YWNrIFNpbmtpbmcgUGhhc2UiKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8UHV0
U3RhY2tTaW5raW5nUGhhc2U+KGdyYXBoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tT
aW5raW5nUGhhc2UuaAkocmV2aXNpb24gMTgwNTgwKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmg6MTgwNTgwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorI2RlZmluZSBERkdQdXRM
b2NhbFNpbmtpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2lua3MgUHV0TG9jYWxz
IHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3QgcG9pbnQgd2hlcmUgdGhleSBjYW4gcG9zc2libHkgaGFw
cGVuLCB3aGljaCBpcyB1c3VhbGx5CisvLyBzaWRlLWVmZmVjdHMgdGhhdCBtYXkgb2JzZXJ2ZSB0
aGVtLiBUaGlzIGVsaW1pbmF0ZXMgUHV0TG9jYWxzIGlmIGl0IHNpbmtzIHRoZW0gcGFzdCB0aGUg
cG9pbnQgb2YKKy8vIHRoZWlyIGRlYXRocy4KKworYm9vbCBwZXJmb3JtUHV0TG9jYWxTaW5raW5n
KEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1NpbmtpbmdQ
aGFzZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAgLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIERGR1B1dExvY2FsU2lua2luZ1BoYXNlX2gKLSNk
ZWZpbmUgREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorI2lmbmRlZiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZV9oCisjZGVmaW5lIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlX2gKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCkBAIC0zMiwxNSArMzIsMTUgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBjbGFzcyBHcmFwaDsKIAotLy8gU2lua3MgUHV0TG9jYWxzIHRvIHRoZSBhYnNv
bHV0ZSBsYXRlc3QgcG9pbnQgd2hlcmUgdGhleSBjYW4gcG9zc2libHkgaGFwcGVuLCB3aGljaCBp
cyB1c3VhbGx5Ci0vLyBzaWRlLWVmZmVjdHMgdGhhdCBtYXkgb2JzZXJ2ZSB0aGVtLiBUaGlzIGVs
aW1pbmF0ZXMgUHV0TG9jYWxzIGlmIGl0IHNpbmtzIHRoZW0gcGFzdCB0aGUgcG9pbnQgb2YKKy8v
IFNpbmtzIFB1dFN0YWNrcyB0byB0aGUgYWJzb2x1dGUgbGF0ZXN0IHBvaW50IHdoZXJlIHRoZXkg
Y2FuIHBvc3NpYmx5IGhhcHBlbiwgd2hpY2ggaXMgdXN1YWxseQorLy8gc2lkZS1lZmZlY3RzIHRo
YXQgbWF5IG9ic2VydmUgdGhlbS4gVGhpcyBlbGltaW5hdGVzIFB1dFN0YWNrcyBpZiBpdCBzaW5r
cyB0aGVtIHBhc3QgdGhlIHBvaW50IG9mCiAvLyB0aGVpciBkZWF0aHMuCiAKLWJvb2wgcGVyZm9y
bVB1dExvY2FsU2lua2luZyhHcmFwaCYpOworYm9vbCBwZXJmb3JtUHV0U3RhY2tTaW5raW5nKEdy
YXBoJik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQogCi0jZW5kaWYgLy8gREZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAorI2VuZGlmIC8v
IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlX2gKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTgsOCArMTE4LDkgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2FzZSBTZXRMb2Nh
bDoKLSAgICBjYXNlIFB1dExvY2FsOgotICAgIGNhc2UgS2lsbExvY2FsOgorICAgIGNhc2UgUHV0
U3RhY2s6CisgICAgY2FzZSBLaWxsU3RhY2s6CisgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgogICAgIGNhc2UgUGhhbnRvbToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEzOSw4ICs1MTM5
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIGNhc2Ug
Q2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50OgogICAg
IGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgY2FzZSBQdXRMb2NhbDoKLSAgICBjYXNl
IEtpbGxMb2NhbDoKKyAgICBjYXNlIFB1dFN0YWNrOgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAg
IGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIwOCw4ICs1MjA4LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmVIaW50OgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgY2FzZSBQ
dXRMb2NhbDoKLSAgICBjYXNlIEtpbGxMb2NhbDoKKyAgICBjYXNlIFB1dFN0YWNrOgorICAgIGNh
c2UgS2lsbFN0YWNrOgorICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgIERGR19DUkFTSChtX2pp
dC5ncmFwaCgpLCBub2RlLCAiVW5leHBlY3RlZCBub2RlIik7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdGFja0xheW91
dFBoYXNlLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdGFja0xheW91dFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBHZXRMb2NhbDoKICAgICAgICAgICAgICAgICBjYXNlIFNldExvY2FsOgot
ICAgICAgICAgICAgICAgIGNhc2UgUHV0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVz
aDoKICAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDogewogICAgICAgICAgICAgICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NE
YXRhKCk7CkBAIC0xMDAsNiArOTksMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRTdGFjazogewor
ICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIHN0YWNrID0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay0+bG9jYWwuaXNBcmd1
bWVudCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIHVzZWRMb2NhbHMuc2V0KHN0YWNrLT5sb2NhbC50b0xvY2FsKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTE3MSw2ICsxNzksOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICB2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkgPSBhc3NpZ24oYWxsb2NhdGlvbiwgdmFyaWFibGUtPmxv
Y2FsKCkpOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBmb3IgKFN0YWNrQWNjZXNzRGF0
YSogZGF0YSA6IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEpCisgICAgICAgICAgICBkYXRhLT5t
YWNoaW5lTG9jYWwgPSBhc3NpZ24oYWxsb2NhdGlvbiwgZGF0YS0+bG9jYWwpOworICAgICAgICAK
ICAgICAgICAgaWYgKGNvZGVCbG9jaygpLT51c2VzQXJndW1lbnRzKCkpIHsKICAgICAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlciA9CiAgICAgICAgICAgICAgICAgYXNz
aWduKGFsbG9jYXRpb24sIGNvZGVCbG9jaygpLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODA1
ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMzLDYgKzQzMywyNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAg
ICAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrSW5Cb3Vu
ZHM6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVIaW50Ogor
ICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgICAgICAgICAg
ICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgICAgICAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAg
ICAgICAgICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSksICEidW5leHBlY3RlZCBub2RlIHR5cGUgaW4gQ1BTIik7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewpAQCAtNDkzLDYg
KzUxMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQogICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCisgICAgICAgICAgICBWQUxJREFURSgoYmxvY2sp
LCBibG9jay0+cGhpcy5pc0VtcHR5KCkpOworICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNp
Z25lZCBub2RlSW5kZXggPSAwOwogICAgICAgICAgICAgZm9yICg7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCkgJiYgIWJsb2NrLT5hdChub2RlSW5kZXgpLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgp
OyBub2RlSW5kZXgrKykgeyB9CiAgICAgICAgICAgICAKQEAgLTUwOCw2ICs1MjgsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+b3JpZ2lu
LmZvckV4aXQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2Vk
OgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlKSwgISJiYWQgbm9kZSB0eXBlIGZvciBTU0EiKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgbW9yZSB0aGluZ3MgaGVy
ZS4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyMzQ3MQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247402</attachid>
            <date>2015-02-25 21:17:42 -0800</date>
            <delta_ts>2015-02-26 10:22:03 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142967</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNjU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk5IEBA
CisyMDE1LTAyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIFNTQSBzdGFjayBhY2Nlc3NlcyBzaG91bGRuJ3Qgc3BlYWsgb2YgVmFyaWFibGVBY2Nlc3NE
YXRhcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQy
MDM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEgaXMgYSB1c2VmdWwgdGhpbmcgaW4gTG9hZFN0b3JlIGFu
ZCBUaHJlYWRlZENQUywgYnV0IGl0J3MgcHVyZWx5IGhhcm1mdWwgaW4KKyAgICAgICAgU1NBIGJl
Y2F1c2UgeW91IGNhbid0IGNvb2sgdXAgbmV3IFZhcmlhYmxlQWNjZXNzRGF0YXMuIFNvLCBpZiB5
b3Uga25vdyB0aGF0IHlvdSB3YW50IHRvIGxvYWQKKyAgICAgICAgb3Igc3RvcmUgdG8gdGhlIHN0
YWNrLCBhbmQgeW91IGtub3cgd2hhdCBmb3JtYXQgdG8gdXNlIGFzIHdlbGwgYXMgdGhlIGxvY2F0
aW9uLCB0aGVuIHByaW9yIHRvCisgICAgICAgIHRoaXMgcGF0Y2ggeW91IGNvdWxkbid0IGRvIGl0
IHVubGVzcyB5b3UgZm91bmQgc29tZSBleGlzdGluZyBWYXJpYWJsZUFjY2Vzc0RhdGEgdGhhdCBt
YXRjaGVkCisgICAgICAgIHlvdXIgcmVxdWlyZW1lbnRzLiBUaGF0IGNhbiBiZSBhIGhhcmQgdGFz
ay4KKyAgICAgICAgCisgICAgICAgIEl0J3MgYmV0dGVyIGlmIFNTQSBkb2Vzbid0IHNwZWFrIG9m
IFZhcmlhYmxlQWNjZXNzRGF0YXMgYnV0IGluc3RlYWQganVzdCBoYXMgc3RhY2sgYWNjZXNzZXMK
KyAgICAgICAgdGhhdCBzcGVhayBvZiB0aGUgdGhpbmdzIHRoYXQgYSBzdGFjayBhY2Nlc3MgbmVl
ZHM6IGxvY2FsLCBtYWNoaW5lTG9jYWwsIGFuZCBmb3JtYXQuIFRoaXMKKyAgICAgICAgcGF0Y2gg
Y2hhbmdlcyB0aGUgU1NBIHdheSBvZiBhY2Nlc3NpbmcgdGhlIHN0YWNrIHRvIGRvIGp1c3QgdGhh
dC4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkIG1vcmUgSVIgdmFsaWRhdGlvbi4KKworICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJp
emUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9s
ZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAg
ICAqIGRmZy9ERkdGbHVzaEZvcm1hdC5oOgorICAgICAgICAoSlNDOjpERkc6OmlzQ29uY3JldGUp
OgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6
OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5oOgorICAgICAgICAqIGRmZy9ERkdNYXlF
eGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjptYXlFeGl0KToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVmFyaWFibGVBY2Nlc3NEYXRh
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OlN0YWNrQWNj
ZXNzRGF0YTo6U3RhY2tBY2Nlc3NEYXRhKToKKyAgICAgICAgKEpTQzo6REZHOjpTdGFja0FjY2Vz
c0RhdGE6OmZsdXNoZWRBdCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvUHV0
U3RhY2spOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZlcnRUb0dldFN0YWNrKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNVbmxpbmtlZExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpOb2RlOjpoYXNTdGFja0FjY2Vzc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnN0YWNrQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6d2lsbEhhdmVDb2Rl
R2VuT3JPU1IpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9E
RkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpM
b2NhbE9TUkF2YWlsYWJpbGl0eUNhbGN1bGF0b3I6OmV4ZWN1dGVOb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFk
SW1wbCk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRl
KToKKyAgICAgICAgKiBkZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIGRmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGRmZy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwLgorICAgICAgICAo
SlNDOjpERkc6OnBlcmZvcm1QdXRTdGFja1NpbmtpbmcpOgorICAgICAgICAoSlNDOjpERkc6OnBl
cmZvcm1QdXRMb2NhbFNpbmtpbmcpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dExvY2FsU2lua2luZ1BoYXNlLmguCisgICAgICAgICogZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U1NBQ29udmVyc2lvblBoYXNlOjpydW4pOgor
ICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2Fm
ZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdGFja0xheW91dFBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTdGFja0xheW91dFBoYXNlOjpydW4pOgorICAgICAgICAqIGRm
Zy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGVDUFMpOgorICAgICAgICAo
SlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZVNTQSk6CisgICAgICAgICogZGZnL0RGR1ZpcnR1
YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmls
aXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0
bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0U3RhY2sp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0U3RhY2spOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUHV0TG9jYWwp
OiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Lmg6CisgICAgICAgICogdGVzdHMv
c3RyZXNzL21hbnktc3Vua2VuLWxvY2Fscy5qczogQWRkZWQuIFRoaXMgZmFpbHVyZSBtb2RlIHdh
cyBjYXVnaHQgYnkgc29tZSBtaXNjZWxsYW5lb3VzIHRlc3QsIHNvIEkgZmlndXJlZCBJIHNob3Vs
ZCB3cml0ZSBhbiBleHBsaWNpdCB0ZXN0IGZvciBpdC4KKyAgICAgICAgKGZvbyk6CisgICAgICAg
IChiYXIpOgorICAgICAgICAoYmF6KToKKyAgICAgICAgKGZ1enopOgorICAgICAgICAoYnV6eik6
CisKIDIwMTUtMDItMjUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBERkcgYWJzdHJhY3QgaGVhcHMgc2hvdWxkIHJlc3BlY3QgdGhlIGRpZmZlcmVuY2UgYmV0d2Vl
biBoZWFwIGFuZCBzdGFjawpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsNyArMjA2LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NP
VVJDRVMKICAgICBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCiAgICAgZGZn
L0RGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcAogICAgIGRmZy9ERkdQdXJlVmFsdWUuY3BwCi0g
ICAgZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcAorICAgIGRmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAKICAgICBkZmcvREZHUmVzdXJyZWN0aW9uRm9yVmFsaWRhdGlvblBoYXNl
LmNwcAogICAgIGRmZy9ERkdTU0FDYWxjdWxhdG9yLmNwcAogICAgIGRmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw3
ICs0NTEsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHUHVyZVZhbHVlLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU2FmZXBvaW50LmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTcGVjdWxhdGl2ZUpJVC5jcHAiIC8+CkBA
IC0xMTIzLDcgKzExMjMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1By
b21vdGVIZWFwQWNjZXNzLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
UHJvbW90ZWRIZWFwTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdQdXJlVmFsdWUuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdQ
dXRMb2NhbFNpbmtpbmdQaGFzZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZn
XERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxkZmdcREZHUmVnaXN0ZXJCYW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxk
ZmdcREZHUmVnaXN0ZXJTZXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjc0LDYgKzI3NCw4IEBACiAJCTBGMzhCMDE4MTdDRkU3NTUwMEIxNDREMyAvKiBERkdD
b21waWxhdGlvbktleS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYzOEIwMTQxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uS2V5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYzOEIwMTkx
N0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMg
LyogREZHQ29tcGlsYXRpb25Nb2RlLmNwcCAqLzsgfTsKIAkJMEYzOEIwMUExN0NGRTc1NTAwQjE0
NEQzIC8qIERGR0NvbXBpbGF0aW9uTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERGR0NvbXBpbGF0
aW9uTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGM0ExQkY5MUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNBMUJG
NzFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwICovOyB9Owor
CQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0ExQkY4MUE5
RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0FDNzUyMTgzRUExMDQwMDMy
MDI5RiAvKiBTdGFja0FsaWdubWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQUM3NTExODNFQTEwNDAwMzIwMjlGIC8qIFN0YWNrQWxpZ25tZW50
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNBQzc1MzE4OEU1RUM4MDAzMjAyOUYg
LyogRXhpdGluZ0pJVFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNw
cCAqLzsgfTsKQEAgLTE1OTgsOCArMTYwMCw2IEBACiAJCUM0RjRCNkY1MUEwNUM5ODQwMDVDQUI3
NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQzRGNEI2RDcxQTA1Qzc2
RjAwNUNBQjc2IC8qIGdlbmVyYXRlX29iamNfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkgKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQzRG
NEI2RjYxQTA1Qzk4NDAwNUNBQjc2IC8qIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEM0RjRCNkQ4MUEwNUM3
NkYwMDVDQUI3NiAvKiBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkgKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREMwMDAzOTMxOUQ4QkU2RjAwMDIz
RUIwIC8qIERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMDAwMzkwMTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQ
cmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJREMwMDAzOTgxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2Fs
U2lua2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERDMDAwMzk2MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFz
ZS5jcHAgKi87IH07Ci0JCURDMDAwMzk5MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNp
bmtpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gREMwMDAzOTcxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4
RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyog
T3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYw
RTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE4RTNBNTkw
REY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi87IH07
CkBAIC0xOTU2LDYgKzE5NTYsOCBAQAogCQkwRjM4QjAxNDE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZH
Q29tcGlsYXRpb25LZXkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29t
cGlsYXRpb25LZXkuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbktleS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjM4QjAxNTE3Q0ZFNzU1MDBCMTQ0RDMgLyogREZHQ29tcGls
YXRpb25Nb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Nv
bXBpbGF0aW9uTW9kZS5jcHA7IHBhdGggPSBkZmcvREZHQ29tcGlsYXRpb25Nb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzOEIwMTYxN0NGRTc1NTAwQjE0NEQzIC8qIERG
R0NvbXBpbGF0aW9uTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdD
b21waWxhdGlvbk1vZGUuaDsgcGF0aCA9IGRmZy9ERkdDb21waWxhdGlvbk1vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0ExQkY4MUE5
RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0FDNzUxMTgzRUExMDQwMDMyMDI5RiAvKiBTdGFja0FsaWdubWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTdGFja0FsaWdubWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNBQzc1MzE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXhpdGluZ0pJVFR5cGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjNBMTcxNTNFNjhFRjAwM0VEMEZGIC8qIERG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMzAzLDgg
KzMzMDUsNiBAQAogCQlEMjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3
OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEYXRlQ29udmVyc2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzAwMDM5
MDE5RDhCRTZGMDAwMjNFQjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBh
dGggPSBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlEQzAwMDM5NjE5REJBNzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5n
UGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHV0TG9j
YWxTaW5raW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJREMwMDAzOTcxOURCQTcwNjAwMDIzRUIw
IC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHUHV0TG9jYWxT
aW5raW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTEyNEE4RjUwRTU1
NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE9wYXF1ZUpTU3RyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcGFxdWVKU1N0cmluZy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNzg2MzNGMEQ5QkVDMDAwMEQ3NEU3NSAvKiBJbml0aWFs
aXplVGhyZWFkaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluaXRpYWxp
emVUaHJlYWRpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4ODIsOCArNDg4
Miw4IEBACiAJCQkJMEZBQTNFMDgxOUQwQzJDQjAwRkFDOUUyIC8qIERGR1Byb21vdGVIZWFwQWNj
ZXNzLmggKi8sCiAJCQkJMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5j
cHAgKi8sCiAJCQkJMEZCMTc2NUYxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oICov
LAotCQkJCURDMDAwMzk2MTlEQkE3MDYwMDAyM0VCMCAvKiBERkdQdXRMb2NhbFNpbmtpbmdQaGFz
ZS5jcHAgKi8sCi0JCQkJREMwMDAzOTcxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lu
a2luZ1BoYXNlLmggKi8sCisJCQkJMEYzQTFCRjcxQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmNwcCAqLywKKwkJCQkwRjNBMUJGODFBOUVDQjdEMDAwREUwMUEgLyog
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCAqLywKIAkJCQk4NkVDOURDMTEzMjhERjgyMDAyQjJB
RDcgLyogREZHUmVnaXN0ZXJCYW5rLmggKi8sCiAJCQkJMEY2NjZFQ0ExODM2QjM3RTAwRDAxN0Yx
IC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEY2NjZF
Q0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZhbGlkYXRpb25QaGFzZS5o
ICovLApAQCAtNjAwOCw3ICs2MDA4LDYgQEAKIAkJCQlCQzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI5MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBKU1N0cmluZ1JlZkNGLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTI4RDRBODE3N0I3
MUM4MDAwN0ZBM0MgLyogSlNTdHJpbmdSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKLQkJCQlE
QzAwMDM5OTE5REJBNzA2MDAwMjNFQjAgLyogREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyQTBFMTZGNUNEMDBCMzQ0NjAgLyog
SlNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGQjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNUeXBlZEFycmF5Q29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYzMTksNiArNjMx
OCw3IEBACiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2ODhDQjE2MEVEMTJCNEUwMDFENjQ5RiAvKiBYODZB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1ODQwRTJBMTg3Q0E3NTkwMDg0M0IxMCAv
KiB4eGQucGwgaW4gSGVhZGVycyAqLywKKwkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyog
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5MTJE
Qzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJB
MzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njcw
NEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODg1
LDcgKzY4ODUsNiBAQAogCQkJCUE3RDg5Q0Y1MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdDcml0aWNh
bEVkZ2VCcmVha2luZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU5MTRFRjkw
QTYwMEM3MjUzMiAvKiBERkdDU0VQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQzc3
MjE2RTEyRjcxMDAzOEQ5NzYgLyogREZHRENFUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJ
REMwMDAzOTgxOURCQTcwNjAwMDIzRUIwIC8qIERGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEYyQjk5MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJDMEY3Q0QxN0JCRkM1QjAwNDY0
RkU0IC8qIERGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkU4
NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNjkwNiw2ICs2OTA1LDcgQEAKIAkJCQkwRkQxMjAzMzFBOEM4NUJEMDAwRjUy
ODAgLyogRlRMSlNDYWxsVmFyYXJncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5NjE3
RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
RDg5Q0Y3MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdGbHVzaEZvcm1hdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRjNBMUJGOTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAv
KiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBC
QUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw2ICsxNjcsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgR2V0
U3RhY2s6IHsKKyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nl
c3NEYXRhKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxl
cygpLm9wZXJhbmQoZGF0YS0+bG9jYWwpOworICAgICAgICAvLyBUaGUgdmFsdWUgaW4gdGhlIGxv
Y2FsIHNob3VsZCBhbHJlYWR5IGJlIGNoZWNrZWQuCisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbm9kZSwgdmFsdWUuaXNUeXBlKHR5cGVGaWx0ZXJGb3IoZGF0YS0+Zm9ybWF0KSkpOworICAg
ICAgICBpZiAodmFsdWUudmFsdWUoKSkKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25z
dGFudHModHJ1ZSk7CisgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6IHsKICAgICAg
ICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChub2Rl
LT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpOwogICAgICAgICBpZiAodmFsdWUudmFsdWUoKSkK
QEAgLTE3NSw5ICsxODYsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU2V0TG9jYWw6
Ci0gICAgY2FzZSBQdXRMb2NhbDogewotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQobm9kZS0+bG9jYWwoKS5vZmZzZXQoKSkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAorICAgIGNhc2UgUHV0U3RhY2s6IHsKKyAgICAgICAgbV9zdGF0ZS52
YXJpYWJsZXMoKS5vcGVyYW5kKG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTE4OCw3ICsyMDMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBLaWxsTG9jYWw6IHsK
KyAgICBjYXNlIEtpbGxTdGFjazogewogICAgICAgICAvLyBUaGlzIGlzIGp1c3QgYSBoaW50IHRl
bGxpbmcgdXMgdGhhdCB0aGUgT1NSIHN0YXRlIG9mIHRoZSBsb2NhbCBpcyBubyBsb25nZXIgaW5z
aWRlIHRoZQogICAgICAgICAvLyBmbHVzaGVkIGRhdGEuCiAgICAgICAgIGJyZWFrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MDU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZQogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmll
SGludDoKLSAgICBjYXNlIEtpbGxMb2NhbDoKKyAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNl
IFVwc2lsb246CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkBAIC0zOTks
MTEgKzM5OSwyNCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICBjYXNlIFB1
dExvY2FsOgogICAgICAgICB3cml0ZShBYnN0cmFjdEhlYXAoVmFyaWFibGVzLCBub2RlLT5sb2Nh
bCgpKSk7CiAgICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIEFic3RyYWN0SGVh
cChWYXJpYWJsZXMsIG5vZGUtPmxvY2FsKCkpKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIEdldFN0YWNrOiB7CisgICAgICAgIEFi
c3RyYWN0SGVhcCBoZWFwKFZhcmlhYmxlcywgbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2Fs
KTsKKyAgICAgICAgcmVhZChoZWFwKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihWYXJpYWJs
ZUxvYywgaGVhcCksIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAg
ICBjYXNlIFB1dFN0YWNrOiB7CisgICAgICAgIEFic3RyYWN0SGVhcCBoZWFwKFZhcmlhYmxlcywg
bm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKTsKKyAgICAgICAgd3JpdGUoaGVhcCk7Cisg
ICAgICAgIGRlZihIZWFwTG9jYXRpb24oVmFyaWFibGVMb2MsIGhlYXApLCBub2RlLT5jaGlsZDEo
KS5ub2RlKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKICAgICBjYXNlIExv
YWRWYXJhcmdzOgogICAgICAgICAvLyBUaGlzIGFjdHVhbGx5IHdyaXRlcyB0byBsb2NhbCB2YXJp
YWJsZXMgYXMgd2VsbC4gQnV0IHdoZW4gaXQgcmVhZHMgdGhlIGFycmF5LCBpdCBkb2VzCiAgICAg
ICAgIC8vIHNvIGluIGEgd2F5IHRoYXQgbWF5IHRyaWdnZXIgZ2V0dGVycyBvciB2YXJpb3VzIHRy
YXBzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25z
dGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTcsNyArMzk3LDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgbm9kZS0+Y2hpbGRyZW4p
OwogICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb0dldFN0YWNrKG1fZ3JhcGgubV9z
dGFja0FjY2Vzc0RhdGEuYWRkKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKSwgRmx1c2hlZEpTVmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9HZXRMb2NhbFVubGlua2VkKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDggKzIwNiw5IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dEJ5T2Zmc2V0
SGludDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlSGludDoKLSAgICBjYXNlIFB1dExvY2FsOgotICAgIGNhc2UgS2lsbExvY2FsOgorICAg
IGNhc2UgUHV0U3RhY2s6CisgICAgY2FzZSBLaWxsU3RhY2s6CisgICAgY2FzZSBHZXRTdGFjazoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lv
biAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4LDggKzEwNTgsOSBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZUhp
bnQ6CiAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgICAgIGNhc2UgUHV0
TG9jYWw6Ci0gICAgICAgIGNhc2UgS2lsbExvY2FsOgorICAgICAgICBjYXNlIFB1dFN0YWNrOgor
ICAgICAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgY2FzZSBHZXRTdGFjazoKICAgICAgICAg
ICAgIC8vIFRoZXNlIGFyZSBqdXN0IG5vZGVzIHRoYXQgd2UgZG9uJ3QgY3VycmVudGx5IGV4cGVj
dCB0byBzZWUgZHVyaW5nIGZpeHVwLgogICAgICAgICAgICAgLy8gSWYgd2UgZXZlciB3YW50ZWQg
dG8gaW5zZXJ0IHRoZW0gcHJpb3IgdG8gZml4dXAsIHRoZW4gd2UganVzdCBoYXZlIHRvIGNyZWF0
ZQogICAgICAgICAgICAgLy8gZml4dXAgcnVsZXMgZm9yIHRoZW0uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxODA1ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw2ICsxMzQsMTEgQEAgaW5saW5lIEZsdXNoRm9ybWF0IG1lcmdlKEZsdXNoRm9ybWF0
IGEsIAogICAgIHJldHVybiBDb25mbGljdGluZ0ZsdXNoOwogfQogCitpbmxpbmUgYm9vbCBpc0Nv
bmNyZXRlKEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICByZXR1cm4gZm9ybWF0ICE9IERlYWRG
bHVzaCAmJiBmb3JtYXQgIT0gQ29uZmxpY3RpbmdGbHVzaDsKK30KKwogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDYgKzI4MiwxMyBAQCB2
b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAibWFjaGluZToiLCBvcGVyYW5kKTsKICAgICAgICAgfQogICAgIH0K
KyAgICBpZiAobm9kZS0+aGFzU3RhY2tBY2Nlc3NEYXRhKCkpIHsKKyAgICAgICAgU3RhY2tBY2Nl
c3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7CisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgZGF0YS0+bG9jYWwpOworICAgICAgICBpZiAoZGF0YS0+bWFjaGluZUxvY2FsLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgIm1hY2hpbmU6IiwgZGF0YS0+
bWFjaGluZUxvY2FsKTsKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBkYXRhLT5mb3JtYXQpOwor
ICAgIH0KICAgICBpZiAobm9kZS0+aGFzVW5saW5rZWRMb2NhbCgpKSAKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBub2RlLT51bmxpbmtlZExvY2FsKCkpOwogICAgIGlmIChub2RlLT5oYXNVbmxp
bmtlZE1hY2hpbmVMb2NhbCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4Myw3ICs3ODMsNyBAQCBwdWJsaWM6CiAgICAgLy8g
dGhhdCBzdXJ2aXZlZCBEQ0UuIEFsbCBvZiB0aGVtIGV4Y2VwdCBtYXliZSAidGhpcyIgd2lsbCBz
dXJ2aXZlIERDRSwgYmVjYXVzZSBvZiB0aGUgRmx1c2gKICAgICAvLyBub2Rlcy4KICAgICAvLwot
ICAgIC8vIEluIFNTQSwgdGhpcyBpcyBhbGwgb2YgdGhlIEdldExvY2FsIG5vZGVzIGZvciB0aGUg
YXJndW1lbnRzIGluIHRoZSBtYWNoaW5lIGNvZGUgYmxvY2sgdGhhdAorICAgIC8vIEluIFNTQSwg
dGhpcyBpcyBhbGwgb2YgdGhlIEdldFN0YWNrIG5vZGVzIGZvciB0aGUgYXJndW1lbnRzIGluIHRo
ZSBtYWNoaW5lIGNvZGUgYmxvY2sgdGhhdAogICAgIC8vIG1heSBoYXZlIHNvbWUgc3BlY3VsYXRp
b24gaW4gdGhlIHByb2xvZ3VlIGFuZCBzdXJ2aXZlZCBEQ0UuIE5vdGUgdGhhdCB0byBnZXQgdGhl
IHNwZWN1bGF0aW9uCiAgICAgLy8gZm9yIGFuIGFyZ3VtZW50IGluIFNTQSwgeW91IG11c3QgdXNl
IG1fYXJndW1lbnRGb3JtYXRzLCBzaW5jZSB3ZSBzdGlsbCBoYXZlIHRvIHNwZWN1bGF0ZQogICAg
IC8vIGV2ZW4gaWYgdGhlIGFyZ3VtZW50IGdvdCBraWxsZWQuIEZvciBleGFtcGxlOgpAQCAtNzk0
LDcgKzc5NCw3IEBAIHB1YmxpYzoKICAgICAvLwogICAgIC8vIEFzc3VtZSB0aGF0IHggaXMgYWx3
YXlzIGludCBkdXJpbmcgcHJvZmlsaW5nLiBUaGUgQXJpdGhBZGQgZm9yICJ4ICsgMSIgd2lsbCBi
ZSBkZWFkIGFuZCB3aWxsCiAgICAgLy8gaGF2ZSBhIHByb3ZlbiBjaGVjayBmb3IgdGhlIGVkZ2Ug
dG8gIngiLiBTbywgd2Ugd2lsbCBub3QgaW5zZXJ0IGEgQ2hlY2sgbm9kZSBhbmQgd2Ugd2lsbAot
ICAgIC8vIGtpbGwgdGhlIEdldExvY2FsIGZvciAieCIuIEJ1dCwgd2UgbXVzdCBkbyB0aGUgaW50
IGNoZWNrIGluIHRoZSBwcm9nb2x1ZSwgYmVjYXVzZSB0aGF0J3MgdGhlCisgICAgLy8ga2lsbCB0
aGUgR2V0U3RhY2sgZm9yICJ4Ii4gQnV0LCB3ZSBtdXN0IGRvIHRoZSBpbnQgY2hlY2sgaW4gdGhl
IHByb2dvbHVlLCBiZWNhdXNlIHRoYXQncyB0aGUKICAgICAvLyB0aGluZyB3ZSB1c2VkIHRvIGFs
bG93IERDRSBvZiBBcml0aEFkZC4gT3RoZXJ3aXNlIHRoZSBhZGQgY291bGQgYmUgaW1wdXJlOgog
ICAgIC8vCiAgICAgLy8gICAgIHZhciBvID0gewpAQCAtODIxLDYgKzgyMSw3IEBAIHB1YmxpYzoK
ICAgICBCYWc8T2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YT4gbV9vYmplY3RNYXRlcmlhbGl6YXRp
b25EYXRhOwogICAgIEJhZzxDYWxsVmFyYXJnc0RhdGE+IG1fY2FsbFZhcmFyZ3NEYXRhOwogICAg
IEJhZzxMb2FkVmFyYXJnc0RhdGE+IG1fbG9hZFZhcmFyZ3NEYXRhOworICAgIEJhZzxTdGFja0Fj
Y2Vzc0RhdGE+IG1fc3RhY2tBY2Nlc3NEYXRhOwogICAgIFZlY3RvcjxJbmxpbmVWYXJpYWJsZURh
dGEsIDQ+IG1faW5saW5lVmFyaWFibGVEYXRhOwogICAgIEhhc2hNYXA8Q29kZUJsb2NrKiwgc3Rk
Ojp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPj4gbV9ieXRlY29kZUxpdmVuZXNzOwog
ICAgIGJvb2wgbV9oYXNBcmd1bWVudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDkgQEAgYm9v
bCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dFN0cnVjdHVy
ZUhpbnQ6CiAgICAgY2FzZSBQdXRCeU9mZnNldEhpbnQ6CiAgICAgY2FzZSBQaGFudG9tTmV3T2Jq
ZWN0OgotICAgIGNhc2UgUHV0TG9jYWw6Ci0gICAgY2FzZSBLaWxsTG9jYWw6CisgICAgY2FzZSBQ
dXRTdGFjazoKKyAgICBjYXNlIEtpbGxTdGFjazoKKyAgICBjYXNlIEdldFN0YWNrOgogICAgIGNh
c2UgR2V0Q2FsbGVlOgogICAgIGNhc2UgR2V0U2NvcGU6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHJldmlzaW9uIDE4MDU4
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDYgQEAgYm9vbCBOb2RlOjpoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoR3Jh
cGgmIAogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBo
YW50b21Mb2NhbDoKLSAgICBjYXNlIFB1dExvY2FsOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw2ICsxOTcsMjUgQEAgc3RydWN0
IExvYWRWYXJhcmdzRGF0YSB7CiAgICAgdW5zaWduZWQgbGltaXQ7IC8vIE1heGltdW0gbnVtYmVy
IG9mIGVsZW1lbnRzIHRvIGxvYWQuIEluY2x1ZGVzICJ0aGlzIi4KIH07CiAKK3N0cnVjdCBTdGFj
a0FjY2Vzc0RhdGEgeworICAgIFN0YWNrQWNjZXNzRGF0YSgpCisgICAgICAgIDogZm9ybWF0KERl
YWRGbHVzaCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0YWNrQWNjZXNzRGF0YShWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwsIEZsdXNoRm9ybWF0IGZvcm1hdCkKKyAgICAgICAgOiBsb2NhbChsb2Nh
bCkKKyAgICAgICAgLCBmb3JtYXQoZm9ybWF0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsOworICAgIFZpcnR1YWxSZWdpc3RlciBtYWNoaW5lTG9jYWw7Cisg
ICAgRmx1c2hGb3JtYXQgZm9ybWF0OworICAgIAorICAgIEZsdXNoZWRBdCBmbHVzaGVkQXQoKSB7
IHJldHVybiBGbHVzaGVkQXQoZm9ybWF0LCBtYWNoaW5lTG9jYWwpOyB9Cit9OworCiAvLyBUaGlz
IHR5cGUgdXNlZCBpbiBwYXNzaW5nIGFuIGltbWVkaWF0ZSBhcmd1bWVudCB0byBOb2RlIGNvbnN0
cnVjdG9yOwogLy8gZGlzdGluZ3Vpc2hlcyBhbiBpbW1lZGlhdGUgdmFsdWUgKHR5cGljYWxseSBh
biBpbmRleCBpbnRvIGEgQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlIC0gCiAvLyBhIGNvbnN0YW50
IGluZGV4LCBhcmd1bWVudCwgb3IgaWRlbnRpZmllcikgZnJvbSBhIE5vZGUqLgpAQCAtNDg0LDYg
KzUwMywyMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgY29udmVydFRvUHV0U3RhY2soU3RhY2tBY2Nlc3NEYXRhKiBkYXRh
KQorICAgIHsKKyAgICAgICAgbV9vcCA9IFB1dFN0YWNrOworICAgICAgICBBU1NFUlQobV9mbGFn
cyAmIE5vZGVNdXN0R2VuZXJhdGUpOworICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KGRhdGEpOworICAgICAgICBtX29wSW5mbzIgPSAwOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbnZlcnRUb0dldFN0YWNrKFN0YWNrQWNjZXNzRGF0YSogZGF0YSkKKyAgICB7Cisg
ICAgICAgIG1fb3AgPSBHZXRTdGFjazsKKyAgICAgICAgbV9mbGFncyAmPSB+Tm9kZU11c3RHZW5l
cmF0ZTsKKyAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihkYXRhKTsK
KyAgICAgICAgbV9vcEluZm8yID0gMDsKKyAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldChTdG9yYWdlQWNjZXNzRGF0YSYg
ZGF0YSwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJ
ZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCB8fCBtX29wID09IE11bHRpR2V0QnlPZmZzZXQpOwpA
QCAtNzE3LDcgKzc1Myw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBFeHRyYWN0T1NS
RW50cnlMb2NhbDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6Ci0gICAgICAgIGNhc2UgS2lsbExvY2FsOgorICAgICAgICBjYXNlIEtpbGxTdGFjazoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNzQ3LDYgKzc4MywyMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJl
dHVybiBWaXJ0dWFsUmVnaXN0ZXIobV9vcEluZm8yKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBo
YXNTdGFja0FjY2Vzc0RhdGEoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAg
ICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIGNhc2UgR2V0U3RhY2s6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBTdGFja0FjY2Vzc0RhdGEqIHN0YWNrQWNjZXNz
RGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU3RhY2tBY2Nlc3NEYXRhKCkpOworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrQWNjZXNzRGF0YSo+KG1fb3BJbmZvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCBoYXNQaGkoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkg
PT0gVXBzaWxvbjsKQEAgLTE0MjgsOCArMTQ4MSw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFNldExvY2FsOgotICAgICAgICBj
YXNlIFB1dExvY2FsOgotICAgICAgICBjYXNlIEtpbGxMb2NhbDoKICAgICAgICAgY2FzZSBNb3ZI
aW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CiAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogICAgIC8qIGJldHRlciBuYW1lcyBmb3IgYSBsb3Qgb2YgdGhlc2UuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMDcgKi9cCiAgICAgbWFjcm8oR2V0
TG9jYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKFNldExvY2FsLCAwKSBcCi0gICAgbWFj
cm8oUHV0TG9jYWwsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhLaWxsTG9jYWwsIE5v
ZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBcCisgICAgbWFjcm8oUHV0U3RhY2ssIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKKyAgICBtYWNybyhLaWxsU3RhY2ssIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBt
YWNybyhHZXRTdGFjaywgTm9kZVJlc3VsdEpTKSBcCisgICAgXAogICAgIG1hY3JvKE1vdkhpbnQs
IDApIFwKICAgICBtYWNybyhab21iaWVIaW50LCAwKSBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9k
ZU11c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JB
dmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCShyZXZpc2lv
biAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkF2YWlsYWJpbGl0
eUFuYWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMjEgKzEyOCwyMCBAQCB2
b2lkIExvY2FsT1NSQXZhaWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZW5kCiB2b2lkIExvY2FsT1NSQXZh
aWxhYmlsaXR5Q2FsY3VsYXRvcjo6ZXhlY3V0ZU5vZGUoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICBjYXNlIFB1dExvY2FsOiB7Ci0gICAgICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgbV9hdmFpbGFiaWxpdHkubV9sb2NhbHMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkuc2V0
Rmx1c2godmFyaWFibGUtPmZsdXNoZWRBdCgpKTsKKyAgICBjYXNlIFB1dFN0YWNrOiB7CisgICAg
ICAgIFN0YWNrQWNjZXNzRGF0YSogZGF0YSA9IG5vZGUtPnN0YWNrQWNjZXNzRGF0YSgpOworICAg
ICAgICBtX2F2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKGRhdGEtPmxvY2FsKS5zZXRGbHVz
aChkYXRhLT5mbHVzaGVkQXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0g
ICAgY2FzZSBLaWxsTG9jYWw6IHsKKyAgICBjYXNlIEtpbGxTdGFjazogewogICAgICAgICBtX2F2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkuc2V0Rmx1
c2goRmx1c2hlZEF0KENvbmZsaWN0aW5nRmx1c2gpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
Ci0gICAgY2FzZSBHZXRMb2NhbDogewotICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIG1fYXZhaWxhYmlsaXR5
Lm1fbG9jYWxzLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0KLSAgICAgICAgICAgIEF2YWls
YWJpbGl0eShub2RlLCB2YXJpYWJsZS0+Zmx1c2hlZEF0KCkpOworICAgIGNhc2UgR2V0U3RhY2s6
IHsKKyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRh
KCk7CisgICAgICAgIG1fYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmQoZGF0YS0+bG9jYWwp
ID0gQXZhaWxhYmlsaXR5KG5vZGUsIGRhdGEtPmZsdXNoZWRBdCgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgIkRGR1BoYW50b21SZW1v
dmFsUGhhc2UuaCIKICNpbmNsdWRlICJERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuaCIKICNp
bmNsdWRlICJERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5oIgotI2luY2x1ZGUgIkRGR1B1
dExvY2FsU2lua2luZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHV0U3RhY2tTaW5raW5nUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdSZXN1cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaCIKICNpbmNs
dWRlICJERkdTU0FDb252ZXJzaW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdTU0FMb3dlcmluZ1Bo
YXNlLmgiCkBAIC0zMjQsNyArMzI0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNv
bXBpbGVJblRocgogICAgICAgICBwZXJmb3JtQ1BTUmV0aHJlYWRpbmcoZGZnKTsKICAgICAgICAg
cGVyZm9ybVNTQUNvbnZlcnNpb24oZGZnKTsKICAgICAgICAgcGVyZm9ybVNTQUxvd2VyaW5nKGRm
Zyk7Ci0gICAgICAgIHBlcmZvcm1QdXRMb2NhbFNpbmtpbmcoZGZnKTsKKyAgICAgICAgcGVyZm9y
bVB1dFN0YWNrU2lua2luZyhkZmcpOwogICAgICAgICBwZXJmb3JtR2xvYmFsQ1NFKGRmZyk7CiAg
ICAgICAgIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKGRmZyk7CiAgICAgICAgIHBlcmZvcm1DRkEo
ZGZnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODA1ODApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDggKzU0MCw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlSGlu
dDoKICAgICAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKLSAgICAgICAgY2FzZSBQdXRM
b2NhbDoKLSAgICAgICAgY2FzZSBLaWxsTG9jYWw6IHsKKyAgICAgICAgY2FzZSBQdXRTdGFjazoK
KyAgICAgICAgY2FzZSBLaWxsU3RhY2s6CisgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKICAgICAg
ICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJsZSBhdCB0aGlzIHN0YWdl
IG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgYnkgZml4dXAo
KSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9j
YWxTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1OTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiREZHUHV0TG9j
YWxTaW5raW5nUGhhc2UuaCIKLQotI2lmIEVOQUJMRShERkdfSklUKQotCi0jaW5jbHVkZSAiREZH
QmxvY2tNYXBJbmxpbmVzLmgiCi0jaW5jbHVkZSAiREZHR3JhcGguaCIKLSNpbmNsdWRlICJERkdJ
bnNlcnRpb25TZXQuaCIKLSNpbmNsdWRlICJERkdQaGFzZS5oIgotI2luY2x1ZGUgIkRGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaCIKLSNpbmNsdWRlICJERkdTU0FDYWxjdWxhdG9yLmgiCi0jaW5j
bHVkZSAiREZHVmFsaWRhdGUuaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
T3BlcmFuZHNJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKLQot
bmFtZXNwYWNlIHsKLQotYm9vbCB2ZXJib3NlID0gZmFsc2U7Ci0KLWNsYXNzIFZhcmlhYmxlRGVm
ZXJyYWwgewotcHVibGljOgotICAgIFZhcmlhYmxlRGVmZXJyYWwoVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG51bGxwdHIpCi0gICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBWYXJpYWJsZURlZmVycmFsIGNvbmZsaWN0KCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBWYXJpYWJsZURlZmVycmFsKGNvbmZsaWN0TWFya2VyKCkp
OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3Zh
cmlhYmxlOyB9Ci0gICAgCi0gICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEh
KnRoaXMgJiYgIWlzQ29uZmxpY3QoKTsgfQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlKCkpOwot
ICAgICAgICByZXR1cm4gbV92YXJpYWJsZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NvbmZs
aWN0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IGNvbmZsaWN0
TWFya2VyKCk7Ci0gICAgfQotICAgIAotICAgIFZhcmlhYmxlRGVmZXJyYWwgbWVyZ2UoVmFyaWFi
bGVEZWZlcnJhbCBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgqdGhpcyA9PSBvdGhl
ciB8fCAhb3RoZXIpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIGlmICghKnRo
aXMpCi0gICAgICAgICAgICByZXR1cm4gb3RoZXI7Ci0gICAgICAgIHJldHVybiBjb25mbGljdCgp
OwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVEZWZlcnJhbCBvdGhl
cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFy
aWFibGU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKCEqdGhpcykKLSAgICAgICAgICAgIG91dC5wcmludCgiLSIp
OwotICAgICAgICBlbHNlIGlmIChpc0NvbmZsaWN0KCkpCi0gICAgICAgICAgICBvdXQucHJpbnQo
IkNvbmZsaWN0Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChSYXdQb2lu
dGVyKG1fdmFyaWFibGUpKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXAo
b3V0KTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIGNvbmZsaWN0TWFya2VyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
VmFyaWFibGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKLSAgICB9Ci0g
ICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBtX3ZhcmlhYmxlOwotfTsKLQotY2xhc3MgUHV0
TG9jYWxTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewotcHVibGljOgotICAgIFB1dExvY2Fs
U2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgIlB1dExv
Y2FsIHNpbmtpbmciKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBydW4oKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGUgcHJvYmxlbXMgb2YgdGhpcyBhcHByb2FjaCBp
cyB0aGF0IGl0IHdpbGwgY3JlYXRlIGEgZHVwbGljYXRlIFBoaSBncmFwaAotICAgICAgICAvLyBm
b3Igc3Vua2VuIFB1dExvY2FscyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJlc3RpbmcgY29udHJv
bCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQotICAgICAgICAvLyB2YWx1ZSBiZWluZyBQdXRM
b2NhbCdkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBjb2RlLiBXZSBjb3VsZCB3
b3JrIGFyb3VuZCB0aGlzCi0gICAgICAgIC8vIGJ5IGRvaW5nIHRoZSBzaW5raW5nIG92ZXIgQ1BT
LCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBzbWFydCBob2lzdGluZy4gSXQncyBhbHNv
Ci0gICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1cGxpY2F0ZSBQaGkgZ3JhcGggY2FuIGJl
IGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBiZSBiZXN0IGlmIHdlCi0gICAgICAgIC8v
IGNvdWxkIG9ic2VydmUgdGhhdCB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIGdyYXBoIGluIHBsYWNl
IHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEluCi0gICAgICAgIC8vIHByaW5jaXBsZSBpZiB3ZSBo
YXZlIGEgcmVxdWVzdCB0byBwbGFjZSBhIFBoaSBhdCBhIHBhcnRpY3VsYXIgcGxhY2UsIHdlIGNv
dWxkIGp1c3QgY2hlY2sKLSAgICAgICAgLy8gaWYgdGhlcmUgaXMgYWxyZWFkeSBhIFBoaSB0aGF0
IGRvZXMgd2hhdCB3ZSB3YW50LiBCZWNhdXNlIFB1dExvY2FsU2lua2luZ1BoYXNlIHJ1bnMganVz
dAotICAgICAgICAvLyBhZnRlciBTU0EgY29udmVyc2lvbiwgd2UgaGF2ZSBhbG1vc3QgYSBndWFy
YW50ZWUgdGhhdCB0aGUgUGhpIGdyYXBoIHdlIHByb2R1Y2UgaGVyZSB3b3VsZAotICAgICAgICAv
LyBiZSB0cml2aWFsbHkgcmVkdW5kYW50IHRvIHRoZSBvbmUgd2UgYWxyZWFkeSBoYXZlLgotICAg
ICAgICAKLSAgICAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgICAgIGRhdGFMb2coIkdyYXBo
IGJlZm9yZSBQdXRMb2NhbCBzaW5raW5nOlxuIik7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU1NBQ2FsY3VsYXRvciBzc2FDYWxjdWxh
dG9yKG1fZ3JhcGgpOwotICAgICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgp
OwotICAgICAgICAKLSAgICAgICAgLy8gRmlyc3QgZmlndXJlIG91dCB3aGVyZSB2YXJpb3VzIGxv
Y2FscyBhcmUgbGl2ZS4KLSAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Ym9vbD4+IGxpdmVBdEhl
YWQobV9ncmFwaCk7Ci0gICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWls
KG1fZ3JhcGgpOwotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Z3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgbGl2ZUF0SGVhZFti
bG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhl
YWQpOwotICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVy
YW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNlKTsKLSAgICAgICAgICAgIGxpdmVBdFRh
aWxbYmxvY2tdLmZpbGwoZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBib29s
IGNoYW5nZWQ7Ci0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwotICAgICAgICAgICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJvb2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Js
b2NrXTsKLSAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5z
aXplKCk7IG5vZGVJbmRleC0tOykgewotICAgICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiTGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBs
aXZlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1
dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIsIG9wZXJhbmQs
ICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxp
dmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH07Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVy
aXplKAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxl
ciwgZXNjYXBlSGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UgPT0gbm9kZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0LgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0TG9jYWwpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgfSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChsaXZlID09IGxpdmVBdEhlYWRbYmxvY2tdKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBsaXZlQXRIZWFkW2Js
b2NrXSA9IGxpdmU7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJs
b2NrLT5wcmVkZWNlc3NvcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGxpdmUuc2l6ZSgpOyBpLS07KQotICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZUF0VGFpbFtw
cmVkZWNlc3Nvcl1baV0gfD0gbGl2ZVtpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBBbGwgb2YgdGhlIGFyZ3VtZW50cyBzaG91bGQgYmUgbGl2ZSBhdCBoZWFkIG9m
IHJvb3QuIE5vdGUgdGhhdCB3ZSBtYXkgZmluZCB0aGF0IHNvbWUKLSAgICAgICAgLy8gbG9jYWxz
IGFyZSBsaXZlIGF0IGhlYWQgb2Ygcm9vdC4gVGhpcyBzZWVtcyB3cm9uZyBidXQgaXNuJ3QuIFRo
aXMgd2lsbCBoYXBwZW4gZm9yIGV4YW1wbGUKLSAgICAgICAgLy8gaWYgdGhlIGZ1bmN0aW9uIGFj
Y2Vzc2VzIGNsb3N1cmUgdmFyaWFibGUgIzQyIGZvciBzb21lIG90aGVyIGZ1bmN0aW9uIGFuZCB3
ZSBlaXRoZXIgZG9uJ3QKLSAgICAgICAgLy8gaGF2ZSB2YXJpYWJsZSAjNDIgYXQgYWxsIG9yIHdl
IGhhdmVuJ3Qgc2V0IGl0IGF0IHJvb3QsIGZvciB3aGF0ZXZlciByZWFzb24uIEJhc2ljYWxseSB0
aGlzCi0gICAgICAgIC8vIGFyaXNlcyBzaW5jZSBvdXIgYWxpYXNpbmcgZm9yIGNsb3N1cmUgdmFy
aWFibGVzIGlzIGNvbnNlcnZhdGl2ZWx5IGJhc2VkIG9uIHZhcmlhYmxlIG51bWJlcgotICAgICAg
ICAvLyBhbmQgaWdub3JlcyB0aGUgb3duaW5nIHN5bWJvbCB0YWJsZS4gV2Ugc2hvdWxkIHByb2Jh
Ymx5IGZpeCB0aGlzIGV2ZW50dWFsbHkgYW5kIG1ha2Ugb3VyCi0gICAgICAgIC8vIGFsaWFzaW5n
IG1vcmUgcHJlY2lzZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gRm9yIG91ciBwdXJwb3NlcyBo
ZXJlLCB0aGUgaW1wcmVjaXNpb24gaW4gdGhlIGFsaWFzaW5nIGlzIGhhcm1sZXNzLiBJdCBqdXN0
IG1lYW5zIHRoYXQgd2UKLSAgICAgICAgLy8gbWF5IG5vdCBkbyBhcyBtdWNoIFBoaSBwcnVuaW5n
IGFzIHdlIHdhbnRlZC4KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRl
eCgwKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICAgICAgREZHX0FTU0VSVCht
X2dyYXBoLCBudWxscHRyLCBsaXZlQXRIZWFkLmF0SW5kZXgoMCkuYXJndW1lbnQoaSkpOwotICAg
ICAgICAKLSAgICAgICAgLy8gTmV4dCBpZGVudGlmeSB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNp
bmsgUHV0TG9jYWxzIHRvLiBXZSBzYXkgdGhhdCB0aGVyZSBpcyBhIGRlZmVycmVkCi0gICAgICAg
IC8vIGZsdXNoIGlmIHdlIGhhZCBhIFB1dExvY2FsIHdpdGggYSBnaXZlbiBWYXJpYWJsZUFjY2Vz
c0RhdGEqIGJ1dCBpdCBoYXNuJ3QgYmVlbgotICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LiBE
ZWZlcnJhbHMgaGF2ZSB0aGUgZm9sbG93aW5nIGxhdHRpY2U7IGJ1dCBpdCdzIHdvcnRoIG5vdGlu
ZyB0aGF0IHRoZQotICAgICAgICAvLyBUT1AgcGFydCBvZiB0aGUgbGF0dGljZSBzZXJ2ZXMgYW4g
ZW50aXJlbHkgZGlmZmVyZW50IHB1cnBvc2UgdGhhbiB0aGUgcmVzdCBvZiB0aGUgbGF0dGljZToK
LSAgICAgICAgLy8gaXQganVzdCBtZWFucyB0aGF0IHdlJ3JlIGluIGEgcmVnaW9uIG9mIGNvZGUg
d2hlcmUgbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gcmVseWluZyBvbiB0aGUKLSAgICAgICAgLy8g
dmFsdWUuIFRoZSByZXN0IG9mIHRoZSBsYXR0aWNlIG1lYW5zIHRoYXQgd2UgZWl0aGVyIGhhdmUg
YSBQdXRMb2NhbCB0aGF0IGlzIGRlZmVycmVkIChpLmUuCi0gICAgICAgIC8vIHN0aWxsIG5lZWRz
IHRvIGJlIGV4ZWN1dGVkKSBvciB0aGVyZSBpc24ndCBvbmUgKGJlY2F1c2Ugd2UndmUgYWxyYWVk
eSBleGVjdXRlZCBpdCkuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIEJvdHRvbToKLSAgICAgICAg
Ly8gICAgIEluc3RhbnRpYXRlZCBhcyBWYXJpYWJsZURlZmVycmFsKCkuIAotICAgICAgICAvLyAg
ICAgTWVhbnMgdGhhdCBhbGwgcHJldmlvdXMgUHV0TG9jYWxzIGhhdmUgYmVlbiBleGVjdXRlZCBz
byB0aGVyZSBpcyBub3RoaW5nIGRlZmVycmVkLgotICAgICAgICAvLyAgICAgRHVyaW5nIG1lcmdp
bmcgdGhpcyBpcyBzdWJvcmRpbmF0ZSB0byB0aGUgb3RoZXIga2luZHMgb2YgZGVmZXJyYWxzLCBi
ZWNhdXNlIGl0Ci0gICAgICAgIC8vICAgICByZXByZXNlbnRzIHRoZSBmYWN0IHRoYXQgd2UndmUg
YWxyZWFkeSBleGVjdXRlZCBhbGwgbmVjZXNzYXJ5IFB1dExvY2Fscy4gVGhpcyBpbXBsaWVzCi0g
ICAgICAgIC8vICAgICB0aGF0IHRoZXJlICpoYWQqIGJlZW4gc29tZSBQdXRMb2NhbHMgdGhhdCB3
ZSBzaG91bGQgaGF2ZSBleGVjdXRlZC4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gVG9wOgotICAg
ICAgICAvLyAgICAgSW5zdGFudGlhdGVkIGFzIFZhcmlhYmxlRGVmZXJyYWw6OmNvbmZsaWN0KCku
Ci0gICAgICAgIC8vICAgICBSZXByZXNlbnRzIHRoZSBmYWN0IHRoYXQgd2Uga25vdywgdmlhIGZv
cndhcmQgZmxvdywgdGhhdCB0aGVyZSBpc24ndCBhbnkgdmFsdWUgaW4gdGhlCi0gICAgICAgIC8v
ICAgICBnaXZlbiBsb2NhbCB0aGF0IGFueW9uZSBzaG91bGQgaGF2ZSBiZWVuIHJlbHlpbmcgb24u
IFRoaXMgY29tZXMgaW50byBwbGF5IGF0IHRoZQotICAgICAgICAvLyAgICAgcHJvbG9ndWUgKGJl
Y2F1c2UgaW4gU1NBIGZvcm0gYXQgdGhlIHByb2xvZ3VlIG5vIGxvY2FsIGhhcyBhbnkgdmFsdWUp
IG9yIHdoZW4gd2UgbWVyZ2UKLSAgICAgICAgLy8gICAgIGRlZmVycmFscyBmb3IgZGlmZmVyZW50
IFZhcmlhYmxlQWNjZXNzRGF0YSoncy4gQSBWQUQgZW5jb21wYXNzZXMgYSBsZXhpY2FsIHNjb3Bl
IGluCi0gICAgICAgIC8vICAgICB3aGljaCB0aGUgbG9jYWwgaGFzIHNvbWUgc2VtYW50aWMgbWVh
bmluZzsgaWYgd2UgaGFkIHN0b3JlcyBmcm9tIGRpZmZlcmVudCBsZXhpY2FsCi0gICAgICAgIC8v
ICAgICBzY29wZXMgdGhhdCBnb3QgbWVyZ2VkIHRvZ2V0aGVyIHRoZW4gd2Uga25vdyB0aGF0IHdl
J3JlIG5vdCBpbiBlaXRoZXIgc2NvcGUgYW55bW9yZS4KLSAgICAgICAgLy8gICAgIE5vdGUgdGhh
dCB0aGlzIGlzIGFsbCBhcHByb3hpbWF0ZSBhbmQgb25seSBwcmVjaXNlIGVub3VnaCB0byBsYXRl
ciBhbnN3ZXIgcXVlc3Rpb25zCi0gICAgICAgIC8vICAgICBwZXJ0aW5lbnQgdG8gc2lua2luZy4g
Rm9yIGV4YW1wbGUsIHRoaXMgZG9lc24ndCBhbHdheXMgZGV0ZWN0IHdoZW4gYSBsb2NhbCBpcyBu
bwotICAgICAgICAvLyAgICAgbG9uZ2VyIHNlbWFudGljYWxseSByZWxldmFudCAtIHdlIG1heSB3
ZWxsIGhhdmUgYSBkZWZlcnJhbCBmcm9tIGluc2lkZSBzb21lIGlubGluZWQKLSAgICAgICAgLy8g
ICAgIGNhbGwgc3Vydml2ZSBvdXRzaWRlIG9mIHRoYXQgaW5saW5lZCBjb2RlLCBhbmQgdGhpcyBp
cyBnZW5lcmFsbHkgT0suIEluIHRoZSB3b3JzdCBjYXNlCi0gICAgICAgIC8vICAgICBpdCBtZWFu
cyB0aGF0IHdlIG1pZ2h0IHRoaW5rIHRoYXQgYSBkZWZlcnJhbCB0aGF0IGlzIGFjdHVhbGx5IGRl
YWQgbXVzdCBzdGlsbCBiZQotICAgICAgICAvLyAgICAgZXhlY3V0ZWQuIEJ1dCB3ZSB1c3VhbGx5
IGNhdGNoIHRoYXQgd2l0aCBsaXZlbmVzcy4gTGl2ZW5lc3MgZG9lc24ndCBhbHdheXMgY2F0Y2gg
aXQKLSAgICAgICAgLy8gICAgIGJlY2F1c2UgbGl2ZW5lc3MgaXMgY29uc2VydmF0aXZlLgotICAg
ICAgICAvLwotICAgICAgICAvLyAgICAgV2hhdCBUb3AgZG9lcyBnaXZlIHVzIGlzIGRldGVjdHMg
c2l0dWF0aW9ucyB3aGVyZSB3ZSBib3RoIGRvbid0IG5lZWQgdG8gY2FyZSBhYm91dCBhCi0gICAg
ICAgIC8vICAgICBkZWZlcnJhbCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRoYXQgd2UgY291bGQgcmVh
c29uIGFib3V0IGl0IGFueXdheS4gSWYgd2UgbWVyZ2VkCi0gICAgICAgIC8vICAgICBkZWZlcnJh
bHMgZm9yIGRpZmZlcmVudCB2YXJpYWJsZXMgdGhlbiB3ZSB3b3VsZG4ndCBrbm93IHRoZSBmb3Jt
YXQgdG8gdXNlLiBTbywgd2UKLSAgICAgICAgLy8gICAgIHVzZSBUb3AgaW4gdGhhdCBjYXNlIGJl
Y2F1c2UgdGhhdCdzIGFsc28gYSBjYXNlIHdoZXJlIHdlIGtub3cgdGhhdCB3ZSBjYW4gaWdub3Jl
IHRoZQotICAgICAgICAvLyAgICAgZGVmZXJyYWwuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIERl
ZmVycmFsIHdpdGggYSBjb25jcmV0ZSBWYXJpYWJsZUFjY2Vzc0RhdGEqOgotICAgICAgICAvLyAg
ICAgSW5zdGFudGlhdGVkIGFzIFZhcmlhYmxlRGVmZXJyYWwoc29tZVZhcmlhYmxlQWNjZXNzRGF0
YSkKLSAgICAgICAgLy8gICAgIFJlcHJlc2VudHMgdGhlIGZhY3QgdGhhdCB0aGUgb3JpZ2luYWwg
Y29kZSB3b3VsZCBoYXZlIGRvbmUgYSBQdXRMb2NhbCBidXQgd2UgaGF2ZW4ndAotICAgICAgICAv
LyAgICAgaWRlbnRpZmllZCBhbiBvcGVyYXRpb24gdGhhdCB3b3VsZCBoYXZlIG9ic2VydmVkIHRo
YXQgUHV0TG9jYWwuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIFRoaXMgY29kZSBoYXMgc29tZSBp
bnRlcmVzdGluZyBxdWlya3MgYmVjYXVzZSBvZiB0aGUgZmFjdCB0aGF0IG5laXRoZXIgbGl2ZW5l
c3Mgbm9yCi0gICAgICAgIC8vIGRlZmVycmFscyBhcmUgdmVyeSBwcmVjaXNlLiBUaGV5IGFyZSBv
bmx5IHByZWNpc2UgZW5vdWdoIHRvIGJlIGFibGUgdG8gY29ycmVjdGx5IHRlbGwgdXMKLSAgICAg
ICAgLy8gd2hlbiB3ZSBtYXkgW3NpY10gbmVlZCB0byBleGVjdXRlIFB1dExvY2Fscy4gVGhpcyBt
ZWFucyB0aGF0IHRoZXkgbWF5IHJlcG9ydCB0aGUgbmVlZCB0bwotICAgICAgICAvLyBleGVjdXRl
IGEgUHV0TG9jYWwgaW4gY2FzZXMgd2hlcmUgd2UgYWN0dWFsbHkgZG9uJ3QgcmVhbGx5IG5lZWQg
aXQsIGFuZCB0aGF0J3MgdG90YWxseSBPSy4KLSAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFy
aWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRIZWFkKG1fZ3JhcGgpOwotICAgICAgICBCbG9ja01h
cDxPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPj4gZGVmZXJyZWRBdFRhaWwobV9ncmFwaCk7Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJ
bk5hdHVyYWxPcmRlcigpKSB7Ci0gICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtibG9ja10gPQot
ICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwg
YmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgICAgICBkZWZlcnJlZEF0VGFpbFtibG9j
a10gPQotICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRz
TGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGRlZmVycmVkQXRIZWFkLmF0SW5kZXgoMCkuZmlsbChWYXJpYWJsZURlZmVycmFsOjpjb25m
bGljdCgpKTsKLSAgICAgICAgCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIGNoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgICAgIE9wZXJh
bmRzPFZhcmlhYmxlRGVmZXJyYWw+IGRlZmVycmVkID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdOwot
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9j
aykgewotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gS2lsbExvY2FsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBl
SGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlh
bGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZl
cnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbCgpOwotICAgICAgICAgICAg
ICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5v
ZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiBzb3VyY2UpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IG5vZGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxvYWQuIElnbm9yZSBpdC4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGRl
ZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZGVmZXJyZWRBdFRhaWxb
YmxvY2tdID0gZGVmZXJyZWQ7Ci0gICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVy
aW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5vcGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0
ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSwgIjog
IiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIg
bWVyZ2VzIHRvICIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtz
dWNjZXNzb3JdW2ldID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZEF0SGVh
ZFtzdWNjZXNzb3JdW2ldLm1lcmdlKGRlZmVycmVkW2ldKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICB9IHdoaWxlIChjaGFuZ2VkKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIFdlIHdpc2ggdG8gaW5zZXJ0IFB1dExvY2FscyBhdCBhbGwgb2YgdGhlIG1hdGVy
aWFsaXphdGlvbiBwb2ludHMsIHdoaWNoIGFyZSBkZWZpbmVkCi0gICAgICAgIC8vIGltcGxpY2l0
bHkgYXMgdGhlIHBsYWNlcyB3aGVyZSB3ZSBzZXQgZGVmZXJyZWQgdG8gRGVhZCB3aGlsZSBpdCB3
YXMgcHJldmlvdXNseSBub3QgRGVhZC4KLSAgICAgICAgLy8gVG8gZG8gdGhpcywgd2UgbWF5IG5l
ZWQgdG8gYnVpbGQgc29tZSBQaGkgZnVuY3Rpb25zIHRvIGhhbmRsZSBzdHVmZiBsaWtlIHRoaXM6
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEJlZm9yZToKLSAgICAgICAgLy8KLSAgICAgICAgLy8g
ICAgIGlmIChwKQotICAgICAgICAvLyAgICAgICAgIFB1dExvY2FsKHI0MiwgQHgpCi0gICAgICAg
IC8vICAgICBlbHNlCi0gICAgICAgIC8vICAgICAgICAgUHV0TG9jYWwocjQyLCBAeSkKLSAgICAg
ICAgLy8KLSAgICAgICAgLy8gQWZ0ZXI6Ci0gICAgICAgIC8vCi0gICAgICAgIC8vICAgICBpZiAo
cCkKLSAgICAgICAgLy8gICAgICAgICBVcHNpbG9uKEB4LCBeeikKLSAgICAgICAgLy8gICAgIGVs
c2UKLSAgICAgICAgLy8gICAgICAgICBVcHNpbG9uKEB5LCBeeikKLSAgICAgICAgLy8gICAgIHo6
IFBoaSgpCi0gICAgICAgIC8vICAgICBQdXRMb2NhbChyNDIsIEB6KQotICAgICAgICAvLwotICAg
ICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBhbiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSBmb3IgZWFjaCBsb2NhbCwgYW5kIGEgRGVmIGlzIGFueQotICAgICAgICAvLyBQdXRMb2NhbCBp
biB0aGUgb3JpZ2luYWwgcHJvZ3JhbS4gVGhlIG9yaWdpbmFsIFB1dExvY2FscyB3aWxsIHNpbXBs
eSB2YW5pc2guCi0gICAgICAgIAotICAgICAgICBPcGVyYW5kczxTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAotICAgICAgICAgICAgT3BlcmFuZHNMaWtlLCBtX2dy
YXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwotICAgICAgICBWZWN0b3I8VmlydHVhbFJl
Z2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IG1fZ3JhcGgu
YmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5v
cGVyYW5kRm9ySW5kZXgoaSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxjdWxhdG9yLm5ld1ZhcmlhYmxlKCk7Ci0g
ICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG9wZXJhbmQpID0gdmFyaWFibGU7
Ci0gICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJhbmQuc2l6ZSgpID09IHZhcmlhYmxlLT5p
bmRleCgpKTsKLSAgICAgICAgICAgIGluZGV4VG9PcGVyYW5kLmFwcGVuZChvcGVyYW5kKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgSGFzaFNldDxOb2RlKj4gcHV0TG9jYWxzVG9TaW5r
OwotICAgICAgICAKLSAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxv
Y2tzSW5OYXR1cmFsT3JkZXIoKSkgewotICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJs
b2NrKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAg
ICAgICAgY2FzZSBQdXRMb2NhbDoKLSAgICAgICAgICAgICAgICAgICAgcHV0TG9jYWxzVG9TaW5r
LmFkZChub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0g
ICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxv
Y2FsKCkpLCBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgICAg
ICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcGVy
YW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLCBibG9jaywgbm9kZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3NhQ2FsY3VsYXRvci5jb21wdXRlUGhpcygKLSAg
ICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlLCBCYXNpY0Js
b2NrKiBibG9jaykgLT4gTm9kZSogewotICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBv
cGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0SGVhZFtibG9ja10ub3BlcmFuZChvcGVy
YW5kKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgVmFyaWFibGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0g
ZGVmZXJyZWRBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBXZSBjb3VsZCBoYXZlIGFuIGludmFsaWQgZGVmZXJyYWwgYmVjYXVzZSBsaXZlbmVzcyBp
cyBpbXByZWNpc2UuCi0gICAgICAgICAgICAgICAgaWYgKCF2YXJpYWJsZURlZmVycmFsLmhhc1Zh
cmlhYmxlKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGlu
ZyBQaGkgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiXG4iKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gbV9ncmFw
aC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVPcmlnaW4oKSk7Ci0gICAgICAgICAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCB2YXJpYWJsZURlZmVycmFsLmhhc1Zhcmlh
YmxlKCkpOwotICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVm
ZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICBwaGlOb2Rl
LT5tZXJnZUZsYWdzKHJlc3VsdEZvcihmb3JtYXQpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
cGhpTm9kZTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgT3BlcmFuZHM8Tm9k
ZSo+IG1hcHBpbmcoT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhl
YWQpOwotICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPiBkZWZlcnJlZDsKLSAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIo
KSkgewotICAgICAgICAgICAgbWFwcGluZy5maWxsKG51bGxwdHIpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWFwcGluZy5zaXplKCk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRl
eChpKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChvcGVyYW5kKTsK
LSAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3Iu
cmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWRlZikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gZGVmLT52YWx1ZSgpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0IHRvcCBvZiAiLCBwb2ludGVyRHVtcChi
bG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBm
b3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhQ2FsY3VsYXRvci5waGlzRm9yQmxv
Y2soYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBp
bmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIs
IHBoaURlZi0+dmFsdWUoKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5k
KG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUo
KTsgKytub2RlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0
KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQsICJcbiIp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewotICAgICAgICAgICAgICAgIGNhc2UgUHV0TG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgp
OwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxl
LT5sb2NhbCgpOwotICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQp
ID0gVmFyaWFibGVEZWZlcnJhbCh2YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh2
ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFwcGluZyAiLCBv
cGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4i
KTsKLSAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2UgS2lsbExv
Y2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5r
ZWRMb2NhbCgpKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGRlZmF1bHQ6IHsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBlc2NhcGVIYW5kbGVyID0gWyZd
IChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KG9wZXJhbmQuaXNIZWFkZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVE
ZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0gZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRMb2NhbC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dExvY2FsIGZvciAiLCBvcGVyYW5kLCAi
IGF0ICIsIG5vZGUsICJcbiIpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNv
bWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaW5jb21pbmcpOwotICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dExvY2FsLCBu
b2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxl
RGVmZXJyYWwudmFyaWFibGUoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShp
bmNvbWluZywgdXNlS2luZEZvcih2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9y
bWF0KCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgICAg
IH07Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIHByZWNpc2VMb2NhbENs
b2JiZXJpemUoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBlc2NhcGVI
YW5kbGVyLCBlc2NhcGVIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgWyZdIChWaXJ0
dWFsUmVnaXN0ZXIsIE5vZGUqKSB7IH0pOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBHZXRMb2NhbCwgdGhlbiB3ZSBhbHNvIGNyZWF0ZSBh
IG1hcHBpbmcuCi0gICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJs
ZSB0byBqdXN0IGVsaW1pbmF0ZSBzdWNoIEdldExvY2Fscywgd2hlbiB3ZSBrbm93Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIHdoYXQgdGhlaXIgaW5jb21pbmcgdmFsdWUgd2lsbCBiZS4KLSAgICAg
ICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTYyNAotICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+bG9jYWwoKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKSA9IG5vZGU7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHNpemVfdCB1cHNpbG9u
SW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIE5vZGVPcmln
aW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCktPm9yaWdpbjsKLSAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1
bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewotICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJh
bmRbdmFyaWFibGUtPmluZGV4KCldOwotICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkNyZWF0aW5nIFVwc2lsb24gZm9yICIs
IG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAiLT4iLCBwb2ludGVyRHVtcChz
dWNjZXNzb3JCbG9jayksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZURlZmVy
cmFsIHZhcmlhYmxlRGVmZXJyYWwgPQotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWRB
dEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJp
YWJsZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFi
bGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgICAg
ICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1hdCk7Ci0gICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWluY29taW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBU
aGlzIGNhbiB0b3RhbGx5IGhhcHBlbiwgc2VlIHRlc3RzL3N0cmVzcy9wdXQtbG9jYWwtY29uc2Vy
dmF0aXZlLmpzLgotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhcmlzZXMgYmVjYXVz
ZSBkZWZlcnJhbCBhbmQgbGl2ZW5lc3MgYXJlIGJvdGggY29uc2VydmF0aXZlLgotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlIGxpdmVuZXNzIG1lYW5zIHRoYXQgYSBsb2Fk
IGZyb20gYSAqZGlmZmVyZW50KiBjbG9zdXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB2
YXJpYWJsZSBtYXkgbGVhZCB1cyB0byBiZWxpZXZlIHRoYXQgb3VyIGxvY2FsIGlzIGxpdmUuIENv
bnNlcnZhdGl2ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmZXJyYWwgbWF5IGxlYWQg
dXMgdG8gYmVsaWV2ZSB0aGF0IHRoZSBsb2NhbCBkb2Vzbid0IGhhdmUgYSB0b3AgZGVmZXJyYWwK
LSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugc29tZW9uZSBoYXMgZG9uZSBzb21l
dGhpbmcgdGhhdCB3b3VsZCBoYXZlIGZvcmNlZCBpdCB0byBiZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbWF0ZXJpYWxpemVkLiBUaGUgYmFzaWMgcGF0dGVybiBpczoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXRDbG9zdXJlVmFy
KGxvYzQyKSAvLyBsb2M0MidzIGRlZmVycmFsIGlzIG5vdyBib3R0b20KLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGlmIChwcmVkaWNhdGUxKQotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
ICAgIFB1dENsb3N1cmVWYXIobG9jNDIpIC8vIHByZXZlbnQgR0NTRSBvZiBvdXIgR2V0Q2xvc3Vy
ZVZhcidzCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAocHJlZGljYXRlMikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC8vICAgICBQdXRMb2NhbChsb2M0MikgLy8gd2Ugbm93IGhhdmUg
YSBjb25jcmV0ZSBkZWZlcnJhbAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gLy8gd2Ugc3Rp
bGwgaGF2ZSB0aGUgY29uY3JldGUgZGVmZXJyYWwgYmVjYXVzZSB3ZSBtZXJnZWQgd2l0aCBib3R0
b20KLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldENsb3N1cmVWYXIobG9jNDIpIC8vIGZv
cmNlIG1hdGVyaWFsaXphdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBhIFBoaSB3aXRoIG5vIGluY29taW5nIHZh
bHVlIGZvcm0gdGhlIGJhc2ljIGJsb2NrIHRoYXQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGJ5cGFzc2VkIHRoZSBQdXRMb2NhbC4KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gTm90ZTogd2Ugc29ydCBvZiBjb3VsZCBoYXZlIHVzZWQgdGhl
IGVxdWl2YWxlbnQgb2YgTExWTSdzIHVuZGVmIGhlcmUuIFRoZQotICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcG9pbnQgaXMgdGhhdCBpdCdzIE9LIHRvIGp1c3QgbGVhdmUgcmFuZG9tIGJpdHMg
aW4gdGhlIGxvY2FsIGlmIHdlJ3JlCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21pbmcg
ZG93biB0aGlzIHBhdGguIEJ1dCwgd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiBzYXlpbmcgdGhhdCBp
biBvdXIgSVIKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0IG5vdyBhbmQgYW55d2F5
IGl0IHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIHRoYXQgbXVjaC4KLSAgICAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21pbmcgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0Qm90dG9tQ29uc3RhbnRGb3JVc2UoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3JpZ2luLCB1c2VLaW5kKS5ub2RlKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
dXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhwaGlOb2RlKSwgRWRnZShpbmNvbWluZywg
dXNlS2luZCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICAvLyBGaW5hbGx5IGVsaW1pbmF0ZSB0aGUgc3Vua2VuIFB1dExvY2Fs
cyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4gVGhpcyBrZWVwcyB3aGF0ZXZlcgotICAg
ICAgICAvLyB0eXBlIGNoZWNrIHRoZXkgd2VyZSBkb2luZy4gQWxzbyBwcmVwZW5kIEtpbGxMb2Nh
bHMgdG8gdGhlbSB0byBlbnN1cmUgdGhhdCB3ZSBrbm93IHRoYXQKLSAgICAgICAgLy8gdGhlIHJl
bGV2YW50IHZhbHVlIHdhcyAqbm90KiBzdG9yZWQgdG8gdGhlIHN0YWNrLgotICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsrbm9kZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICghcHV0TG9jYWxzVG9TaW5rLmNvbnRhaW5zKG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2ls
bExvY2FsLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2RlLT5sb2NhbCgpLm9mZnNldCgpKSk7Ci0g
ICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICh2ZXJib3NlKSB7Ci0gICAgICAgICAgICBk
YXRhTG9nKCJHcmFwaCBhZnRlciBQdXRMb2NhbCBzaW5raW5nOlxuIik7Ci0gICAgICAgICAgICBt
X2dyYXBoLmR1bXAoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0gICAgCi1ib29sIHBlcmZv
cm1QdXRMb2NhbFNpbmtpbmcoR3JhcGgmIGdyYXBoKQotewotICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgUHV0TG9jYWwgU2lua2luZyBQaGFzZSIpOwotICAgIHJldHVybiBy
dW5QaGFzZTxQdXRMb2NhbFNpbmtpbmdQaGFzZT4oZ3JhcGgpOwotfQotCi19IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCi0KLSNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKLQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRMb2NhbFNpbmtpbmdQaGFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaAko
cmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRMb2Nh
bFNpbmtpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ2ICswLDAgQEAKLSAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgREZHUHV0TG9j
YWxTaW5raW5nUGhhc2VfaAotI2RlZmluZSBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZV9oCi0KLSNp
ZiBFTkFCTEUoREZHX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewotCi1j
bGFzcyBHcmFwaDsKLQotLy8gU2lua3MgUHV0TG9jYWxzIHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3Qg
cG9pbnQgd2hlcmUgdGhleSBjYW4gcG9zc2libHkgaGFwcGVuLCB3aGljaCBpcyB1c3VhbGx5Ci0v
LyBzaWRlLWVmZmVjdHMgdGhhdCBtYXkgb2JzZXJ2ZSB0aGVtLiBUaGlzIGVsaW1pbmF0ZXMgUHV0
TG9jYWxzIGlmIGl0IHNpbmtzIHRoZW0gcGFzdCB0aGUgcG9pbnQgb2YKLS8vIHRoZWlyIGRlYXRo
cy4KLQotYm9vbCBwZXJmb3JtUHV0TG9jYWxTaW5raW5nKEdyYXBoJik7Ci0KLX0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKLQotI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQotCi0jZW5kaWYgLy8g
REZHUHV0TG9jYWxTaW5raW5nUGhhc2VfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgw
NTgwKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dExvY2FsU2lua2luZ1Bo
YXNlLmNwcDoxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNr
U2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJERkdQaGFz
ZS5oIgorI2luY2x1ZGUgIkRGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJE
RkdTU0FDYWxjdWxhdG9yLmgiCisjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK2NsYXNzIFZhcmlhYmxlRGVmZXJyYWwgeworcHVibGljOgorICAgIFZhcmlhYmxlRGVm
ZXJyYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG51bGxwdHIpCisgICAgICAgIDog
bV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBWYXJp
YWJsZURlZmVycmFsIGNvbmZsaWN0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBWYXJpYWJsZURl
ZmVycmFsKGNvbmZsaWN0TWFya2VyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhYmxlOyB9CisgICAgCisgICAgYm9vbCBoYXNWYXJp
YWJsZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgIWlzQ29uZmxpY3QoKTsgfQorICAgIAor
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGhhc1ZhcmlhYmxlKCkpOworICAgICAgICByZXR1cm4gbV92YXJpYWJsZTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0NvbmZsaWN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhcmlhYmxlID09IGNvbmZsaWN0TWFya2VyKCk7CisgICAgfQorICAgIAorICAgIFZhcmlh
YmxlRGVmZXJyYWwgbWVyZ2UoVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICgqdGhpcyA9PSBvdGhlciB8fCAhb3RoZXIpCisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIGlmICghKnRoaXMpCisgICAgICAgICAgICByZXR1cm4gb3RoZXI7Cisg
ICAgICAgIHJldHVybiBjb25mbGljdCgpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
PT0oVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGU7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCEqdGhpcykKKyAg
ICAgICAgICAgIG91dC5wcmludCgiLSIpOworICAgICAgICBlbHNlIGlmIChpc0NvbmZsaWN0KCkp
CisgICAgICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0Iik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fdmFyaWFibGUpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KikgY29u
c3QKKyAgICB7CisgICAgICAgIGR1bXAob3V0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHN0YXRpYyBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvbmZsaWN0TWFya2VyKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4oc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KDEpKTsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBtX3Zh
cmlhYmxlOworfTsKKworY2xhc3MgUHV0TG9jYWxTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2Ug
eworcHVibGljOgorICAgIFB1dExvY2FsU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAg
ICAgOiBQaGFzZShncmFwaCwgIlB1dExvY2FsIHNpbmtpbmciKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGUgcHJv
YmxlbXMgb2YgdGhpcyBhcHByb2FjaCBpcyB0aGF0IGl0IHdpbGwgY3JlYXRlIGEgZHVwbGljYXRl
IFBoaSBncmFwaAorICAgICAgICAvLyBmb3Igc3Vua2VuIFB1dExvY2FscyBpbiB0aGUgcHJlc2Vu
Y2Ugb2YgaW50ZXJlc3RpbmcgY29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQorICAg
ICAgICAvLyB2YWx1ZSBiZWluZyBQdXRMb2NhbCdkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4g
dGhlIERGRyBjb2RlLiBXZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGlzCisgICAgICAgIC8vIGJ5IGRv
aW5nIHRoZSBzaW5raW5nIG92ZXIgQ1BTLCBvciBtYXliZSBqdXN0IGJ5IGRvaW5nIHJlYWxseSBz
bWFydCBob2lzdGluZy4gSXQncyBhbHNvCisgICAgICAgIC8vIHBvc3NpYmxlIHRoYXQgdGhlIGR1
cGxpY2F0ZSBQaGkgZ3JhcGggY2FuIGJlIGRlZHVwbGljYXRlZCBieSBMTFZNLiBJdCB3b3VsZCBi
ZSBiZXN0IGlmIHdlCisgICAgICAgIC8vIGNvdWxkIG9ic2VydmUgdGhhdCB0aGVyZSBpcyBhbHJl
YWR5IGEgUGhpIGdyYXBoIGluIHBsYWNlIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQuIEluCisgICAg
ICAgIC8vIHByaW5jaXBsZSBpZiB3ZSBoYXZlIGEgcmVxdWVzdCB0byBwbGFjZSBhIFBoaSBhdCBh
IHBhcnRpY3VsYXIgcGxhY2UsIHdlIGNvdWxkIGp1c3QgY2hlY2sKKyAgICAgICAgLy8gaWYgdGhl
cmUgaXMgYWxyZWFkeSBhIFBoaSB0aGF0IGRvZXMgd2hhdCB3ZSB3YW50LiBCZWNhdXNlIFB1dExv
Y2FsU2lua2luZ1BoYXNlIHJ1bnMganVzdAorICAgICAgICAvLyBhZnRlciBTU0EgY29udmVyc2lv
biwgd2UgaGF2ZSBhbG1vc3QgYSBndWFyYW50ZWUgdGhhdCB0aGUgUGhpIGdyYXBoIHdlIHByb2R1
Y2UgaGVyZSB3b3VsZAorICAgICAgICAvLyBiZSB0cml2aWFsbHkgcmVkdW5kYW50IHRvIHRoZSBv
bmUgd2UgYWxyZWFkeSBoYXZlLgorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGJlZm9yZSBQdXRMb2NhbCBzaW5raW5nOlxuIik7Cisg
ICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
U1NBQ2FsY3VsYXRvciBzc2FDYWxjdWxhdG9yKG1fZ3JhcGgpOworICAgICAgICBJbnNlcnRpb25T
ZXQgaW5zZXJ0aW9uU2V0KG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgLy8gRmlyc3QgZmln
dXJlIG91dCB3aGVyZSB2YXJpb3VzIGxvY2FscyBhcmUgbGl2ZS4KKyAgICAgICAgQmxvY2tNYXA8
T3BlcmFuZHM8Ym9vbD4+IGxpdmVBdEhlYWQobV9ncmFwaCk7CisgICAgICAgIEJsb2NrTWFwPE9w
ZXJhbmRzPGJvb2w+PiBsaXZlQXRUYWlsKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewor
ICAgICAgICAgICAgbGl2ZUF0SGVhZFtibG9ja10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xp
a2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICAgICAgbGl2ZUF0VGFpbFtibG9j
a10gPSBPcGVyYW5kczxib29sPihPcGVyYW5kc0xpa2UsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXS5maWxsKGZhbHNl
KTsKKyAgICAgICAgICAgIGxpdmVBdFRhaWxbYmxvY2tdLmZpbGwoZmFsc2UpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7
CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2Nr
SW5kZXgpOworICAgICAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIE9wZXJhbmRzPGJv
b2w+IGxpdmUgPSBsaXZlQXRUYWlsW2Jsb2NrXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygi
TGl2ZSBhdCAiLCBub2RlLCAiOiAiLCBsaXZlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlz
SGVhZGVyKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICIsIG9wZXJhbmQsICIgaXMgbGl2ZSBhdCAiLCBub2RlLCAiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFuZGxlciwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIE5vZGUqIHNvdXJjZSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gbm9kZSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbG9hZC4gSWdub3JlIGl0Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPm9wKCkgPT0gUHV0TG9jYWwpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdmUub3BlcmFuZChvcGVyYW5kKSA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChsaXZlID09IGxpdmVBdEhlYWRbYmxvY2td
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBsaXZlQXRIZWFkW2Jsb2NrXSA9IGxpdmU7CisgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmUuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
ICAgICAgICAgICAgbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl1baV0gfD0gbGl2ZVtpXTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgfSB3aGls
ZSAoY2hhbmdlZCk7CisgICAgICAgIAorICAgICAgICAvLyBBbGwgb2YgdGhlIGFyZ3VtZW50cyBz
aG91bGQgYmUgbGl2ZSBhdCBoZWFkIG9mIHJvb3QuIE5vdGUgdGhhdCB3ZSBtYXkgZmluZCB0aGF0
IHNvbWUKKyAgICAgICAgLy8gbG9jYWxzIGFyZSBsaXZlIGF0IGhlYWQgb2Ygcm9vdC4gVGhpcyBz
ZWVtcyB3cm9uZyBidXQgaXNuJ3QuIFRoaXMgd2lsbCBoYXBwZW4gZm9yIGV4YW1wbGUKKyAgICAg
ICAgLy8gaWYgdGhlIGZ1bmN0aW9uIGFjY2Vzc2VzIGNsb3N1cmUgdmFyaWFibGUgIzQyIGZvciBz
b21lIG90aGVyIGZ1bmN0aW9uIGFuZCB3ZSBlaXRoZXIgZG9uJ3QKKyAgICAgICAgLy8gaGF2ZSB2
YXJpYWJsZSAjNDIgYXQgYWxsIG9yIHdlIGhhdmVuJ3Qgc2V0IGl0IGF0IHJvb3QsIGZvciB3aGF0
ZXZlciByZWFzb24uIEJhc2ljYWxseSB0aGlzCisgICAgICAgIC8vIGFyaXNlcyBzaW5jZSBvdXIg
YWxpYXNpbmcgZm9yIGNsb3N1cmUgdmFyaWFibGVzIGlzIGNvbnNlcnZhdGl2ZWx5IGJhc2VkIG9u
IHZhcmlhYmxlIG51bWJlcgorICAgICAgICAvLyBhbmQgaWdub3JlcyB0aGUgb3duaW5nIHN5bWJv
bCB0YWJsZS4gV2Ugc2hvdWxkIHByb2JhYmx5IGZpeCB0aGlzIGV2ZW50dWFsbHkgYW5kIG1ha2Ug
b3VyCisgICAgICAgIC8vIGFsaWFzaW5nIG1vcmUgcHJlY2lzZS4KKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gRm9yIG91ciBwdXJwb3NlcyBoZXJlLCB0aGUgaW1wcmVjaXNpb24gaW4gdGhlIGFsaWFz
aW5nIGlzIGhhcm1sZXNzLiBJdCBqdXN0IG1lYW5zIHRoYXQgd2UKKyAgICAgICAgLy8gbWF5IG5v
dCBkbyBhcyBtdWNoIFBoaSBwcnVuaW5nIGFzIHdlIHdhbnRlZC4KKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQor
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBsaXZlQXRIZWFkLmF0SW5k
ZXgoMCkuYXJndW1lbnQoaSkpOworICAgICAgICAKKyAgICAgICAgLy8gTmV4dCBpZGVudGlmeSB3
aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNpbmsgUHV0TG9jYWxzIHRvLiBXZSBzYXkgdGhhdCB0aGVy
ZSBpcyBhIGRlZmVycmVkCisgICAgICAgIC8vIGZsdXNoIGlmIHdlIGhhZCBhIFB1dExvY2FsIHdp
dGggYSBnaXZlbiBWYXJpYWJsZUFjY2Vzc0RhdGEqIGJ1dCBpdCBoYXNuJ3QgYmVlbgorICAgICAg
ICAvLyBtYXRlcmlhbGl6ZWQgeWV0LiBEZWZlcnJhbHMgaGF2ZSB0aGUgZm9sbG93aW5nIGxhdHRp
Y2U7IGJ1dCBpdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZQorICAgICAgICAvLyBUT1AgcGFydCBv
ZiB0aGUgbGF0dGljZSBzZXJ2ZXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IHB1cnBvc2UgdGhhbiB0
aGUgcmVzdCBvZiB0aGUgbGF0dGljZToKKyAgICAgICAgLy8gaXQganVzdCBtZWFucyB0aGF0IHdl
J3JlIGluIGEgcmVnaW9uIG9mIGNvZGUgd2hlcmUgbm9ib2R5IHNob3VsZCBoYXZlIGJlZW4gcmVs
eWluZyBvbiB0aGUKKyAgICAgICAgLy8gdmFsdWUuIFRoZSByZXN0IG9mIHRoZSBsYXR0aWNlIG1l
YW5zIHRoYXQgd2UgZWl0aGVyIGhhdmUgYSBQdXRMb2NhbCB0aGF0IGlzIGRlZmVycmVkIChpLmUu
CisgICAgICAgIC8vIHN0aWxsIG5lZWRzIHRvIGJlIGV4ZWN1dGVkKSBvciB0aGVyZSBpc24ndCBv
bmUgKGJlY2F1c2Ugd2UndmUgYWxyYWVkeSBleGVjdXRlZCBpdCkuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIEJvdHRvbToKKyAgICAgICAgLy8gICAgIEluc3RhbnRpYXRlZCBhcyBWYXJpYWJsZURl
ZmVycmFsKCkuIAorICAgICAgICAvLyAgICAgTWVhbnMgdGhhdCBhbGwgcHJldmlvdXMgUHV0TG9j
YWxzIGhhdmUgYmVlbiBleGVjdXRlZCBzbyB0aGVyZSBpcyBub3RoaW5nIGRlZmVycmVkLgorICAg
ICAgICAvLyAgICAgRHVyaW5nIG1lcmdpbmcgdGhpcyBpcyBzdWJvcmRpbmF0ZSB0byB0aGUgb3Ro
ZXIga2luZHMgb2YgZGVmZXJyYWxzLCBiZWNhdXNlIGl0CisgICAgICAgIC8vICAgICByZXByZXNl
bnRzIHRoZSBmYWN0IHRoYXQgd2UndmUgYWxyZWFkeSBleGVjdXRlZCBhbGwgbmVjZXNzYXJ5IFB1
dExvY2Fscy4gVGhpcyBpbXBsaWVzCisgICAgICAgIC8vICAgICB0aGF0IHRoZXJlICpoYWQqIGJl
ZW4gc29tZSBQdXRMb2NhbHMgdGhhdCB3ZSBzaG91bGQgaGF2ZSBleGVjdXRlZC4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gVG9wOgorICAgICAgICAvLyAgICAgSW5zdGFudGlhdGVkIGFzIFZhcmlh
YmxlRGVmZXJyYWw6OmNvbmZsaWN0KCkuCisgICAgICAgIC8vICAgICBSZXByZXNlbnRzIHRoZSBm
YWN0IHRoYXQgd2Uga25vdywgdmlhIGZvcndhcmQgZmxvdywgdGhhdCB0aGVyZSBpc24ndCBhbnkg
dmFsdWUgaW4gdGhlCisgICAgICAgIC8vICAgICBnaXZlbiBsb2NhbCB0aGF0IGFueW9uZSBzaG91
bGQgaGF2ZSBiZWVuIHJlbHlpbmcgb24uIFRoaXMgY29tZXMgaW50byBwbGF5IGF0IHRoZQorICAg
ICAgICAvLyAgICAgcHJvbG9ndWUgKGJlY2F1c2UgaW4gU1NBIGZvcm0gYXQgdGhlIHByb2xvZ3Vl
IG5vIGxvY2FsIGhhcyBhbnkgdmFsdWUpIG9yIHdoZW4gd2UgbWVyZ2UKKyAgICAgICAgLy8gICAg
IGRlZmVycmFscyBmb3IgZGlmZmVyZW50IFZhcmlhYmxlQWNjZXNzRGF0YSoncy4gQSBWQUQgZW5j
b21wYXNzZXMgYSBsZXhpY2FsIHNjb3BlIGluCisgICAgICAgIC8vICAgICB3aGljaCB0aGUgbG9j
YWwgaGFzIHNvbWUgc2VtYW50aWMgbWVhbmluZzsgaWYgd2UgaGFkIHN0b3JlcyBmcm9tIGRpZmZl
cmVudCBsZXhpY2FsCisgICAgICAgIC8vICAgICBzY29wZXMgdGhhdCBnb3QgbWVyZ2VkIHRvZ2V0
aGVyIHRoZW4gd2Uga25vdyB0aGF0IHdlJ3JlIG5vdCBpbiBlaXRoZXIgc2NvcGUgYW55bW9yZS4K
KyAgICAgICAgLy8gICAgIE5vdGUgdGhhdCB0aGlzIGlzIGFsbCBhcHByb3hpbWF0ZSBhbmQgb25s
eSBwcmVjaXNlIGVub3VnaCB0byBsYXRlciBhbnN3ZXIgcXVlc3Rpb25zCisgICAgICAgIC8vICAg
ICBwZXJ0aW5lbnQgdG8gc2lua2luZy4gRm9yIGV4YW1wbGUsIHRoaXMgZG9lc24ndCBhbHdheXMg
ZGV0ZWN0IHdoZW4gYSBsb2NhbCBpcyBubworICAgICAgICAvLyAgICAgbG9uZ2VyIHNlbWFudGlj
YWxseSByZWxldmFudCAtIHdlIG1heSB3ZWxsIGhhdmUgYSBkZWZlcnJhbCBmcm9tIGluc2lkZSBz
b21lIGlubGluZWQKKyAgICAgICAgLy8gICAgIGNhbGwgc3Vydml2ZSBvdXRzaWRlIG9mIHRoYXQg
aW5saW5lZCBjb2RlLCBhbmQgdGhpcyBpcyBnZW5lcmFsbHkgT0suIEluIHRoZSB3b3JzdCBjYXNl
CisgICAgICAgIC8vICAgICBpdCBtZWFucyB0aGF0IHdlIG1pZ2h0IHRoaW5rIHRoYXQgYSBkZWZl
cnJhbCB0aGF0IGlzIGFjdHVhbGx5IGRlYWQgbXVzdCBzdGlsbCBiZQorICAgICAgICAvLyAgICAg
ZXhlY3V0ZWQuIEJ1dCB3ZSB1c3VhbGx5IGNhdGNoIHRoYXQgd2l0aCBsaXZlbmVzcy4gTGl2ZW5l
c3MgZG9lc24ndCBhbHdheXMgY2F0Y2ggaXQKKyAgICAgICAgLy8gICAgIGJlY2F1c2UgbGl2ZW5l
c3MgaXMgY29uc2VydmF0aXZlLgorICAgICAgICAvLworICAgICAgICAvLyAgICAgV2hhdCBUb3Ag
ZG9lcyBnaXZlIHVzIGlzIGRldGVjdHMgc2l0dWF0aW9ucyB3aGVyZSB3ZSBib3RoIGRvbid0IG5l
ZWQgdG8gY2FyZSBhYm91dCBhCisgICAgICAgIC8vICAgICBkZWZlcnJhbCBhbmQgdGhlcmUgaXMg
bm8gd2F5IHRoYXQgd2UgY291bGQgcmVhc29uIGFib3V0IGl0IGFueXdheS4gSWYgd2UgbWVyZ2Vk
CisgICAgICAgIC8vICAgICBkZWZlcnJhbHMgZm9yIGRpZmZlcmVudCB2YXJpYWJsZXMgdGhlbiB3
ZSB3b3VsZG4ndCBrbm93IHRoZSBmb3JtYXQgdG8gdXNlLiBTbywgd2UKKyAgICAgICAgLy8gICAg
IHVzZSBUb3AgaW4gdGhhdCBjYXNlIGJlY2F1c2UgdGhhdCdzIGFsc28gYSBjYXNlIHdoZXJlIHdl
IGtub3cgdGhhdCB3ZSBjYW4gaWdub3JlIHRoZQorICAgICAgICAvLyAgICAgZGVmZXJyYWwuCisg
ICAgICAgIC8vCisgICAgICAgIC8vIERlZmVycmFsIHdpdGggYSBjb25jcmV0ZSBWYXJpYWJsZUFj
Y2Vzc0RhdGEqOgorICAgICAgICAvLyAgICAgSW5zdGFudGlhdGVkIGFzIFZhcmlhYmxlRGVmZXJy
YWwoc29tZVZhcmlhYmxlQWNjZXNzRGF0YSkKKyAgICAgICAgLy8gICAgIFJlcHJlc2VudHMgdGhl
IGZhY3QgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB3b3VsZCBoYXZlIGRvbmUgYSBQdXRMb2NhbCBi
dXQgd2UgaGF2ZW4ndAorICAgICAgICAvLyAgICAgaWRlbnRpZmllZCBhbiBvcGVyYXRpb24gdGhh
dCB3b3VsZCBoYXZlIG9ic2VydmVkIHRoYXQgUHV0TG9jYWwuCisgICAgICAgIC8vCisgICAgICAg
IC8vIFRoaXMgY29kZSBoYXMgc29tZSBpbnRlcmVzdGluZyBxdWlya3MgYmVjYXVzZSBvZiB0aGUg
ZmFjdCB0aGF0IG5laXRoZXIgbGl2ZW5lc3Mgbm9yCisgICAgICAgIC8vIGRlZmVycmFscyBhcmUg
dmVyeSBwcmVjaXNlLiBUaGV5IGFyZSBvbmx5IHByZWNpc2UgZW5vdWdoIHRvIGJlIGFibGUgdG8g
Y29ycmVjdGx5IHRlbGwgdXMKKyAgICAgICAgLy8gd2hlbiB3ZSBtYXkgW3NpY10gbmVlZCB0byBl
eGVjdXRlIFB1dExvY2Fscy4gVGhpcyBtZWFucyB0aGF0IHRoZXkgbWF5IHJlcG9ydCB0aGUgbmVl
ZCB0bworICAgICAgICAvLyBleGVjdXRlIGEgUHV0TG9jYWwgaW4gY2FzZXMgd2hlcmUgd2UgYWN0
dWFsbHkgZG9uJ3QgcmVhbGx5IG5lZWQgaXQsIGFuZCB0aGF0J3MgdG90YWxseSBPSy4KKyAgICAg
ICAgQmxvY2tNYXA8T3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4+IGRlZmVycmVkQXRIZWFkKG1f
Z3JhcGgpOworICAgICAgICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPj4gZGVm
ZXJyZWRBdFRhaWwobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ncmFwaC5ibG9ja3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBk
ZWZlcnJlZEF0SGVhZFtibG9ja10gPQorICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxl
RGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7CisgICAgICAg
ICAgICBkZWZlcnJlZEF0VGFpbFtibG9ja10gPQorICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZh
cmlhYmxlRGVmZXJyYWw+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0SGVhZCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRlZmVycmVkQXRIZWFkLmF0SW5kZXgoMCkuZmls
bChWYXJpYWJsZURlZmVycmFsOjpjb25mbGljdCgpKTsKKyAgICAgICAgCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkg
eworICAgICAgICAgICAgICAgIE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+IGRlZmVycmVkID0g
ZGVmZXJyZWRBdEhlYWRbYmxvY2tdOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5v
ZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gS2lsbExvY2FsKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBWYXJp
YWJsZURlZmVycmFsOjpjb25mbGljdCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgIGF1dG8gZXNjYXBlSGFuZGxlciA9IFsmXSAoVmlydHVhbFJlZ2lzdGVyIG9w
ZXJhbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVE
ZWZlcnJhbCgpOworICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgcHJlY2lzZUxvY2FsQ2xvYmJlcml6ZSgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIGVzY2FwZUhhbmRsZXIsIGVzY2FwZUhhbmRsZXIs
CisgICAgICAgICAgICAgICAgICAgICAgICBbJl0gKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBO
b2RlKiBzb3VyY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09
IG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGxv
YWQuIElnbm9yZSBpdC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQp
ID0gVmFyaWFibGVEZWZlcnJhbChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKGRlZmVycmVkID09IGRlZmVycmVkQXRUYWlsW2Jsb2NrXSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZGVmZXJyZWRBdFRhaWxbYmxvY2tdID0gZGVmZXJyZWQ7CisgICAgICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBkZWZlcnJlZC5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nICIsIFZpcnR1YWxSZWdpc3RlcihkZWZlcnJlZC5v
cGVyYW5kRm9ySW5kZXgoaSkpLCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIi0+IiwgcG9p
bnRlckR1bXAoc3VjY2Vzc29yKSwgIjogIiwgZGVmZXJyZWRbaV0sICIgYW5kICIsIGRlZmVycmVk
QXRIZWFkW3N1Y2Nlc3Nvcl1baV0sICIgbWVyZ2VzIHRvICIpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldID0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLm1lcmdlKGRlZmVycmVkW2ld
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0
SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9IHdoaWxl
IChjaGFuZ2VkKTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHdpc2ggdG8gaW5zZXJ0IFB1dExv
Y2FscyBhdCBhbGwgb2YgdGhlIG1hdGVyaWFsaXphdGlvbiBwb2ludHMsIHdoaWNoIGFyZSBkZWZp
bmVkCisgICAgICAgIC8vIGltcGxpY2l0bHkgYXMgdGhlIHBsYWNlcyB3aGVyZSB3ZSBzZXQgZGVm
ZXJyZWQgdG8gRGVhZCB3aGlsZSBpdCB3YXMgcHJldmlvdXNseSBub3QgRGVhZC4KKyAgICAgICAg
Ly8gVG8gZG8gdGhpcywgd2UgbWF5IG5lZWQgdG8gYnVpbGQgc29tZSBQaGkgZnVuY3Rpb25zIHRv
IGhhbmRsZSBzdHVmZiBsaWtlIHRoaXM6CisgICAgICAgIC8vCisgICAgICAgIC8vIEJlZm9yZToK
KyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGlmIChwKQorICAgICAgICAvLyAgICAgICAgIFB1
dExvY2FsKHI0MiwgQHgpCisgICAgICAgIC8vICAgICBlbHNlCisgICAgICAgIC8vICAgICAgICAg
UHV0TG9jYWwocjQyLCBAeSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQWZ0ZXI6CisgICAgICAg
IC8vCisgICAgICAgIC8vICAgICBpZiAocCkKKyAgICAgICAgLy8gICAgICAgICBVcHNpbG9uKEB4
LCBeeikKKyAgICAgICAgLy8gICAgIGVsc2UKKyAgICAgICAgLy8gICAgICAgICBVcHNpbG9uKEB5
LCBeeikKKyAgICAgICAgLy8gICAgIHo6IFBoaSgpCisgICAgICAgIC8vICAgICBQdXRMb2NhbChy
NDIsIEB6KQorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSBh
biBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZWFjaCBsb2NhbCwgYW5kIGEgRGVmIGlzIGFu
eQorICAgICAgICAvLyBQdXRMb2NhbCBpbiB0aGUgb3JpZ2luYWwgcHJvZ3JhbS4gVGhlIG9yaWdp
bmFsIFB1dExvY2FscyB3aWxsIHNpbXBseSB2YW5pc2guCisgICAgICAgIAorICAgICAgICBPcGVy
YW5kczxTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IG9wZXJhbmRUb1ZhcmlhYmxlKAorICAgICAg
ICAgICAgT3BlcmFuZHNMaWtlLCBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOwor
ICAgICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBpbmRleFRvT3BlcmFuZDsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kKG1fZ3JhcGguYmxv
Y2soMCktPnZhcmlhYmxlc0F0SGVhZC5vcGVyYW5kRm9ySW5kZXgoaSkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2FDYWxj
dWxhdG9yLm5ld1ZhcmlhYmxlKCk7CisgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVy
YW5kKG9wZXJhbmQpID0gdmFyaWFibGU7CisgICAgICAgICAgICBBU1NFUlQoaW5kZXhUb09wZXJh
bmQuc2l6ZSgpID09IHZhcmlhYmxlLT5pbmRleCgpKTsKKyAgICAgICAgICAgIGluZGV4VG9PcGVy
YW5kLmFwcGVuZChvcGVyYW5kKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgSGFzaFNl
dDxOb2RlKj4gcHV0TG9jYWxzVG9TaW5rOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAg
ICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBQdXRMb2NhbDoKKyAgICAgICAgICAg
ICAgICAgICAgcHV0TG9jYWxzVG9TaW5rLmFkZChub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
c3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9W
YXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLCBibG9jaywgbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBH
ZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxvY2Fs
KCkpLCBibG9jaywgbm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3NhQ2Fs
Y3VsYXRvci5jb21wdXRlUGhpcygKKyAgICAgICAgICAgIFsmXSAoU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqIHZhcmlhYmxlLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gTm9kZSogeworICAgICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUt
PmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghbGl2ZUF0
SGVhZFtibG9ja10ub3BlcmFuZChvcGVyYW5kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgVmFyaWFibGVEZWZl
cnJhbCB2YXJpYWJsZURlZmVycmFsID0gZGVmZXJyZWRBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3Bl
cmFuZCk7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBoYXZlIGFuIGludmFsaWQgZGVm
ZXJyYWwgYmVjYXVzZSBsaXZlbmVzcyBpcyBpbXByZWNpc2UuCisgICAgICAgICAgICAgICAgaWYg
KCF2YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBQaGkgZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9p
bnRlckR1bXAoYmxvY2spLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBOb2RlKiBwaGlOb2RlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNIZWFwVG9wLCBQaGksIE5vZGVP
cmlnaW4oKSk7CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCB2
YXJpYWJsZURlZmVycmFsLmhhc1ZhcmlhYmxlKCkpOworICAgICAgICAgICAgICAgIEZsdXNoRm9y
bWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1c2hGb3JtYXQoKTsK
KyAgICAgICAgICAgICAgICBwaGlOb2RlLT5tZXJnZUZsYWdzKHJlc3VsdEZvcihmb3JtYXQpKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gcGhpTm9kZTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICAKKyAgICAgICAgT3BlcmFuZHM8Tm9kZSo+IG1hcHBpbmcoT3BlcmFuZHNMaWtlLCBtX2dyYXBo
LmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQpOworICAgICAgICBPcGVyYW5kczxWYXJpYWJsZURl
ZmVycmFsPiBkZWZlcnJlZDsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3Jh
cGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgeworICAgICAgICAgICAgbWFwcGluZy5maWxsKG51
bGxwdHIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gbWFwcGlu
Zy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFu
ZChtYXBwaW5nLm9wZXJhbmRGb3JJbmRleChpKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gb3BlcmFuZFRvVmFy
aWFibGUub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpE
ZWYqIGRlZiA9IHNzYUNhbGN1bGF0b3IucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxl
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWRlZikKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9w
ZXJhbmQpID0gZGVmLT52YWx1ZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJNYXBwaW5nIGF0
IHRvcCBvZiAiLCBwb2ludGVyRHVtcChibG9jayksICI6ICIsIG1hcHBpbmcsICJcbiIpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDog
c3NhQ2FsY3VsYXRvci5waGlzRm9yQmxvY2soYmxvY2spKSB7CisgICAgICAgICAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSBpbmRleFRvT3BlcmFuZFtwaGlEZWYtPnZhcmlhYmxlKCkt
PmluZGV4KCldOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoMCwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgTWFw
cGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIHBoaURlZi0+dmFsdWUoKSwgIlxuIik7CisgICAgICAg
ICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0gcGhpRGVmLT52YWx1ZSgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZlcnJlZCA9IGRlZmVycmVk
QXRIZWFkW2Jsb2NrXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsg
bm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5v
ZGUsICI6IiwgZGVmZXJyZWQsICJcbiIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgUHV0TG9jYWw6
IHsKKyAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAgICAgICAgICBk
ZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbCh2YXJpYWJsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgTWFwcGluZyAiLCBvcGVyYW5kLCAiIHRvICIsIG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSwgIiBhdCAiLCBub2RlLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5v
cGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgS2lsbExvY2FsOiB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVy
cmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IFZhcmlhYmxlRGVmZXJyYWwoKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICAgICAg
YXV0byBlc2NhcGVIYW5kbGVyID0gWyZdIChWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQuaXNIZWFkZXIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgVmFyaWFibGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0gZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFyaWFi
bGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBH
b3R0YSBpbnNlcnQgYSBQdXRMb2NhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1
dExvY2FsIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIG5vZGUsICJcbiIpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFuZChvcGVyYW5kKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgaW5jb21p
bmcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgU3BlY05vbmUsIFB1dExvY2FsLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKSksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRWRnZShpbmNvbWluZywgdXNlS2luZEZvcih2YXJpYWJsZURlZmVy
cmFsLnZhcmlhYmxlKCktPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IG51bGxw
dHI7CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIHByZWNpc2VMb2NhbENsb2JiZXJpemUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCBub2RlLCBlc2NhcGVIYW5kbGVyLCBlc2NhcGVIYW5kbGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgWyZdIChWaXJ0dWFsUmVnaXN0ZXIsIE5vZGUqKSB7IH0pOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgYSBHZXRMb2Nh
bCwgdGhlbiB3ZSBhbHNvIGNyZWF0ZSBhIG1hcHBpbmcuCisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGVsaW1pbmF0ZSBzdWNoIEdldExvY2Fs
cywgd2hlbiB3ZSBrbm93CisgICAgICAgICAgICAgICAgICAgIC8vIHdoYXQgdGhlaXIgaW5jb21p
bmcgdmFsdWUgd2lsbCBiZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTYyNAorICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+b3AoKSA9PSBHZXRMb2NhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2YXJpYWJsZS0+
bG9jYWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcub3BlcmFuZChvcGVyYW5k
KSA9IG5vZGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfSB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHNpemVfdCB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQgPSBibG9jay0+c2l6ZSgpIC0g
MTsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gdXBzaWxvbk9yaWdpbiA9IGJsb2NrLT5sYXN0KCkt
Pm9yaWdpbjsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBi
bG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgZm9yIChTU0FDYWxjdWxhdG9y
OjpEZWYqIHBoaURlZiA6IHNzYUNhbGN1bGF0b3IucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2Nr
KSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwaGlOb2RlID0gcGhpRGVmLT52YWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUg
PSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rl
ciBvcGVyYW5kID0gaW5kZXhUb09wZXJhbmRbdmFyaWFibGUtPmluZGV4KCldOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2co
IkNyZWF0aW5nIFVwc2lsb24gZm9yICIsIG9wZXJhbmQsICIgYXQgIiwgcG9pbnRlckR1bXAoYmxv
Y2spLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3JCbG9jayksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICBWYXJpYWJsZURlZmVycmFsIHZhcmlhYmxlRGVmZXJyYWwgPQorICAgICAgICAg
ICAgICAgICAgICAgICAgZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3Bl
cmFuZCk7CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwg
dmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1
c2hGb3JtYXQgZm9ybWF0ID0gdmFyaWFibGVEZWZlcnJhbC52YXJpYWJsZSgpLT5mbHVzaEZvcm1h
dCgpOworICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZv
cm1hdCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGluY29taW5nID0gbWFwcGluZy5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWluY29taW5nKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiB0b3RhbGx5IGhhcHBlbiwgc2VlIHRlc3Rz
L3N0cmVzcy9wdXQtbG9jYWwtY29uc2VydmF0aXZlLmpzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gVGhpcyBhcmlzZXMgYmVjYXVzZSBkZWZlcnJhbCBhbmQgbGl2ZW5lc3MgYXJlIGJvdGgg
Y29uc2VydmF0aXZlLgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29uc2VydmF0aXZlIGxp
dmVuZXNzIG1lYW5zIHRoYXQgYSBsb2FkIGZyb20gYSAqZGlmZmVyZW50KiBjbG9zdXJlCisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSBtYXkgbGVhZCB1cyB0byBiZWxpZXZlIHRo
YXQgb3VyIGxvY2FsIGlzIGxpdmUuIENvbnNlcnZhdGl2ZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gZGVmZXJyYWwgbWF5IGxlYWQgdXMgdG8gYmVsaWV2ZSB0aGF0IHRoZSBsb2NhbCBkb2Vz
bid0IGhhdmUgYSB0b3AgZGVmZXJyYWwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2Ugc29tZW9uZSBoYXMgZG9uZSBzb21ldGhpbmcgdGhhdCB3b3VsZCBoYXZlIGZvcmNlZCBpdCB0
byBiZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0ZXJpYWxpemVkLiBUaGUgYmFzaWMg
cGF0dGVybiBpczoKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBHZXRDbG9zdXJlVmFyKGxvYzQyKSAvLyBsb2M0MidzIGRlZmVycmFsIGlzIG5v
dyBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmIChwcmVkaWNhdGUxKQorICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gICAgIFB1dENsb3N1cmVWYXIobG9jNDIpIC8vIHByZXZl
bnQgR0NTRSBvZiBvdXIgR2V0Q2xvc3VyZVZhcidzCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBpZiAocHJlZGljYXRlMikKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBQdXRMb2Nh
bChsb2M0MikgLy8gd2Ugbm93IGhhdmUgYSBjb25jcmV0ZSBkZWZlcnJhbAorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gLy8gd2Ugc3RpbGwgaGF2ZSB0aGUgY29uY3JldGUgZGVmZXJyYWwgYmVj
YXVzZSB3ZSBtZXJnZWQgd2l0aCBib3R0b20KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdl
dENsb3N1cmVWYXIobG9jNDIpIC8vIGZvcmNlIG1hdGVyaWFsaXphdGlvbgorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgaGF2ZSBh
IFBoaSB3aXRoIG5vIGluY29taW5nIHZhbHVlIGZvcm0gdGhlIGJhc2ljIGJsb2NrIHRoYXQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5cGFzc2VkIHRoZSBQdXRMb2NhbC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogd2Ugc29y
dCBvZiBjb3VsZCBoYXZlIHVzZWQgdGhlIGVxdWl2YWxlbnQgb2YgTExWTSdzIHVuZGVmIGhlcmUu
IFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9pbnQgaXMgdGhhdCBpdCdzIE9LIHRv
IGp1c3QgbGVhdmUgcmFuZG9tIGJpdHMgaW4gdGhlIGxvY2FsIGlmIHdlJ3JlCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb21pbmcgZG93biB0aGlzIHBhdGguIEJ1dCwgd2UgZG9uJ3QgaGF2
ZSBhIHdheSBvZiBzYXlpbmcgdGhhdCBpbiBvdXIgSVIKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIHJpZ2h0IG5vdyBhbmQgYW55d2F5IGl0IHByb2JhYmx5IGRvZXNuJ3QgbWF0dGVyIHRoYXQg
bXVjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
aW5jb21pbmcgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Qm90dG9tQ29uc3RhbnRGb3JVc2UoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCB1cHNpbG9uT3Jp
Z2luLCB1c2VLaW5kKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAor
ICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwg
VXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhw
aGlOb2RlKSwgRWRnZShpbmNvbWluZywgdXNlS2luZCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGaW5hbGx5IGVsaW1p
bmF0ZSB0aGUgc3Vua2VuIFB1dExvY2FscyBieSB0dXJuaW5nIHRoZW0gaW50byBQaGFudG9tcy4g
VGhpcyBrZWVwcyB3aGF0ZXZlcgorICAgICAgICAvLyB0eXBlIGNoZWNrIHRoZXkgd2VyZSBkb2lu
Zy4gQWxzbyBwcmVwZW5kIEtpbGxMb2NhbHMgdG8gdGhlbSB0byBlbnN1cmUgdGhhdCB3ZSBrbm93
IHRoYXQKKyAgICAgICAgLy8gdGhlIHJlbGV2YW50IHZhbHVlIHdhcyAqbm90KiBzdG9yZWQgdG8g
dGhlIHN0YWNrLgorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaC5ibG9j
a3NJbk5hdHVyYWxPcmRlcigpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmICghcHV0TG9jYWxzVG9TaW5rLmNvbnRhaW5zKG5vZGUp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbExvY2FsLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhub2Rl
LT5sb2NhbCgpLm9mZnNldCgpKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhh
bnRvbSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBhZnRlciBQdXRMb2NhbCBzaW5r
aW5nOlxuIik7CisgICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisgICAgCitib29sIHBlcmZvcm1QdXRMb2NhbFNpbmtpbmcoR3JhcGgmIGdyYXBoKQor
eworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgUHV0TG9jYWwgU2lua2lu
ZyBQaGFzZSIpOworICAgIHJldHVybiBydW5QaGFzZTxQdXRMb2NhbFNpbmtpbmdQaGFzZT4oZ3Jh
cGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFja1Np
bmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkRG
R1B1dExvY2FsU2lua2luZ1BoYXNlLmgiCisjaW5jbHVkZSAiREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuaCIKIAogI2lmIEVOQUJMRShERkdfSklUKQogCkBAIC00NCw5MyArNDQsMjggQEAgbmFtZXNw
YWNlIHsKIAogYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLWNsYXNzIFZhcmlhYmxlRGVmZXJyYWwg
eworY2xhc3MgUHV0U3RhY2tTaW5raW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogcHVibGljOgot
ICAgIFZhcmlhYmxlRGVmZXJyYWwoVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG51bGxw
dHIpCi0gICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKLSAgICB7Ci0gICAgfQotICAgIAot
ICAgIHN0YXRpYyBWYXJpYWJsZURlZmVycmFsIGNvbmZsaWN0KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBWYXJpYWJsZURlZmVycmFsKGNvbmZsaWN0TWFya2VyKCkpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhcmlhYmxlOyB9Ci0gICAgCi0g
ICAgYm9vbCBoYXNWYXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuICEhKnRoaXMgJiYgIWlzQ29uZmxp
Y3QoKTsgfQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlKCkpOwotICAgICAgICByZXR1cm4gbV92
YXJpYWJsZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NvbmZsaWN0KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IGNvbmZsaWN0TWFya2VyKCk7Ci0gICAgfQot
ICAgIAotICAgIFZhcmlhYmxlRGVmZXJyYWwgbWVyZ2UoVmFyaWFibGVEZWZlcnJhbCBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmICgqdGhpcyA9PSBvdGhlciB8fCAhb3RoZXIpCi0gICAg
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIGlmICghKnRoaXMpCi0gICAgICAgICAgICBy
ZXR1cm4gb3RoZXI7Ci0gICAgICAgIHJldHVybiBjb25mbGljdCgpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIG9wZXJhdG9yPT0oVmFyaWFibGVEZWZlcnJhbCBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3ZhcmlhYmxlID09IG90aGVyLm1fdmFyaWFibGU7Ci0gICAgfQotICAg
IAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKCEqdGhpcykKLSAgICAgICAgICAgIG91dC5wcmludCgiLSIpOwotICAgICAgICBlbHNlIGlm
IChpc0NvbmZsaWN0KCkpCi0gICAgICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0Iik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fdmFyaWFibGUpKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KikgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXAob3V0KTsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNvbmZsaWN0TWFya2Vy
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRh
Kj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KDEpKTsKLSAgICB9Ci0gICAgCi0gICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBtX3ZhcmlhYmxlOwotfTsKLQotY2xhc3MgUHV0TG9jYWxTaW5raW5nUGhhc2Ug
OiBwdWJsaWMgUGhhc2UgewotcHVibGljOgotICAgIFB1dExvY2FsU2lua2luZ1BoYXNlKEdyYXBo
JiBncmFwaCkKLSAgICAgICAgOiBQaGFzZShncmFwaCwgIlB1dExvY2FsIHNpbmtpbmciKQorICAg
IFB1dFN0YWNrU2lua2luZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFw
aCwgIlB1dFN0YWNrIHNpbmtpbmciKQogICAgIHsKICAgICB9CiAgICAgCiAgICAgYm9vbCBydW4o
KQogICAgIHsKICAgICAgICAgLy8gRklYTUU6IE9uZSBvZiB0aGUgcHJvYmxlbXMgb2YgdGhpcyBh
cHByb2FjaCBpcyB0aGF0IGl0IHdpbGwgY3JlYXRlIGEgZHVwbGljYXRlIFBoaSBncmFwaAotICAg
ICAgICAvLyBmb3Igc3Vua2VuIFB1dExvY2FscyBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJlc3Rp
bmcgY29udHJvbCBmbG93IG1lcmdlcywgYW5kIHdoZXJlIHRoZQotICAgICAgICAvLyB2YWx1ZSBi
ZWluZyBQdXRMb2NhbCdkIGlzIGFsc28gb3RoZXJ3aXNlIGxpdmUgaW4gdGhlIERGRyBjb2RlLiBX
ZSBjb3VsZCB3b3JrIGFyb3VuZCB0aGlzCisgICAgICAgIC8vIGZvciBzdW5rZW4gUHV0U3RhY2tz
IGluIHRoZSBwcmVzZW5jZSBvZiBpbnRlcmVzdGluZyBjb250cm9sIGZsb3cgbWVyZ2VzLCBhbmQg
d2hlcmUgdGhlCisgICAgICAgIC8vIHZhbHVlIGJlaW5nIFB1dFN0YWNrJ2QgaXMgYWxzbyBvdGhl
cndpc2UgbGl2ZSBpbiB0aGUgREZHIGNvZGUuIFdlIGNvdWxkIHdvcmsgYXJvdW5kIHRoaXMKICAg
ICAgICAgLy8gYnkgZG9pbmcgdGhlIHNpbmtpbmcgb3ZlciBDUFMsIG9yIG1heWJlIGp1c3QgYnkg
ZG9pbmcgcmVhbGx5IHNtYXJ0IGhvaXN0aW5nLiBJdCdzIGFsc28KICAgICAgICAgLy8gcG9zc2li
bGUgdGhhdCB0aGUgZHVwbGljYXRlIFBoaSBncmFwaCBjYW4gYmUgZGVkdXBsaWNhdGVkIGJ5IExM
Vk0uIEl0IHdvdWxkIGJlIGJlc3QgaWYgd2UKICAgICAgICAgLy8gY291bGQgb2JzZXJ2ZSB0aGF0
IHRoZXJlIGlzIGFscmVhZHkgYSBQaGkgZ3JhcGggaW4gcGxhY2UgdGhhdCBkb2VzIHdoYXQgd2Ug
d2FudC4gSW4KICAgICAgICAgLy8gcHJpbmNpcGxlIGlmIHdlIGhhdmUgYSByZXF1ZXN0IHRvIHBs
YWNlIGEgUGhpIGF0IGEgcGFydGljdWxhciBwbGFjZSwgd2UgY291bGQganVzdCBjaGVjawotICAg
ICAgICAvLyBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgUGhpIHRoYXQgZG9lcyB3aGF0IHdlIHdhbnQu
IEJlY2F1c2UgUHV0TG9jYWxTaW5raW5nUGhhc2UgcnVucyBqdXN0CisgICAgICAgIC8vIGlmIHRo
ZXJlIGlzIGFscmVhZHkgYSBQaGkgdGhhdCBkb2VzIHdoYXQgd2Ugd2FudC4gQmVjYXVzZSBQdXRT
dGFja1NpbmtpbmdQaGFzZSBydW5zIGp1c3QKICAgICAgICAgLy8gYWZ0ZXIgU1NBIGNvbnZlcnNp
b24sIHdlIGhhdmUgYWxtb3N0IGEgZ3VhcmFudGVlIHRoYXQgdGhlIFBoaSBncmFwaCB3ZSBwcm9k
dWNlIGhlcmUgd291bGQKICAgICAgICAgLy8gYmUgdHJpdmlhbGx5IHJlZHVuZGFudCB0byB0aGUg
b25lIHdlIGFscmVhZHkgaGF2ZS4KICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKSB7Ci0g
ICAgICAgICAgICBkYXRhTG9nKCJHcmFwaCBiZWZvcmUgUHV0TG9jYWwgc2lua2luZzpcbiIpOwor
ICAgICAgICAgICAgZGF0YUxvZygiR3JhcGggYmVmb3JlIFB1dFN0YWNrIHNpbmtpbmc6XG4iKTsK
ICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTgw
LDcgKzExNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChub2Rl
LT5vcCgpID09IFB1dExvY2FsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5vcCgpID09IFB1dFN0YWNrKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlLm9wZXJhbmQob3BlcmFuZCkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOwogICAgICAgICAgICAgICAgIH0KQEAgLTIxMiw3NiArMTQ3LDc3IEBAIHB1YmxpYzoK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGxpdmVBdEhlYWQuYXRJbmRleCgwKS5udW1iZXJPZkFy
Z3VtZW50cygpOyBpLS07KQogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRy
LCBsaXZlQXRIZWFkLmF0SW5kZXgoMCkuYXJndW1lbnQoaSkpOwogICAgICAgICAKLSAgICAgICAg
Ly8gTmV4dCBpZGVudGlmeSB3aGVyZSB3ZSB3b3VsZCB3YW50IHRvIHNpbmsgUHV0TG9jYWxzIHRv
LiBXZSBzYXkgdGhhdCB0aGVyZSBpcyBhIGRlZmVycmVkCi0gICAgICAgIC8vIGZsdXNoIGlmIHdl
IGhhZCBhIFB1dExvY2FsIHdpdGggYSBnaXZlbiBWYXJpYWJsZUFjY2Vzc0RhdGEqIGJ1dCBpdCBo
YXNuJ3QgYmVlbgotICAgICAgICAvLyBtYXRlcmlhbGl6ZWQgeWV0LiBEZWZlcnJhbHMgaGF2ZSB0
aGUgZm9sbG93aW5nIGxhdHRpY2U7IGJ1dCBpdCdzIHdvcnRoIG5vdGluZyB0aGF0IHRoZQotICAg
ICAgICAvLyBUT1AgcGFydCBvZiB0aGUgbGF0dGljZSBzZXJ2ZXMgYW4gZW50aXJlbHkgZGlmZmVy
ZW50IHB1cnBvc2UgdGhhbiB0aGUgcmVzdCBvZiB0aGUgbGF0dGljZToKLSAgICAgICAgLy8gaXQg
anVzdCBtZWFucyB0aGF0IHdlJ3JlIGluIGEgcmVnaW9uIG9mIGNvZGUgd2hlcmUgbm9ib2R5IHNo
b3VsZCBoYXZlIGJlZW4gcmVseWluZyBvbiB0aGUKLSAgICAgICAgLy8gdmFsdWUuIFRoZSByZXN0
IG9mIHRoZSBsYXR0aWNlIG1lYW5zIHRoYXQgd2UgZWl0aGVyIGhhdmUgYSBQdXRMb2NhbCB0aGF0
IGlzIGRlZmVycmVkIChpLmUuCi0gICAgICAgIC8vIHN0aWxsIG5lZWRzIHRvIGJlIGV4ZWN1dGVk
KSBvciB0aGVyZSBpc24ndCBvbmUgKGJlY2F1c2Ugd2UndmUgYWxyYWVkeSBleGVjdXRlZCBpdCku
CisgICAgICAgIC8vIE5leHQgaWRlbnRpZnkgd2hlcmUgd2Ugd291bGQgd2FudCB0byBzaW5rIFB1
dFN0YWNrcyB0by4gV2Ugc2F5IHRoYXQgdGhlcmUgaXMgYSBkZWZlcnJlZAorICAgICAgICAvLyBm
bHVzaCBpZiB3ZSBoYWQgYSBQdXRTdGFjayB3aXRoIGEgZ2l2ZW4gRmx1c2hGb3JtYXQgYnV0IGl0
IGhhc24ndCBiZWVuIG1hdGVyaWFsaXplZCB5ZXQuCisgICAgICAgIC8vIERlZmVycmFscyBoYXZl
IHRoZSBmb2xsb3dpbmcgbGF0dGljZTsgYnV0IGl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIFRP
UCBwYXJ0IG9mIHRoZQorICAgICAgICAvLyBsYXR0aWNlIHNlcnZlcyBhbiBlbnRpcmVseSBkaWZm
ZXJlbnQgcHVycG9zZSB0aGFuIHRoZSByZXN0IG9mIHRoZSBsYXR0aWNlOiBpdCBqdXN0IG1lYW5z
CisgICAgICAgIC8vIHRoYXQgd2UncmUgaW4gYSByZWdpb24gb2YgY29kZSB3aGVyZSBub2JvZHkg
c2hvdWxkIGhhdmUgYmVlbiByZWx5aW5nIG9uIHRoZSB2YWx1ZS4gVGhlCisgICAgICAgIC8vIHJl
c3Qgb2YgdGhlIGxhdHRpY2UgbWVhbnMgdGhhdCB3ZSBlaXRoZXIgaGF2ZSBhIFB1dFN0YWNrIHRo
YXQgaXMgZGVmZXJyZWQgKGkuZS4gc3RpbGwKKyAgICAgICAgLy8gbmVlZHMgdG8gYmUgZXhlY3V0
ZWQpIG9yIHRoZXJlIGlzbid0IG9uZSAoYmVjYXVzZSB3ZSd2ZSBhbHJhZWR5IGV4ZWN1dGVkIGl0
KS4KICAgICAgICAgLy8KICAgICAgICAgLy8gQm90dG9tOgotICAgICAgICAvLyAgICAgSW5zdGFu
dGlhdGVkIGFzIFZhcmlhYmxlRGVmZXJyYWwoKS4gCi0gICAgICAgIC8vICAgICBNZWFucyB0aGF0
IGFsbCBwcmV2aW91cyBQdXRMb2NhbHMgaGF2ZSBiZWVuIGV4ZWN1dGVkIHNvIHRoZXJlIGlzIG5v
dGhpbmcgZGVmZXJyZWQuCisgICAgICAgIC8vICAgICBSZXByZXNlbnRlZCBhcyBEZWFkRmx1c2gu
IAorICAgICAgICAvLyAgICAgTWVhbnMgdGhhdCBhbGwgcHJldmlvdXMgUHV0U3RhY2tzIGhhdmUg
YmVlbiBleGVjdXRlZCBzbyB0aGVyZSBpcyBub3RoaW5nIGRlZmVycmVkLgogICAgICAgICAvLyAg
ICAgRHVyaW5nIG1lcmdpbmcgdGhpcyBpcyBzdWJvcmRpbmF0ZSB0byB0aGUgb3RoZXIga2luZHMg
b2YgZGVmZXJyYWxzLCBiZWNhdXNlIGl0Ci0gICAgICAgIC8vICAgICByZXByZXNlbnRzIHRoZSBm
YWN0IHRoYXQgd2UndmUgYWxyZWFkeSBleGVjdXRlZCBhbGwgbmVjZXNzYXJ5IFB1dExvY2Fscy4g
VGhpcyBpbXBsaWVzCi0gICAgICAgIC8vICAgICB0aGF0IHRoZXJlICpoYWQqIGJlZW4gc29tZSBQ
dXRMb2NhbHMgdGhhdCB3ZSBzaG91bGQgaGF2ZSBleGVjdXRlZC4KKyAgICAgICAgLy8gICAgIHJl
cHJlc2VudHMgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBhbHJlYWR5IGV4ZWN1dGVkIGFsbCBuZWNlc3Nh
cnkgUHV0U3RhY2tzLiBUaGlzIGltcGxpZXMKKyAgICAgICAgLy8gICAgIHRoYXQgdGhlcmUgKmhh
ZCogYmVlbiBzb21lIFB1dFN0YWNrcyB0aGF0IHdlIHNob3VsZCBoYXZlIGV4ZWN1dGVkLgogICAg
ICAgICAvLwogICAgICAgICAvLyBUb3A6Ci0gICAgICAgIC8vICAgICBJbnN0YW50aWF0ZWQgYXMg
VmFyaWFibGVEZWZlcnJhbDo6Y29uZmxpY3QoKS4KKyAgICAgICAgLy8gICAgIFJlcHJlc2VudGVk
IGFzIENvbmZsaWN0aW5nRmx1c2guCiAgICAgICAgIC8vICAgICBSZXByZXNlbnRzIHRoZSBmYWN0
IHRoYXQgd2Uga25vdywgdmlhIGZvcndhcmQgZmxvdywgdGhhdCB0aGVyZSBpc24ndCBhbnkgdmFs
dWUgaW4gdGhlCiAgICAgICAgIC8vICAgICBnaXZlbiBsb2NhbCB0aGF0IGFueW9uZSBzaG91bGQg
aGF2ZSBiZWVuIHJlbHlpbmcgb24uIFRoaXMgY29tZXMgaW50byBwbGF5IGF0IHRoZQogICAgICAg
ICAvLyAgICAgcHJvbG9ndWUgKGJlY2F1c2UgaW4gU1NBIGZvcm0gYXQgdGhlIHByb2xvZ3VlIG5v
IGxvY2FsIGhhcyBhbnkgdmFsdWUpIG9yIHdoZW4gd2UgbWVyZ2UKLSAgICAgICAgLy8gICAgIGRl
ZmVycmFscyBmb3IgZGlmZmVyZW50IFZhcmlhYmxlQWNjZXNzRGF0YSoncy4gQSBWQUQgZW5jb21w
YXNzZXMgYSBsZXhpY2FsIHNjb3BlIGluCi0gICAgICAgIC8vICAgICB3aGljaCB0aGUgbG9jYWwg
aGFzIHNvbWUgc2VtYW50aWMgbWVhbmluZzsgaWYgd2UgaGFkIHN0b3JlcyBmcm9tIGRpZmZlcmVu
dCBsZXhpY2FsCi0gICAgICAgIC8vICAgICBzY29wZXMgdGhhdCBnb3QgbWVyZ2VkIHRvZ2V0aGVy
IHRoZW4gd2Uga25vdyB0aGF0IHdlJ3JlIG5vdCBpbiBlaXRoZXIgc2NvcGUgYW55bW9yZS4KLSAg
ICAgICAgLy8gICAgIE5vdGUgdGhhdCB0aGlzIGlzIGFsbCBhcHByb3hpbWF0ZSBhbmQgb25seSBw
cmVjaXNlIGVub3VnaCB0byBsYXRlciBhbnN3ZXIgcXVlc3Rpb25zCi0gICAgICAgIC8vICAgICBw
ZXJ0aW5lbnQgdG8gc2lua2luZy4gRm9yIGV4YW1wbGUsIHRoaXMgZG9lc24ndCBhbHdheXMgZGV0
ZWN0IHdoZW4gYSBsb2NhbCBpcyBubwotICAgICAgICAvLyAgICAgbG9uZ2VyIHNlbWFudGljYWxs
eSByZWxldmFudCAtIHdlIG1heSB3ZWxsIGhhdmUgYSBkZWZlcnJhbCBmcm9tIGluc2lkZSBzb21l
IGlubGluZWQKLSAgICAgICAgLy8gICAgIGNhbGwgc3Vydml2ZSBvdXRzaWRlIG9mIHRoYXQgaW5s
aW5lZCBjb2RlLCBhbmQgdGhpcyBpcyBnZW5lcmFsbHkgT0suIEluIHRoZSB3b3JzdCBjYXNlCi0g
ICAgICAgIC8vICAgICBpdCBtZWFucyB0aGF0IHdlIG1pZ2h0IHRoaW5rIHRoYXQgYSBkZWZlcnJh
bCB0aGF0IGlzIGFjdHVhbGx5IGRlYWQgbXVzdCBzdGlsbCBiZQotICAgICAgICAvLyAgICAgZXhl
Y3V0ZWQuIEJ1dCB3ZSB1c3VhbGx5IGNhdGNoIHRoYXQgd2l0aCBsaXZlbmVzcy4gTGl2ZW5lc3Mg
ZG9lc24ndCBhbHdheXMgY2F0Y2ggaXQKLSAgICAgICAgLy8gICAgIGJlY2F1c2UgbGl2ZW5lc3Mg
aXMgY29uc2VydmF0aXZlLgorICAgICAgICAvLyAgICAgZGVmZXJyYWxzIGZvciBkaWZmZXJlbnQg
Zm9ybWF0cydzLiBBIGxleGljYWwgc2NvcGUgaW4gd2hpY2ggYSBsb2NhbCBoYWQgc29tZSBzZW1h
bnRpYworICAgICAgICAvLyAgICAgbWVhbmluZyB3aWxsIGJ5IHRoaXMgcG9pbnQgc2hhcmUgdGhl
IHNhbWUgZm9ybWF0OyBpZiB3ZSBoYWQgc3RvcmVzIGZyb20gZGlmZmVyZW50CisgICAgICAgIC8v
ICAgICBsZXhpY2FsIHNjb3BlcyB0aGF0IGdvdCBtZXJnZWQgdG9nZXRoZXIgdGhlbiB3ZSBtYXkg
aGF2ZSBhIGNvbmZsaWN0aW5nIGZvcm1hdC4gSGVuY2UKKyAgICAgICAgLy8gICAgIGEgY29uZmxp
Y3RpbmcgZm9ybWF0IHByb3ZlcyB0aGF0IHdlJ3JlIG5vIGxvbmdlciBpbiBhbiBhcmVhIGluIHdo
aWNoIHRoZSB2YXJpYWJsZSB3YXMKKyAgICAgICAgLy8gICAgIGluIHNjb3BlLiBOb3RlIHRoYXQg
dGhpcyBpcyBhbGwgYXBwcm94aW1hdGUgYW5kIG9ubHkgcHJlY2lzZSBlbm91Z2ggdG8gbGF0ZXIg
YW5zd2VyCisgICAgICAgIC8vICAgICBxdWVzdGlvbnMgcGVydGluZW50IHRvIHNpbmtpbmcuIEZv
ciBleGFtcGxlLCB0aGlzIGRvZXNuJ3QgYWx3YXlzIGRldGVjdCB3aGVuIGEgbG9jYWwKKyAgICAg
ICAgLy8gICAgIGlzIG5vIGxvbmdlciBzZW1hbnRpY2FsbHkgcmVsZXZhbnQgLSB3ZSBtYXkgd2Vs
bCBoYXZlIGEgZGVmZXJyYWwgZnJvbSBpbnNpZGUgc29tZQorICAgICAgICAvLyAgICAgaW5saW5l
ZCBjYWxsIHN1cnZpdmUgb3V0c2lkZSBvZiB0aGF0IGlubGluZWQgY29kZSwgYW5kIHRoaXMgaXMg
Z2VuZXJhbGx5IE9LLiBJbiB0aGUKKyAgICAgICAgLy8gICAgIHdvcnN0IGNhc2UgaXQgbWVhbnMg
dGhhdCB3ZSBtaWdodCB0aGluayB0aGF0IGEgZGVmZXJyYWwgdGhhdCBpcyBhY3R1YWxseSBkZWFk
IG11c3QKKyAgICAgICAgLy8gICAgIHN0aWxsIGJlIGV4ZWN1dGVkLiBCdXQgd2UgdXN1YWxseSBj
YXRjaCB0aGF0IHdpdGggbGl2ZW5lc3MuIExpdmVuZXNzIHVzdWFsbHkgY2F0Y2hlcworICAgICAg
ICAvLyAgICAgc3VjaCBjYXNlcywgYnV0IHRoYXQncyBub3QgZ3VhcmFudGVlZCBzaW5jZSBsaXZl
bmVzcyBpcyBjb25zZXJ2YXRpdmUuCiAgICAgICAgIC8vCiAgICAgICAgIC8vICAgICBXaGF0IFRv
cCBkb2VzIGdpdmUgdXMgaXMgZGV0ZWN0cyBzaXR1YXRpb25zIHdoZXJlIHdlIGJvdGggZG9uJ3Qg
bmVlZCB0byBjYXJlIGFib3V0IGEKICAgICAgICAgLy8gICAgIGRlZmVycmFsIGFuZCB0aGVyZSBp
cyBubyB3YXkgdGhhdCB3ZSBjb3VsZCByZWFzb24gYWJvdXQgaXQgYW55d2F5LiBJZiB3ZSBtZXJn
ZWQKLSAgICAgICAgLy8gICAgIGRlZmVycmFscyBmb3IgZGlmZmVyZW50IHZhcmlhYmxlcyB0aGVu
IHdlIHdvdWxkbid0IGtub3cgdGhlIGZvcm1hdCB0byB1c2UuIFNvLCB3ZQotICAgICAgICAvLyAg
ICAgdXNlIFRvcCBpbiB0aGF0IGNhc2UgYmVjYXVzZSB0aGF0J3MgYWxzbyBhIGNhc2Ugd2hlcmUg
d2Uga25vdyB0aGF0IHdlIGNhbiBpZ25vcmUgdGhlCisgICAgICAgIC8vICAgICBkZWZlcnJhbHMg
Zm9yIGRpZmZlcmVudCBmb3JtYXRzIHRoZW4gd2Ugd291bGRuJ3Qga25vdyB0aGUgZm9ybWF0IHRv
IHVzZS4gU28sIHdlIHVzZQorICAgICAgICAvLyAgICAgVG9wIGluIHRoYXQgY2FzZSBiZWNhdXNl
IHRoYXQncyBhbHNvIGEgY2FzZSB3aGVyZSB3ZSBrbm93IHRoYXQgd2UgY2FuIGlnbm9yZSB0aGUK
ICAgICAgICAgLy8gICAgIGRlZmVycmFsLgogICAgICAgICAvLwotICAgICAgICAvLyBEZWZlcnJh
bCB3aXRoIGEgY29uY3JldGUgVmFyaWFibGVBY2Nlc3NEYXRhKjoKLSAgICAgICAgLy8gICAgIElu
c3RhbnRpYXRlZCBhcyBWYXJpYWJsZURlZmVycmFsKHNvbWVWYXJpYWJsZUFjY2Vzc0RhdGEpCi0g
ICAgICAgIC8vICAgICBSZXByZXNlbnRzIHRoZSBmYWN0IHRoYXQgdGhlIG9yaWdpbmFsIGNvZGUg
d291bGQgaGF2ZSBkb25lIGEgUHV0TG9jYWwgYnV0IHdlIGhhdmVuJ3QKLSAgICAgICAgLy8gICAg
IGlkZW50aWZpZWQgYW4gb3BlcmF0aW9uIHRoYXQgd291bGQgaGF2ZSBvYnNlcnZlZCB0aGF0IFB1
dExvY2FsLgorICAgICAgICAvLyBEZWZlcnJhbCB3aXRoIGEgY29uY3JldGUgZm9ybWF0OgorICAg
ICAgICAvLyAgICAgUmVwcmVzZW50ZWQgYnkgZm9ybWF0IHZhbHVlcyBvdGhlciB0aGFuIERlYWRG
bHVzaCBvciBDb25mbGljdGluZ0ZsdXNoLgorICAgICAgICAvLyAgICAgUmVwcmVzZW50cyB0aGUg
ZmFjdCB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdvdWxkIGhhdmUgZG9uZSBhIFB1dFN0YWNrIGJ1
dCB3ZSBoYXZlbid0CisgICAgICAgIC8vICAgICBpZGVudGlmaWVkIGFuIG9wZXJhdGlvbiB0aGF0
IHdvdWxkIGhhdmUgb2JzZXJ2ZWQgdGhhdCBQdXRTdGFjay4KICAgICAgICAgLy8KICAgICAgICAg
Ly8gVGhpcyBjb2RlIGhhcyBzb21lIGludGVyZXN0aW5nIHF1aXJrcyBiZWNhdXNlIG9mIHRoZSBm
YWN0IHRoYXQgbmVpdGhlciBsaXZlbmVzcyBub3IKICAgICAgICAgLy8gZGVmZXJyYWxzIGFyZSB2
ZXJ5IHByZWNpc2UuIFRoZXkgYXJlIG9ubHkgcHJlY2lzZSBlbm91Z2ggdG8gYmUgYWJsZSB0byBj
b3JyZWN0bHkgdGVsbCB1cwotICAgICAgICAvLyB3aGVuIHdlIG1heSBbc2ljXSBuZWVkIHRvIGV4
ZWN1dGUgUHV0TG9jYWxzLiBUaGlzIG1lYW5zIHRoYXQgdGhleSBtYXkgcmVwb3J0IHRoZSBuZWVk
IHRvCi0gICAgICAgIC8vIGV4ZWN1dGUgYSBQdXRMb2NhbCBpbiBjYXNlcyB3aGVyZSB3ZSBhY3R1
YWxseSBkb24ndCByZWFsbHkgbmVlZCBpdCwgYW5kIHRoYXQncyB0b3RhbGx5IE9LLgotICAgICAg
ICBCbG9ja01hcDxPcGVyYW5kczxWYXJpYWJsZURlZmVycmFsPj4gZGVmZXJyZWRBdEhlYWQobV9n
cmFwaCk7Ci0gICAgICAgIEJsb2NrTWFwPE9wZXJhbmRzPFZhcmlhYmxlRGVmZXJyYWw+PiBkZWZl
cnJlZEF0VGFpbChtX2dyYXBoKTsKKyAgICAgICAgLy8gd2hlbiB3ZSBtYXkgW3NpY10gbmVlZCB0
byBleGVjdXRlIFB1dFN0YWNrcy4gVGhpcyBtZWFucyB0aGF0IHRoZXkgbWF5IHJlcG9ydCB0aGUg
bmVlZCB0bworICAgICAgICAvLyBleGVjdXRlIGEgUHV0U3RhY2sgaW4gY2FzZXMgd2hlcmUgd2Ug
YWN0dWFsbHkgZG9uJ3QgcmVhbGx5IG5lZWQgaXQsIGFuZCB0aGF0J3MgdG90YWxseSBPSy4KKyAg
ICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+PiBkZWZlcnJlZEF0SGVhZChtX2dy
YXBoKTsKKyAgICAgICAgQmxvY2tNYXA8T3BlcmFuZHM8Rmx1c2hGb3JtYXQ+PiBkZWZlcnJlZEF0
VGFpbChtX2dyYXBoKTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKICAgICAgICAgICAgIGRlZmVycmVk
QXRIZWFkW2Jsb2NrXSA9Ci0gICAgICAgICAgICAgICAgT3BlcmFuZHM8VmFyaWFibGVEZWZlcnJh
bD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKKyAgICAgICAgICAgICAg
ICBPcGVyYW5kczxGbHVzaEZvcm1hdD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRI
ZWFkKTsKICAgICAgICAgICAgIGRlZmVycmVkQXRUYWlsW2Jsb2NrXSA9Ci0gICAgICAgICAgICAg
ICAgT3BlcmFuZHM8VmFyaWFibGVEZWZlcnJhbD4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRIZWFkKTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4oT3BlcmFu
ZHNMaWtlLCBibG9jay0+dmFyaWFibGVzQXRIZWFkKTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZGVmZXJyZWRBdEhlYWQuYXRJbmRleCgwKS5maWxsKFZhcmlhYmxlRGVmZXJyYWw6OmNv
bmZsaWN0KCkpOworICAgICAgICBkZWZlcnJlZEF0SGVhZC5hdEluZGV4KDApLmZpbGwoQ29uZmxp
Y3RpbmdGbHVzaCk7CiAgICAgICAgIAogICAgICAgICBkbyB7CiAgICAgICAgICAgICBjaGFuZ2Vk
ID0gZmFsc2U7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKLSAgICAgICAgICAgICAgICBP
cGVyYW5kczxWYXJpYWJsZURlZmVycmFsPiBkZWZlcnJlZCA9IGRlZmVycmVkQXRIZWFkW2Jsb2Nr
XTsKKyAgICAgICAgICAgICAgICBPcGVyYW5kczxGbHVzaEZvcm1hdD4gZGVmZXJyZWQgPSBkZWZl
cnJlZEF0SGVhZFtibG9ja107CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRGVmZXJyZWQgYXQgIiwgbm9kZSwg
IjoiLCBkZWZlcnJlZCwgIlxuIik7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBLaWxsTG9jYWwpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9IFZhcmlhYmxl
RGVmZXJyYWw6OmNvbmZsaWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgp
ID09IEtpbGxTdGFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFu
ZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gQ29uZmxpY3RpbmdGbHVzaDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIApAQCAtMjg5LDcgKzIyNSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChvcGVyYW5kLmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBtYXRlcmlhbGl6
ZSBqdXN0IGJlZm9yZSBhbnkgcmVhZHMuCi0gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJl
ZC5vcGVyYW5kKG9wZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5kKSA9IERlYWRGbHVzaDsKICAgICAgICAg
ICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHByZWNpc2VMb2NhbENsb2JiZXJpemUoCkBAIC0zMDAsNyArMjM2LDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBWYXJpYWJsZURlZmVycmFs
KG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWZlcnJlZC5vcGVyYW5kKG9wZXJhbmQpID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmZv
cm1hdDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKQEAgLTMxNiw3ICsyNTIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiQ29uc2lkZXJpbmcgIiwgVmlydHVhbFJlZ2lzdGVyKGRl
ZmVycmVkLm9wZXJhbmRGb3JJbmRleChpKSksICIgYXQgIiwgcG9pbnRlckR1bXAoYmxvY2spLCAi
LT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpLCAiOiAiLCBkZWZlcnJlZFtpXSwgIiBhbmQgIiwg
ZGVmZXJyZWRBdEhlYWRbc3VjY2Vzc29yXVtpXSwgIiBtZXJnZXMgdG8gIik7CiAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0gPQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3Nvcl1baV0ubWVyZ2UoZGVm
ZXJyZWRbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKGRlZmVycmVkQXRI
ZWFkW3N1Y2Nlc3Nvcl1baV0sIGRlZmVycmVkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZyhkZWZlcnJlZEF0SGVhZFtzdWNjZXNzb3JdW2ldLCAiXG4iKTsK
QEAgLTMyNiwxNiArMjYyLDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICB9IHdo
aWxlIChjaGFuZ2VkKTsKICAgICAgICAgCi0gICAgICAgIC8vIFdlIHdpc2ggdG8gaW5zZXJ0IFB1
dExvY2FscyBhdCBhbGwgb2YgdGhlIG1hdGVyaWFsaXphdGlvbiBwb2ludHMsIHdoaWNoIGFyZSBk
ZWZpbmVkCisgICAgICAgIC8vIFdlIHdpc2ggdG8gaW5zZXJ0IFB1dFN0YWNrcyBhdCBhbGwgb2Yg
dGhlIG1hdGVyaWFsaXphdGlvbiBwb2ludHMsIHdoaWNoIGFyZSBkZWZpbmVkCiAgICAgICAgIC8v
IGltcGxpY2l0bHkgYXMgdGhlIHBsYWNlcyB3aGVyZSB3ZSBzZXQgZGVmZXJyZWQgdG8gRGVhZCB3
aGlsZSBpdCB3YXMgcHJldmlvdXNseSBub3QgRGVhZC4KICAgICAgICAgLy8gVG8gZG8gdGhpcywg
d2UgbWF5IG5lZWQgdG8gYnVpbGQgc29tZSBQaGkgZnVuY3Rpb25zIHRvIGhhbmRsZSBzdHVmZiBs
aWtlIHRoaXM6CiAgICAgICAgIC8vCiAgICAgICAgIC8vIEJlZm9yZToKICAgICAgICAgLy8KICAg
ICAgICAgLy8gICAgIGlmIChwKQotICAgICAgICAvLyAgICAgICAgIFB1dExvY2FsKHI0MiwgQHgp
CisgICAgICAgIC8vICAgICAgICAgUHV0U3RhY2socjQyLCBAeCkKICAgICAgICAgLy8gICAgIGVs
c2UKLSAgICAgICAgLy8gICAgICAgICBQdXRMb2NhbChyNDIsIEB5KQorICAgICAgICAvLyAgICAg
ICAgIFB1dFN0YWNrKHI0MiwgQHkpCiAgICAgICAgIC8vCiAgICAgICAgIC8vIEFmdGVyOgogICAg
ICAgICAvLwpAQCAtMzQ0LDEwICsyODAsMTAgQEAgcHVibGljOgogICAgICAgICAvLyAgICAgZWxz
ZQogICAgICAgICAvLyAgICAgICAgIFVwc2lsb24oQHksIF56KQogICAgICAgICAvLyAgICAgejog
UGhpKCkKLSAgICAgICAgLy8gICAgIFB1dExvY2FsKHI0MiwgQHopCisgICAgICAgIC8vICAgICBQ
dXRTdGFjayhyNDIsIEB6KQogICAgICAgICAvLwogICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQg
d2UgaGF2ZSBhbiBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZWFjaCBsb2NhbCwgYW5kIGEg
RGVmIGlzIGFueQotICAgICAgICAvLyBQdXRMb2NhbCBpbiB0aGUgb3JpZ2luYWwgcHJvZ3JhbS4g
VGhlIG9yaWdpbmFsIFB1dExvY2FscyB3aWxsIHNpbXBseSB2YW5pc2guCisgICAgICAgIC8vIFB1
dFN0YWNrIGluIHRoZSBvcmlnaW5hbCBwcm9ncmFtLiBUaGUgb3JpZ2luYWwgUHV0U3RhY2tzIHdp
bGwgc2ltcGx5IHZhbmlzaC4KICAgICAgICAgCiAgICAgICAgIE9wZXJhbmRzPFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKj4gb3BlcmFuZFRvVmFyaWFibGUoCiAgICAgICAgICAgICBPcGVyYW5kc0xp
a2UsIG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZCk7CkBAIC0zNjYsMTQgKzMwMiwx
NiBAQCBwdWJsaWM6CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKICAgICAgICAgICAgIGZvciAoTm9kZSogbm9kZSA6ICpi
bG9jaykgewogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAg
ICAgICAgIGNhc2UgUHV0TG9jYWw6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKICAg
ICAgICAgICAgICAgICAgICAgcHV0TG9jYWxzVG9TaW5rLmFkZChub2RlKTsKICAgICAgICAgICAg
ICAgICAgICAgc3NhQ2FsY3VsYXRvci5uZXdEZWYoCi0gICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYW5kVG9WYXJpYWJsZS5vcGVyYW5kKG5vZGUtPmxvY2FsKCkpLCBibG9jaywgbm9kZS0+Y2hp
bGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRUb1ZhcmlhYmxl
Lm9wZXJhbmQobm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCktPmxvY2FsKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAg
ICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgICAgICAgICAgICAgICAgIHNzYUNhbGN1bGF0b3IubmV3
RGVmKAotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZFRvVmFyaWFibGUub3BlcmFuZChu
b2RlLT5sb2NhbCgpKSwgYmxvY2ssIG5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZFRvVmFyaWFibGUub3BlcmFuZChub2RlLT5zdGFja0FjY2Vzc0RhdGEoKS0+bG9jYWwpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIG5vZGUpOwogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTM4OCwyNCArMzI2LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpZiAo
IWxpdmVBdEhlYWRbYmxvY2tdLm9wZXJhbmQob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZhcmlh
YmxlRGVmZXJyYWwgdmFyaWFibGVEZWZlcnJhbCA9IGRlZmVycmVkQXRIZWFkW2Jsb2NrXS5vcGVy
YW5kKG9wZXJhbmQpOworICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVy
cmVkQXRIZWFkW2Jsb2NrXS5vcGVyYW5kKG9wZXJhbmQpOwogCiAgICAgICAgICAgICAgICAgLy8g
V2UgY291bGQgaGF2ZSBhbiBpbnZhbGlkIGRlZmVycmFsIGJlY2F1c2UgbGl2ZW5lc3MgaXMgaW1w
cmVjaXNlLgotICAgICAgICAgICAgICAgIGlmICghdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJs
ZSgpKQorICAgICAgICAgICAgICAgIGlmICghaXNDb25jcmV0ZShmb3JtYXQpKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgUGhpIGZvciAiLCBvcGVyYW5k
LCAiIGF0ICIsIHBvaW50ZXJEdW1wKGJsb2NrKSwgIlxuIik7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgTm9kZSogcGhpTm9kZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjSGVhcFRv
cCwgUGhpLCBOb2RlT3JpZ2luKCkpOwotICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbnVsbHB0ciwgdmFyaWFibGVEZWZlcnJhbC5oYXNWYXJpYWJsZSgpKTsKLSAgICAgICAgICAg
ICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZs
dXNoRm9ybWF0KCk7CiAgICAgICAgICAgICAgICAgcGhpTm9kZS0+bWVyZ2VGbGFncyhyZXN1bHRG
b3IoZm9ybWF0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHBoaU5vZGU7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgCiAgICAgICAgIE9wZXJhbmRzPE5vZGUqPiBtYXBwaW5nKE9wZXJhbmRz
TGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKLSAgICAgICAgT3BlcmFu
ZHM8VmFyaWFibGVEZWZlcnJhbD4gZGVmZXJyZWQ7CisgICAgICAgIE9wZXJhbmRzPEZsdXNoRm9y
bWF0PiBkZWZlcnJlZDsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgu
YmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewogICAgICAgICAgICAgbWFwcGluZy5maWxsKG51bGxw
dHIpOwogICAgICAgICAgICAgCkBAIC00NDAsMTggKzM3NiwxOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICAgICAgICAgIGRhdGFMb2coIkRlZmVycmVkIGF0ICIsIG5vZGUsICI6IiwgZGVmZXJyZWQs
ICJcbiIpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgUHV0TG9jYWw6IHsKLSAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNz
RGF0YSgpOwotICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZh
cmlhYmxlLT5sb2NhbCgpOwotICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9w
ZXJhbmQpID0gVmFyaWFibGVEZWZlcnJhbCh2YXJpYWJsZSk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRTdGFjazogeworICAgICAgICAgICAgICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEg
PSBub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9wZXJhbmQgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICAgICAgZGVmZXJy
ZWQub3BlcmFuZChvcGVyYW5kKSA9IGRhdGEtPmZvcm1hdDsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICBNYXBwaW5n
ICIsIG9wZXJhbmQsICIgdG8gIiwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCAiIGF0ICIsIG5vZGUs
ICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLm9wZXJhbmQob3BlcmFuZCkgPSBu
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBL
aWxsTG9jYWw6IHsKLSAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChub2RlLT51
bmxpbmtlZExvY2FsKCkpID0gVmFyaWFibGVEZWZlcnJhbCgpOworICAgICAgICAgICAgICAgIGNh
c2UgS2lsbFN0YWNrOiB7CisgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IENvbmZsaWN0aW5nRmx1c2g7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTQ2MCwz
NiArMzk2LDM2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcGVyYW5k
LmlzSGVhZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVmZXJyYWwg
dmFyaWFibGVEZWZlcnJhbCA9IGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IGRlZmVycmVkLm9wZXJhbmQo
b3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29uY3JldGUoZm9ybWF0
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gR290dGEgaW5zZXJ0IGEgUHV0TG9jYWwu
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBHb3R0YSBpbnNlcnQgYSBQdXRTdGFjay4KICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkluc2VydGluZyBhIFB1dExvY2FsIGZvciAiLCBvcGVyYW5kLCAiIGF0
ICIsIG5vZGUsICJcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIklu
c2VydGluZyBhIFB1dFN0YWNrIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIG5vZGUsICJcbiIpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwg
bm9kZSwgaW5jb21pbmcpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dExvY2FsLCBub2RlLT5vcmlnaW4sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKSks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShpbmNvbWluZywgdXNlS2luZEZvcih2
YXJpYWJsZURlZmVycmFsLnZhcmlhYmxlKCktPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9y
aWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNr
QWNjZXNzRGF0YS5hZGQob3BlcmFuZCwgZm9ybWF0KSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRWRnZShpbmNvbWluZywgdXNlS2luZEZvcihmb3JtYXQpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZlcnJlZC5vcGVyYW5kKG9w
ZXJhbmQpID0gRGVhZEZsdXNoOwogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgICAgICBwcmVjaXNlTG9jYWxDbG9iYmVyaXplKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgZXNjYXBlSGFuZGxlciwgZXNjYXBlSGFu
ZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIFsmXSAoVmlydHVhbFJlZ2lzdGVyLCBOb2Rl
KikgeyB9KTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIGEgR2V0TG9jYWwsIHRoZW4gd2UgYWxzbyBjcmVhdGUgYSBtYXBwaW5nLgorICAgICAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBhIEdldFN0YWNrLCB0aGVuIHdlIGFsc28gY3JlYXRl
IGEgbWFwcGluZy4KICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBh
YmxlIHRvIGp1c3QgZWxpbWluYXRlIHN1Y2ggR2V0TG9jYWxzLCB3aGVuIHdlIGtub3cKICAgICAg
ICAgICAgICAgICAgICAgLy8gd2hhdCB0aGVpciBpbmNvbWluZyB2YWx1ZSB3aWxsIGJlLgogICAg
ICAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxNjI0Ci0gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IEdldExvY2Fs
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5sb2NhbCgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBHZXRTdGFjaykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IGRhdGEtPmxv
Y2FsOwogICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5vcGVyYW5kKG9wZXJhbmQpID0g
bm9kZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTUwNSwxMCArNDQxLDggQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgb3BlcmFuZCA9IGluZGV4VG9PcGVyYW5kW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCJDcmVhdGluZyBVcHNpbG9uIGZvciAiLCBvcGVyYW5kLCAiIGF0ICIsIHBvaW50ZXJE
dW1wKGJsb2NrKSwgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yQmxvY2spLCAiXG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgVmFyaWFibGVEZWZlcnJhbCB2YXJpYWJsZURlZmVycmFsID0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkQXRIZWFkW3N1Y2Nlc3NvckJsb2NrXS5vcGVy
YW5kKG9wZXJhbmQpOwotICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIHZhcmlhYmxlRGVmZXJyYWwuaGFzVmFyaWFibGUoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlhYmxlRGVmZXJyYWwudmFyaWFibGUoKS0+Zmx1
c2hGb3JtYXQoKTsKKyAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gZGVm
ZXJyZWRBdEhlYWRbc3VjY2Vzc29yQmxvY2tdLm9wZXJhbmQob3BlcmFuZCk7CisgICAgICAgICAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbnVsbHB0ciwgaXNDb25jcmV0ZShmb3JtYXQp
KTsKICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3Jt
YXQpOwogICAgICAgICAgICAgICAgICAgICBOb2RlKiBpbmNvbWluZyA9IG1hcHBpbmcub3BlcmFu
ZChvcGVyYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmNvbWluZykgewpAQCAtNTI0
LDEyICs0NTgsMTIgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHBy
ZWRpY2F0ZTEpCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgUHV0Q2xvc3VyZVZhcihs
b2M0MikgLy8gcHJldmVudCBHQ1NFIG9mIG91ciBHZXRDbG9zdXJlVmFyJ3MKICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGlmIChwcmVkaWNhdGUyKQotICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gICAgIFB1dExvY2FsKGxvYzQyKSAvLyB3ZSBub3cgaGF2ZSBhIGNvbmNyZXRlIGRlZmVycmFs
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgUHV0U3RhY2sobG9jNDIpIC8vIHdlIG5v
dyBoYXZlIGEgY29uY3JldGUgZGVmZXJyYWwKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIC8v
IHdlIHN0aWxsIGhhdmUgdGhlIGNvbmNyZXRlIGRlZmVycmFsIGJlY2F1c2Ugd2UgbWVyZ2VkIHdp
dGggYm90dG9tCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXRDbG9zdXJlVmFyKGxvYzQy
KSAvLyBmb3JjZSBtYXRlcmlhbGl6YXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIGhhdmUgYSBQaGkgd2l0aCBubyBpbmNv
bWluZyB2YWx1ZSBmb3JtIHRoZSBiYXNpYyBibG9jayB0aGF0Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBieXBhc3NlZCB0aGUgUHV0TG9jYWwuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBieXBhc3NlZCB0aGUgUHV0U3RhY2suCiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIE5vdGU6IHdlIHNvcnQgb2YgY291bGQgaGF2ZSB1c2VkIHRo
ZSBlcXVpdmFsZW50IG9mIExMVk0ncyB1bmRlZiBoZXJlLiBUaGUKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHBvaW50IGlzIHRoYXQgaXQncyBPSyB0byBqdXN0IGxlYXZlIHJhbmRvbSBiaXRz
IGluIHRoZSBsb2NhbCBpZiB3ZSdyZQpAQCAtNTQ5LDcgKzQ4Myw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgLy8gRmluYWxseSBlbGltaW5hdGUgdGhlIHN1bmtlbiBQdXRMb2NhbHMgYnkgdHVy
bmluZyB0aGVtIGludG8gUGhhbnRvbXMuIFRoaXMga2VlcHMgd2hhdGV2ZXIKKyAgICAgICAgLy8g
RmluYWxseSBlbGltaW5hdGUgdGhlIHN1bmtlbiBQdXRTdGFja3MgYnkgdHVybmluZyB0aGVtIGlu
dG8gUGhhbnRvbXMuIFRoaXMga2VlcHMgd2hhdGV2ZXIKICAgICAgICAgLy8gdHlwZSBjaGVjayB0
aGV5IHdlcmUgZG9pbmcuIEFsc28gcHJlcGVuZCBLaWxsTG9jYWxzIHRvIHRoZW0gdG8gZW5zdXJl
IHRoYXQgd2Uga25vdyB0aGF0CiAgICAgICAgIC8vIHRoZSByZWxldmFudCB2YWx1ZSB3YXMgKm5v
dCogc3RvcmVkIHRvIHRoZSBzdGFjay4KICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fZ3JhcGguYmxvY2tzSW5OYXR1cmFsT3JkZXIoKSkgewpAQCAtNTYwLDcgKzQ5NCw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxMb2NhbCwgbm9kZS0+b3JpZ2luLCBPcEluZm8o
bm9kZS0+bG9jYWwoKS5vZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpLT5sb2NhbC5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb1BoYW50b20oKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTY4LDcgKzUw
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2Up
IHsKLSAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dExvY2FsIHNpbmtpbmc6XG4i
KTsKKyAgICAgICAgICAgIGRhdGFMb2coIkdyYXBoIGFmdGVyIFB1dFN0YWNrIHNpbmtpbmc6XG4i
KTsKICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAt
NTc4LDEwICs1MTIsMTAgQEAgcHVibGljOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKICAg
ICAKLWJvb2wgcGVyZm9ybVB1dExvY2FsU2lua2luZyhHcmFwaCYgZ3JhcGgpCitib29sIHBlcmZv
cm1QdXRTdGFja1NpbmtpbmcoR3JhcGgmIGdyYXBoKQogewotICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJERkcgUHV0TG9jYWwgU2lua2luZyBQaGFzZSIpOwotICAgIHJldHVybiBy
dW5QaGFzZTxQdXRMb2NhbFNpbmtpbmdQaGFzZT4oZ3JhcGgpOworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgUHV0U3RhY2sgU2lua2luZyBQaGFzZSIpOworICAgIHJldHVy
biBydW5QaGFzZTxQdXRTdGFja1NpbmtpbmdQaGFzZT4oZ3JhcGgpOwogfQogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0
YWNrU2lua2luZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5oCShyZXZpc2lvbiAxODA1ODApCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0TG9jYWxTaW5raW5nUGhhc2UuaDoxODA1ODApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZV9oCisj
ZGVmaW5lIERGR1B1dExvY2FsU2lua2luZ1BoYXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBT
aW5rcyBQdXRMb2NhbHMgdG8gdGhlIGFic29sdXRlIGxhdGVzdCBwb2ludCB3aGVyZSB0aGV5IGNh
biBwb3NzaWJseSBoYXBwZW4sIHdoaWNoIGlzIHVzdWFsbHkKKy8vIHNpZGUtZWZmZWN0cyB0aGF0
IG1heSBvYnNlcnZlIHRoZW0uIFRoaXMgZWxpbWluYXRlcyBQdXRMb2NhbHMgaWYgaXQgc2lua3Mg
dGhlbSBwYXN0IHRoZSBwb2ludCBvZgorLy8gdGhlaXIgZGVhdGhzLgorCitib29sIHBlcmZvcm1Q
dXRMb2NhbFNpbmtpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdQdXRMb2NhbFNpbmtpbmdQ
aGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1
dFN0YWNrU2lua2luZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKICAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDgg
KzIzLDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgREZHUHV0TG9jYWxTaW5r
aW5nUGhhc2VfaAotI2RlZmluZSBERkdQdXRMb2NhbFNpbmtpbmdQaGFzZV9oCisjaWZuZGVmIERG
R1B1dFN0YWNrU2lua2luZ1BoYXNlX2gKKyNkZWZpbmUgREZHUHV0U3RhY2tTaW5raW5nUGhhc2Vf
aAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKQEAgLTMyLDE1ICszMiwxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIEdyYXBoOwogCi0vLyBTaW5rcyBQdXRMb2Nh
bHMgdG8gdGhlIGFic29sdXRlIGxhdGVzdCBwb2ludCB3aGVyZSB0aGV5IGNhbiBwb3NzaWJseSBo
YXBwZW4sIHdoaWNoIGlzIHVzdWFsbHkKLS8vIHNpZGUtZWZmZWN0cyB0aGF0IG1heSBvYnNlcnZl
IHRoZW0uIFRoaXMgZWxpbWluYXRlcyBQdXRMb2NhbHMgaWYgaXQgc2lua3MgdGhlbSBwYXN0IHRo
ZSBwb2ludCBvZgorLy8gU2lua3MgUHV0U3RhY2tzIHRvIHRoZSBhYnNvbHV0ZSBsYXRlc3QgcG9p
bnQgd2hlcmUgdGhleSBjYW4gcG9zc2libHkgaGFwcGVuLCB3aGljaCBpcyB1c3VhbGx5CisvLyBz
aWRlLWVmZmVjdHMgdGhhdCBtYXkgb2JzZXJ2ZSB0aGVtLiBUaGlzIGVsaW1pbmF0ZXMgUHV0U3Rh
Y2tzIGlmIGl0IHNpbmtzIHRoZW0gcGFzdCB0aGUgcG9pbnQgb2YKIC8vIHRoZWlyIGRlYXRocy4K
IAotYm9vbCBwZXJmb3JtUHV0TG9jYWxTaW5raW5nKEdyYXBoJik7Citib29sIHBlcmZvcm1QdXRT
dGFja1NpbmtpbmcoR3JhcGgmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSNlbmRpZiAvLyBERkdQdXRMb2NhbFNpbmtpbmdQaGFz
ZV9oCisjZW5kaWYgLy8gREZHUHV0U3RhY2tTaW5raW5nUGhhc2VfaAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZl
cnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gU2V0QXJndW1lbnQpOwog
ICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdGlvbigpLAotICAgICAgICAgICAgICAgICAgICAgICAgR2V0TG9jYWws
IG5vZGUtPm9yaWdpbiwgT3BJbmZvKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYXJndW1lbnRHZXR0ZXJzLmFkZChjaGlsZE5vZGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJpYWJsZS0+
bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKSk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9hcmd1bWVu
dEdldHRlcnMuYWRkKGNoaWxkTm9kZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJndW1lbnRN
YXBwaW5nLmFkZChub2RlLCBjaGlsZE5vZGUpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAKQEAgLTE4OCwyNiArMTkwLDI2IEBAIHB1YmxpYzoKICAgICAgICAgLy8KICAgICAg
ICAgLy8gICAtIE1vdkhpbnQgaGFzIEtpbGxMb2NhbCBwcmVwZW5kZWQgdG8gaXQuCiAgICAgICAg
IC8vCi0gICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlhYmxlcyBsb3Nl
IHRoZWlyIHBoaXMuCisgICAgICAgIC8vICAgLSBHZXRMb2NhbCBvdmVyIGNhcHR1cmVkIHZhcmlh
YmxlcyBsb3NlIHRoZWlyIHBoaXMgYW5kIGJlY29tZSBHZXRTdGFjay4KICAgICAgICAgLy8KICAg
ICAgICAgLy8gICAtIEdldExvY2FsIG92ZXIgdW5jYXB0dXJlZCB2YXJpYWJsZXMgZGllIGFuZCBn
ZXQgcmVwbGFjZWQgd2l0aCByZWZlcmVuY2VzIHRvIHRoZSBub2RlCiAgICAgICAgIC8vICAgICBz
cGVjaWZpZWQgYnkgdmFsdWVGb3JPcGVyYW5kLgogICAgICAgICAvLwotICAgICAgICAvLyAgIC0g
U2V0TG9jYWwgdHVybnMgaW50byBQdXRMb2NhbCBpZiBpdCdzIGZsdXNoZWQsIG9yIHR1cm5zIGlu
dG8gYSBDaGVjayBvdGhlcndpc2UuCisgICAgICAgIC8vICAgLSBTZXRMb2NhbCB0dXJucyBpbnRv
IFB1dFN0YWNrIGlmIGl0J3MgZmx1c2hlZCwgb3IgdHVybnMgaW50byBhIENoZWNrIG90aGVyd2lz
ZS4KICAgICAgICAgLy8KICAgICAgICAgLy8gICAtIEZsdXNoIGxvc2VzIGl0cyBjaGlsZHJlbiBh
bmQgdHVybnMgaW50byBhIFBoYW50b20uCiAgICAgICAgIC8vCiAgICAgICAgIC8vICAgLSBQaGFu
dG9tTG9jYWwgYmVjb21lcyBQaGFudG9tLCBhbmQgaXRzIGNoaWxkIGlzIHdoYXRldmVyIGlzIHNw
ZWNpZmllZCBieQogICAgICAgICAvLyAgICAgdmFsdWVGb3JPcGVyYW5kLgogICAgICAgICAvLwot
ICAgICAgICAvLyAgIC0gU2V0QXJndW1lbnQgaXMgcmVtb3ZlZC4gTm90ZSB0aGF0IEdldExvY2Fs
IG5vZGVzIGhhdmUgYWxyZWFkeSBiZWVuIGluc2VydGVkLgorICAgICAgICAvLyAgIC0gU2V0QXJn
dW1lbnQgaXMgcmVtb3ZlZC4gTm90ZSB0aGF0IEdldFN0YWNrIG5vZGVzIGhhdmUgYWxyZWFkeSBi
ZWVuIGluc2VydGVkLgogICAgICAgICBPcGVyYW5kczxOb2RlKj4gdmFsdWVGb3JPcGVyYW5kKE9w
ZXJhbmRzTGlrZSwgbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKTsKICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGguYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgICAgICB2YWx1ZUZvck9wZXJhbmQuY2xlYXIoKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgLy8gQ1BTIHdpbGwgY2xhaW0gdGhhdCB0aGUgcm9vdCBibG9jayBoYXMgYWxsIGFyZ3Vt
ZW50cyBsaXZlLiBCdXQgd2UgaGF2ZSBhbHJlYWR5IGRvbmUKICAgICAgICAgICAgIC8vIHRoZSBm
aXJzdCBzdGVwIG9mIFNTQSBjb252ZXJzaW9uOiBhcmd1bWVudCBsb2NhbHMgYXJlIG5vIGxvbmdl
ciBsaXZlIGF0IGhlYWQ7Ci0gICAgICAgICAgICAvLyBpbnN0ZWFkIHdlIGhhdmUgR2V0TG9jYWwg
bm9kZXMgZm9yIGV4dHJhY3RpbmcgdGhlIHZhbHVlcyBvZiBhcmd1bWVudHMuIFNvLCB3ZQorICAg
ICAgICAgICAgLy8gaW5zdGVhZCB3ZSBoYXZlIEdldFN0YWNrIG5vZGVzIGZvciBleHRyYWN0aW5n
IHRoZSB2YWx1ZXMgb2YgYXJndW1lbnRzLiBTbywgd2UKICAgICAgICAgICAgIC8vIHNraXAgdGhl
IGF0LWhlYWQgYXZhaWxhYmxlIHZhbHVlIGNhbGN1bGF0aW9uIGZvciB0aGUgcm9vdCBibG9jay4K
ICAgICAgICAgICAgIGlmIChibG9jayAhPSBtX2dyYXBoLmJsb2NrKDApKSB7CiAgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgaSA9IHZhbHVlRm9yT3BlcmFuZC5zaXplKCk7IGktLTspIHsKQEAg
LTI3Myw3ICsyNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5v
cCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBNb3ZIaW50OiB7CiAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsTG9jYWwsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2lu
LAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5v
ZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CkBAIC0yODEsOSArMjgzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIFNldExv
Y2FsOiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpIHx8ICEhKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSXNGbHVzaGVkKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKFB1dExvY2FsKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSB8fCAhIShub2Rl
LT5mbGFncygpICYgTm9kZUlzRmx1c2hlZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1B1dFN0YWNrKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXJpYWJsZS0+bG9jYWwoKSwgdmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFu
ZERlZmF1bHRGbGFncyhDaGVjayk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBpZiAoIXZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKQEAgLTI5NCwxOCArMjk4LDIw
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOiB7
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50R2V0dGVycy5jb250YWlucyhu
b2RlKSk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlRm9yT3BlcmFuZC5vcGVyYW5kKG5vZGUt
PnN0YWNrQWNjZXNzRGF0YSgpLT5sb2NhbCkgPSBub2RlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVBY2Nl
c3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobV9hcmd1bWVudEdldHRlcnMuY29udGFpbnMobm9kZSkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIk1hcHBpbmc6ICIsIHZhcmlhYmxlLT5sb2NhbCgpLCAiIC0+ICIsIG5vZGUs
ICJcbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGb3JPcGVyYW5kLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gbm9kZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxk
cmVuLnJlc2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlh
YmxlLT5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZl
cnRUb0dldFN0YWNrKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHZhcmlhYmxlLT5sb2Nh
bCgpLCB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCkBAIC00MDEsNyArNDA3LDcgQEAgcHVibGljOgogICAgICAgICAg
ICAgLy8gdHJhY2sgdGhlIGFyZ3VtZW50IGxvYWRzIG9mIHRob3NlIGFyZ3VtZW50cyBmb3Igd2hp
Y2ggd2Ugc3BlY3VsYXRlIHR5cGUuIFdlIGRvbid0CiAgICAgICAgICAgICAvLyBzcGVjdWxhdGUg
dHlwZSBmb3IgY2FwdHVyZWQgYXJndW1lbnRzLgogICAgICAgICAgICAgaWYgKG5vZGUpCi0gICAg
ICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9y
bWF0KCk7CisgICAgICAgICAgICAgICAgZm9ybWF0ID0gbm9kZS0+c3RhY2tBY2Nlc3NEYXRhKCkt
PmZvcm1hdDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50Rm9y
bWF0c1tpXSA9IGZvcm1hdDsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbaV0gPSBu
b2RlOyAvLyBSZWNvcmQgdGhlIGxvYWQgdGhhdCBsb2FkcyB0aGUgYXJndW1lbnRzIGZvciB0aGUg
YmVuZWZpdCBvZiBleGl0IHByb2ZpbGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4
LDggKzExOCw5IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIEdldENhbGxlZToKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgU2V0TG9jYWw6
Ci0gICAgY2FzZSBQdXRMb2NhbDoKLSAgICBjYXNlIEtpbGxMb2NhbDoKKyAgICBjYXNlIFB1dFN0
YWNrOgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBN
b3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBjYXNlIFBoYW50b206CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxMzksOCArNTEzOSw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlSGludDoKICAgICBj
YXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgotICAgIGNhc2UgUHV0TG9jYWw6Ci0gICAgY2FzZSBL
aWxsTG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICBjYXNlIEtpbGxTdGFjazoKKyAgICBj
YXNlIEdldFN0YWNrOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAg
ICAgICBicmVhazsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUyMDgsOCArNTIwOCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICBjYXNlIENoZWNrU3RydWN0dXJlSW1tZWRpYXRlOgogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlSGludDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgotICAgIGNhc2UgUHV0
TG9jYWw6Ci0gICAgY2FzZSBLaWxsTG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICBjYXNl
IEtpbGxTdGFjazoKKyAgICBjYXNlIEdldFN0YWNrOgogICAgICAgICBERkdfQ1JBU0gobV9qaXQu
Z3JhcGgoKSwgbm9kZSwgIlVuZXhwZWN0ZWQgbm9kZSIpOwogICAgICAgICBicmVhazsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0YWNrTGF5b3V0UGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RhY2tMYXlvdXRQ
aGFzZS5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RhY2tMYXlvdXRQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAg
ICAgICAgICAgICAgICBjYXNlIFB1dExvY2FsOgogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6
CiAgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwpAQCAtMTAwLDYgKzk5LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIFB1dFN0YWNrOgorICAgICAgICAgICAgICAgIGNhc2UgR2V0U3RhY2s6IHsKKyAg
ICAgICAgICAgICAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBzdGFjayA9IG5vZGUtPnN0YWNrQWNj
ZXNzRGF0YSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2stPmxvY2FsLmlzQXJndW1l
bnQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICB1c2VkTG9jYWxzLnNldChzdGFjay0+bG9jYWwudG9Mb2NhbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNzEsNiArMTc5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSA9IGFzc2lnbihhbGxvY2F0aW9uLCB2YXJpYWJsZS0+bG9j
YWwoKSk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIGZvciAoU3RhY2tBY2Nlc3NEYXRh
KiBkYXRhIDogbV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YSkgeworICAgICAgICAgICAgaWYgKCFk
YXRhLT5sb2NhbC5pc0xvY2FsKCkpIHsKKyAgICAgICAgICAgICAgICBkYXRhLT5tYWNoaW5lTG9j
YWwgPSBkYXRhLT5sb2NhbDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oZGF0
YS0+bG9jYWwudG9Mb2NhbCgpKSA+PSBhbGxvY2F0aW9uLnNpemUoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChhbGxvY2F0aW9uW2RhdGEtPmxvY2FsLnRvTG9j
YWwoKV0gPT0gVUlOVF9NQVgpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRhdGEtPm1hY2hpbmVMb2NhbCA9IGFzc2lnbihhbGxvY2F0aW9uLCBk
YXRhLT5sb2NhbCk7OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoY29kZUJsb2Nr
KCktPnVzZXNBcmd1bWVudHMoKSkgewogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGFyZ3Vt
ZW50c1JlZ2lzdGVyID0KICAgICAgICAgICAgICAgICBhc3NpZ24oYWxsb2NhdGlvbiwgY29kZUJs
b2NrKCktPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIGNhbm9u
aWNhbFJlc3VsdFJlcHJlc2VudGF0aW9uKG5vZGUtPnJlc3VsdCgpKSA9PSBjYW5vbmljYWxSZXN1
bHRSZXByZXNlbnRhdGlvbihub2RlLT5jaGlsZDEoKS0+cmVzdWx0KCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKLSAgICAgICAg
ICAgICAgICBjYXNlIFB1dExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RhY2s6CiAg
ICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgogICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSksICEhbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewpAQCAtNDMzLDYgKzQzMywyNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAg
ICAgICBjYXNlIENoZWNrSW5Cb3VuZHM6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXRIaW50OgorICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmVJbW1lZGlhdGU6CisgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmVIaW50OgorICAgICAgICAgICAgICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdP
YmplY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgICAgICAgICBj
YXNlIEtpbGxTdGFjazoKKyAgICAgICAgICAgICAgICBjYXNlIEdldFN0YWNrOgorICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEidW5leHBlY3RlZCBub2RlIHR5cGUgaW4gQ1BT
Iik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewpAQCAtNDkzLDYgKzUxMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCisgICAgICAg
ICAgICBWQUxJREFURSgoYmxvY2spLCBibG9jay0+cGhpcy5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgCiAgICAgICAgICAgICB1bnNpZ25lZCBub2RlSW5kZXggPSAwOwogICAgICAgICAgICAgZm9y
ICg7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCkgJiYgIWJsb2NrLT5hdChub2RlSW5kZXgpLT5v
cmlnaW4uZm9yRXhpdC5pc1NldCgpOyBub2RlSW5kZXgrKykgeyB9CiAgICAgICAgICAgICAKQEAg
LTUwOCw2ICs1MjgsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCAhbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIEdl
dExvY2FsOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAg
Y2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISJiYWQgbm9kZSB0eXBlIGZv
ciBTU0EiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBBZGQgbW9yZSB0aGluZ3MgaGVyZS4KICAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzQ3MQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxs
b2NhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw4IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIHJ1bigpCiAgICAg
eworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIG1fZ3JhcGgubV9mb3JtID09
IFRocmVhZGVkQ1BTKTsKKyAgICAgICAgCiAgICAgICAgIFNjb3JlQm9hcmQgc2NvcmVCb2FyZCht
X2dyYXBoLm1fbmV4dE1hY2hpbmVMb2NhbCk7CiAgICAgICAgIHNjb3JlQm9hcmQuYXNzZXJ0Q2xl
YXIoKTsKICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2Jsb2NrSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MDU4MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsOSBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUo
Tm9kZSogCiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKICAgICBjYXNlIEdldExvY2Fs
OgogICAgIGNhc2UgU2V0TG9jYWw6Ci0gICAgY2FzZSBQdXRMb2NhbDoKLSAgICBjYXNlIEtpbGxM
b2NhbDoKKyAgICBjYXNlIFB1dFN0YWNrOgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAgIGNhc2Ug
R2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKICAgICBj
YXNlIFBoYW50b206CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgwNTgwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Myw3ICsy
NTMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBMVmFsdWUganNWYWx1ZSA9IG1fb3V0LmxvYWQ2
NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5v
ZGUpIHsKLSAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQg
PT0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCgpKTsKKyAgICAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9wZXJhbmQgPT0gbm9kZS0+c3RhY2tB
Y2Nlc3NEYXRhKCktPm1hY2hpbmVMb2NhbCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBpcyBhIGhhY2ssIGJ1dCBpdCdzIGFuIGVmZmVjdGl2ZSBvbmUuIEl0IGFs
bG93cyB1cyB0byBkbyBDU0Ugb24gdGhlCiAgICAgICAgICAgICAgICAgLy8gcHJpbW9yZGlhbCBs
b2FkIG9mIGFyZ3VtZW50cy4gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEdldExvY2FsIHRoYXQgZ290
IHB1dCBpbgpAQCAtNDU1LDExICs0NTUsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVFeHRyYWN0T1NSRW50cnlMb2Nh
bCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAg
ICAgICBjb21waWxlR2V0TG9jYWwoKTsKKyAgICAgICAgY2FzZSBHZXRTdGFjazoKKyAgICAgICAg
ICAgIGNvbXBpbGVHZXRTdGFjaygpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
UHV0TG9jYWw6Ci0gICAgICAgICAgICBjb21waWxlUHV0TG9jYWwoKTsKKyAgICAgICAgY2FzZSBQ
dXRTdGFjazoKKyAgICAgICAgICAgIGNvbXBpbGVQdXRTdGFjaygpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6CiAgICAgICAgICAgICBjb21w
aWxlR2V0TXlBcmd1bWVudHNMZW5ndGgoKTsKQEAgLTgyNSw3ICs4MjUsNyBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0SGludDoKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmVI
aW50OgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgotICAgICAgICBjYXNlIEtpbGxMb2NhbDoK
KyAgICAgICAgY2FzZSBLaWxsU3RhY2s6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbnJlY29nbml6
ZWQgbm9kZSBpbiBGVEwgYmFja2VuZCIpOwpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgc2V0SlNWYWx1ZShtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoYnVmZmVyICsg
bV9ub2RlLT51bmxpbmtlZExvY2FsKCkudG9Mb2NhbCgpKSkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGNvbXBpbGVHZXRMb2NhbCgpCisgICAgdm9pZCBjb21waWxlR2V0U3RhY2soKQogICAgIHsK
ICAgICAgICAgLy8gR2V0TG9jYWxzIGFyaXNlIG9ubHkgZm9yIGNhcHR1cmVkIHZhcmlhYmxlcyBh
bmQgYXJndW1lbnRzLiBGb3IgYXJndW1lbnRzLCB3ZSBtaWdodCBoYXZlCiAgICAgICAgIC8vIGFs
cmVhZHkgbG9hZGVkIGl0LgpAQCAtMTA3Myw0NyArMTA3Myw1MCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpOworICAgICAgICBTdGFja0FjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnN0
YWNrQWNjZXNzRGF0YSgpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUu
dmFyaWFibGVzKCkub3BlcmFuZChkYXRhLT5sb2NhbCk7CisgICAgICAgIAorICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNDb25jcmV0ZShkYXRhLT5mb3JtYXQpKTsKKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGRhdGEtPmZvcm1hdCAhPSBGbHVzaGVkRG91
YmxlKTsgLy8gVGhpcyBqdXN0IGhhcHBlbnMgdG8gbm90IGFyaXNlIGZvciBHZXRTdGFja3MsIHJp
Z2h0IG5vdy4gSXQgd291bGQgYmUgdHJpdmlhbCB0byBzdXBwb3J0LgogICAgICAgICAKICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQotICAgICAgICAgICAgc2V0
SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSkp
OworICAgICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IoZGF0YS0+bWFj
aGluZUxvY2FsKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0
LmxvYWQ2NChhZGRyZXNzRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQubG9hZDY0KGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2Fs
KSkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVQdXRMb2NhbCgpCisgICAgdm9pZCBj
b21waWxlUHV0U3RhY2soKQogICAgIHsKLSAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIHN3aXRjaCAodmFy
aWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKKyAgICAgICAgU3RhY2tBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ub2RlLT5zdGFja0FjY2Vzc0RhdGEoKTsKKyAgICAgICAgc3dpdGNoIChkYXRhLT5mb3JtYXQp
IHsKICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgY2FzZSBGbHVzaGVkQXJn
dW1lbnRzOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2
YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFs
dWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZTogewog
ICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICAgICAgbV9vdXQuc3RvcmVEb3VibGUodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
Pm1hY2hpbmVMb2NhbCgpKSk7CisgICAgICAgICAgICBtX291dC5zdG9yZURvdWJsZSh2YWx1ZSwg
YWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBGbHVzaGVkSW50MzI6IHsKICAgICAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bWFjaGluZUxv
Y2FsKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IoZGF0
YS0+bWFjaGluZUxvY2FsKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgRmx1c2hlZEludDUyOiB7CiAgICAgICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7CisgICAg
ICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKGRhdGEtPm1hY2hpbmVMb2Nh
bCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEZsdXNoZWRDZWxsOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxs
KG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRk
cmVzc0Zvcih2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IoZGF0YS0+bWFjaGluZUxvY2FsKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xMTIxLDcgKzExMjQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgc3BlY3VsYXRlQm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQoCiAgICAgICAgICAgICAgICAgbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pLAotICAgICAgICAgICAg
ICAgIGFkZHJlc3NGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSk7CisgICAgICAgICAgICAg
ICAgYWRkcmVzc0ZvcihkYXRhLT5tYWNoaW5lTG9jYWwpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdC5oCShyZXZpc2lvbiAxODA1ODApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NSwxNCArNDUsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiAvLyBUcmFja3Mgb25lIE9TUiBleGl0IHNpdGUg
d2l0aGluIHRoZSBGVEwgSklULiBPU1IgZXhpdCBpbiBGVEwgd29ya3MgYnkgZGVjb25zdHJ1Y3Rp
bmcKIC8vIHRoZSBjcmF6eSB0aGF0IGlzIE9TUiBkb3duIHRvIHNpbXBsZSBTU0EgQ0ZHIHByaW1p
dGl2ZXMgdGhhdCBhbnkgY29tcGlsZXIgYmFja2VuZAotLy8gKGluY2x1ZGluZyBvZiBjb3Vyc2Ug
TExWTSkgY2FuIGdyb2sgYW5kIGRvIG1lYW5pbmdmdWwgdGhpbmdzIHRvLiBFeGNlcHQgZm9yCi0v
LyB3YXRjaHBvaW50LWJhc2VkIGV4aXRzLCB3aGljaCBoYXZlbid0IHlldCBiZWVuIGltcGxlbWVu
dGVkIChzZWUgd2Via2l0Lm9yZy9iLzExMzY0NyksCi0vLyBhbiBleGl0IGlzIGp1c3QgYSBjb25k
aXRpb25hbCBicmFuY2ggaW4gdGhlIGVtaXR0ZWQgY29kZSB3aGVyZSBvbmUgZGVzdGluYXRpb24g
aXMgdGhlCi0vLyBjb250aW51YXRpb24gYW5kIHRoZSBvdGhlciBpcyBhIGJhc2ljIGJsb2NrIHRo
YXQgcGVyZm9ybXMgYSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIGFuCi0vLyBleGl0IHRodW5rLiBU
aGlzIHRodW5rIHRha2VzIGFzIGl0cyBhcmd1bWVudHMgdGhlIGxpdmUgbm9uLWNvbnN0YW50Ci0v
LyBub3QtYWxyZWFkeS1hY2NvdW50ZWQtZm9yIGJ5dGVjb2RlIHN0YXRlLiBUbyBhcHByZWNpYXRl
IGhvdyB0aGlzIHdvcmtzIGNvbnNpZGVyIHRoZQotLy8gZm9sbG93aW5nIEphdmFTY3JpcHQgcHJv
Z3JhbSwgYW5kIGl0cyBsb3dlcmluZyBkb3duIHRvIExMVk0gSVIgaW5jbHVkaW5nIHRoZSByZWxl
dmFudAotLy8gZXhpdHM6CisvLyAoaW5jbHVkaW5nIG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3JvayBh
bmQgZG8gbWVhbmluZ2Z1bCB0aGluZ3MgdG8uIEFuIGV4aXQgaXMganVzdCBhCisvLyBjb25kaXRp
b25hbCBicmFuY2ggaW4gdGhlIGVtaXR0ZWQgY29kZSB3aGVyZSBvbmUgZGVzdGluYXRpb24gaXMg
dGhlIGNvbnRpbnVhdGlvbiBhbmQKKy8vIHRoZSBvdGhlciBpcyBhIGJhc2ljIGJsb2NrIHRoYXQg
cGVyZm9ybXMgYSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIGFuICBleGl0IHRodW5rLgorLy8gVGhp
cyB0aHVuayB0YWtlcyBhcyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25zdGFudCBub3Qt
YWxyZWFkeS1hY2NvdW50ZWQtZm9yCisvLyBieXRlY29kZSBzdGF0ZS4gVG8gYXBwcmVjaWF0ZSBo
b3cgdGhpcyB3b3JrcyBjb25zaWRlciB0aGUgZm9sbG93aW5nIEphdmFTY3JpcHQKKy8vIHByb2dy
YW0sIGFuZCBpdHMgbG93ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0aGUgcmVsZXZh
bnQgZXhpdHM6CiAvLwogLy8gZnVuY3Rpb24gZm9vKG8pIHsKIC8vICAgICB2YXIgYSA9IG8uYTsg
Ly8gcHJlZGljdGVkIGludApAQCAtNjYsMTAgKzY0LDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIC8vCiAvLyBCaXRPcihDaGVjazpJbnQzMjpAYSwgSW50MzI6NSkKIC8vCi0v
LyBXaGVyZSBAYSBpcyB0aGUgbm9kZSBmb3IgdGhlIEdldExvY2FsIG5vZGUgdGhhdCBnZXRzIHRo
ZSB2YWx1ZSBvZiB0aGUgJ2EnIHZhcmlhYmxlLgotLy8gQ29uY2VwdHVhbGx5LCB0aGlzIG5vZGUg
Y2FuIGJlIGZ1cnRoZXIgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyAobm90ZSB0aGF0IHRo
aXMKLS8vIHBhcnRpY3VsYXIgbG93ZXJpbmcgbmV2ZXIgYWN0dWFsbHkgaGFwcGVucyAtIHdlIHNr
aXAgdGhpcyBzdGVwIGFuZCBnbyBzdHJhaWdodCB0bwotLy8gTExWTSBJUiAtIGJ1dCBpdCdzIHN0
aWxsIHVzZWZ1bCB0byBzZWUgdGhpcyk6CisvLyBXaGVyZSBAYSBpcyB0aGUgbm9kZSBmb3IgdGhl
IHZhbHVlIG9mIHRoZSAnYScgdmFyaWFibGUuIENvbmNlcHR1YWxseSwgdGhpcyBub2RlIGNhbgor
Ly8gYmUgZnVydGhlciBicm9rZW4gZG93biB0byB0aGUgZm9sbG93aW5nIChub3RlIHRoYXQgdGhp
cyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyCisvLyBhY3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tp
cCB0aGlzIHN0ZXAgYW5kIGdvIHN0cmFpZ2h0IHRvIExMVk0gSVIgLSBidXQgaXQncyBzdGlsbAor
Ly8gdXNlZnVsIHRvIHNlZSB0aGlzKToKIC8vCiAvLyBleGl0SWYoQGEgaXMgbm90IGludDMyKTsK
IC8vIGNvbnRpbnVhdGlvbjsKQEAgLTEyNCwyMiArMTIyLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIC8vICAgYXJndW1lbnRzIGludG8gYXJndW1lbnQgcG9zaXRpb24pLCB0
aGUgYmFja2VuZCBjb3VsZCBjaG9vc2UgdG8gc2ltcGx5IGluZm9ybSB1cwogLy8gICB3aGVyZSBp
dCBoYWQgcGxhY2VkIHRoZSBhcmd1bWVudHMgYW5kIGV4cGVjdCB0aGUgY2FsbGVlIChpLmUuIHRo
ZSBleGl0IHRodW5rKSB0bwogLy8gICBmaWd1cmUgaXQgb3V0IGZyb20gdGhlcmUuIEl0IGNvdWxk
IGFsc28gdGVsbCB1cyB3aGF0IHdlIG5lZWQgdG8gZG8gdG8gcG9wIHN0YWNrLAotLy8gICBhbHRo
b3VnaCBhZ2FpbiwgaXQgZG9lc24ndCBoYXZlIHRvOyBpdCBjb3VsZCBqdXN0IGVtaXQgdGhhdCBj
b2RlIG5vcm1hbGx5LiBUaG91Z2gKLS8vICAgd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCwgd2Ug
Y291bGQ7IHRoZSBvbmx5IHRoaW5nIHRoYXQgd291bGQgY2hhbmdlIG9uIG91ciBlbmQKLS8vICAg
aXMgdGhhdCB3ZSdkIG5lZWQgZmVlZGJhY2sgZnJvbSB0aGUgYmFja2VuZCBhYm91dCB0aGUgbG9j
YXRpb24gb2YgdGhlIGFyZ3VtZW50cwotLy8gICBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGhp
bmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIHBvcCBzdGFjay4gVGhpcyB3b3VsZAotLy8gICBp
bnZvbHZlIHN3aXRjaGluZyB0aGUgbV92YWx1ZXMgYXJyYXkgdG8gdXNlIHNvbWV0aGluZyBtb3Jl
IGFraW4gdG8gVmFsdWVSZWNvdmVyeQotLy8gICByYXRoZXIgdGhhbiB0aGUgY3VycmVudCBFeGl0
VmFsdWUsIGFsYmVpdCBwb3NzaWJseSB3aXRoIHNvbWUgaGFja3MgdG8gYmV0dGVyCi0vLyAgIHVu
ZGVyc3RhbmQgdGhlIGtpbmRzIG9mIHBsYWNlcyB3aGVyZSB0aGUgTExWTSBiYWNrZW5kIHdvdWxk
IHB1dCB2YWx1ZXMuCisvLyAgIGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vzbid0IGhhdmUgdG87IGl0
IGNvdWxkIGp1c3QgZW1pdCB0aGF0IGNvZGUgbm9ybWFsbHkuIFdlIGRvCisvLyAgIGFsbCBvZiB0
aGVzZSB0aGluZ3MgdGhyb3VnaCB0aGUgcGF0Y2hwb2ludC9zdGFja21hcCBMTFZNIGludHJpbnNp
Y3MuCiAvLwogLy8gLSBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBhbGxvdyB0aGUgYmFja2VuZCB0
byBkbyBpdHMgb3duIGV4aXQgaG9pc3RpbmcsIGJ5IHVzaW5nCiAvLyAgIGludHJpbnNpY3MgKG9y
IG1ldGEtZGF0YSwgb3Igc29tZXRoaW5nKSB0byBpbmZvcm0gdGhlIGJhY2tlbmQgdGhhdCBpdCdz
IHNhZmUgdG8KIC8vICAgbWFrZSB0aGUgcHJlZGljYXRlIHBhc3NlZCB0byAnZXhpdElmKCknIG1v
cmUgdHJ1dGh5LgotLy8KLS8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCB3YXRj
aHBvaW50cyAoc2VlIHdlYmtpdC5vcmcvYi8xMTM2NDcpIGJ5IG1ha2luZwotLy8gICB0aGUgcHJl
ZGljYXRlIHBhc3NlZCB0byAnZXhpdElmKCknIGJlIGFuIGludHJpbnNpYyB0aGF0IHRoZSBiYWNr
ZW5kIGtub3dzIHRvIGJlCi0vLyAgIHRydWUgYXQgY29tcGlsZS10aW1lLiBUaGUgYmFja2VuZCBj
b3VsZCB0aGVuIHR1cm4gdGhlIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnRvIGEKLS8vICAgcmVwbGFj
ZWFibGUganVtcCwgbXVjaCBsaWtlIHRoZSBERkcgZG9lcy4KIAogc3RydWN0IE9TUkV4aXQgOiBw
dWJsaWMgREZHOjpPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdCgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFueS1zdW5rZW4tbG9jYWxzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFueS1zdW5rZW4tbG9jYWxz
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9t
YW55LXN1bmtlbi1sb2NhbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVu
Y3Rpb24gZm9vKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwsIG0sIG4sIG8sIHAs
IHEsIHIsIHMsIHQsIHUsIHYsIHcsIHgsIHksIHopIHsKKyAgICBpZiAoYSkKKyAgICAgICAgcmV0
dXJuIDQyOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDYzOworfQorCitmdW5jdGlvbiBiYXIo
YSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcywg
dCwgdSwgdiwgdywgeCwgeSwgeikgeworICAgIHJldHVybiBmb28oYSwgYiwgYywgZCwgZSwgZiwg
ZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcywgdCwgdSwgdiwgdywgeCwgeSwg
eik7Cit9CisKK2Z1bmN0aW9uIGJheihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBs
LCBtLCBuLCBvLCBwLCBxLCByLCBzLCB0LCB1LCB2LCB3LCB4LCB5LCB6KSB7CisgICAgcmV0dXJu
IGJhcihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCBy
LCBzLCB0LCB1LCB2LCB3LCB4LCB5LCB6KTsKK30KKworZnVuY3Rpb24gZnV6eihhLCBiLCBjLCBk
LCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLCB0LCB1LCB2LCB3
LCB4LCB5LCB6KSB7CisgICAgcmV0dXJuIGJheihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBq
LCBrLCBsLCBtLCBuLCBvLCBwLCBxLCByLCBzLCB0LCB1LCB2LCB3LCB4LCB5LCB6KTsKK30KKwor
ZnVuY3Rpb24gYnV6eihhLCBiLCBjLCBkLCBlLCBmLCBnLCBoLCBpLCBqLCBrLCBsLCBtLCBuLCBv
LCBwLCBxLCByLCBzLCB0LCB1LCB2LCB3LCB4LCB5LCB6KSB7CisgICAgcmV0dXJuIGZ1enooYSwg
YiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCwgbSwgbiwgbywgcCwgcSwgciwgcywgdCwg
dSwgdiwgdywgeCwgeSwgeik7Cit9CisKK25vSW5saW5lKGJ1enopOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpCisgICAgYnV6eigxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0
LCAyNSwgMjYpOwo=
</data>
<flag name="review"
          id="272327"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>