<?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>124883</bug_id>
          
          <creation_ts>2013-11-25 21:44:44 -0800</creation_ts>
          <short_desc>Stores to local captured variables should be intercepted</short_desc>
          <delta_ts>2013-12-02 11:56:14 -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>124630</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>954216</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-25 21:44:44 -0800</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>954217</commentid>
    <comment_count>1</comment_count>
      <attachid>217863</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-25 21:45:19 -0800</bug_when>
    <thetext>Created attachment 217863
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955044</commentid>
    <comment_count>2</comment_count>
      <attachid>218084</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-11-29 20:41:08 -0800</bug_when>
    <thetext>Created attachment 218084
getting interesting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955162</commentid>
    <comment_count>3</comment_count>
      <attachid>218113</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-01 10:00:10 -0800</bug_when>
    <thetext>Created attachment 218113
almost there</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955171</commentid>
    <comment_count>4</comment_count>
      <attachid>218117</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-01 11:23:53 -0800</bug_when>
    <thetext>Created attachment 218117
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955172</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-01 11:26:26 -0800</bug_when>
    <thetext>Attachment 218117 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/js/regress/captured-assignments-expected.txt&apos;, u&apos;LayoutTests/js/regress/captured-assignments.html&apos;, u&apos;LayoutTests/js/regress/script-tests/captured-assignments.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeUseDef.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:349:  The parameter name &quot;body&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 22 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>955174</commentid>
    <comment_count>6</comment_count>
      <attachid>218119</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-01 12:18:14 -0800</bug_when>
    <thetext>Created attachment 218119
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955175</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-12-01 12:20:08 -0800</bug_when>
    <thetext>Attachment 218119 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/js/regress/captured-assignments-expected.txt&apos;, u&apos;LayoutTests/js/regress/captured-assignments.html&apos;, u&apos;LayoutTests/js/regress/script-tests/captured-assignments.js&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/BytecodeUseDef.h&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.cpp&apos;, u&apos;Source/JavaScriptCore/bytecode/CodeBlock.h&apos;, u&apos;Source/JavaScriptCore/bytecode/Opcode.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp&apos;, u&apos;Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h&apos;, u&apos;Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp&apos;, u&apos;Source/JavaScriptCore/dfg/DFGCapabilities.cpp&apos;, u&apos;Source/JavaScriptCore/jit/JIT.cpp&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm&apos;, u&apos;Source/JavaScriptCore/llint/LowLevelInterpreter64.asm&apos;, u&apos;Source/JavaScriptCore/runtime/SymbolTable.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:349:  The parameter name &quot;body&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 22 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>955178</commentid>
    <comment_count>8</comment_count>
      <attachid>218121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-01 13:25:33 -0800</bug_when>
    <thetext>Created attachment 218121
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955469</commentid>
    <comment_count>9</comment_count>
      <attachid>218121</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-12-02 11:16:46 -0800</bug_when>
    <thetext>Comment on attachment 218121
the patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3475
&gt; +            &amp;&amp; operand &lt;= codeBlock-&gt;captureStart() &amp;&amp; operand &gt; codeBlock-&gt;captureEnd()) {

codeBlock-&gt;symbolTable()-&gt;isCaptured(operand)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955498</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 11:49:31 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/159943</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955505</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-12-02 11:55:11 -0800</bug_when>
    <thetext>Does this mean that it&apos;s illegal for a captured register to be the destination for any instruction other than captured_mov?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>955509</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-02 11:56:14 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Does this mean that it&apos;s illegal for a captured register to be the destination for any instruction other than captured_mov?

Yup!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>217863</attachid>
            <date>2013-11-25 21:45:19 -0800</date>
            <delta_ts>2013-11-29 20:41:08 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>6154</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTk3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0NCw4ICsyNDQ0LDcgQEAgYm9vbCBDb2RlQmxv
Y2s6OmlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdAogICAgIGlmICghc3ltYm9sVGFibGUoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG9wZXJhbmQub2Zmc2V0KCkgPD0gc3lt
Ym9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKLSAgICAgICAgJiYgb3BlcmFuZC5vZmZzZXQoKSA+
IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKKyAgICByZXR1cm4gc3ltYm9sVGFibGUoKS0+
aXNDYXB0dXJlZChvcGVyYW5kLm9mZnNldCgpKTsKIH0KIAogaW50IENvZGVCbG9jazo6ZnJhbWVQ
b2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGludCBtYWNoaW5lQ2FwdHVyZVN0
YXJ0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTc3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTU3LDExICsxMTU3LDE3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0TG9hZEcKICAgICByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKIH0KIAor
Ym9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKK3sKKyAgICBy
ZXR1cm4gKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgVmlydHVhbFJlZ2lzdGVyKG9w
ZXJhbmQpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgfHwgc3ltYm9sVGFibGUoKS5pc0NhcHR1cmVk
KG9wZXJhbmQpOworfQorCiBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMo
KS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBS
ZWFkT25seSk7Ci0KKyAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25s
eSwgZmFsc2UpOworICAgIAogICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJn
dW1lbnRzKQogICAgICAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogCkBAIC0xMTcz
LDcgKzExNzksNyBAQCBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlCiAg
ICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVM
YXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwot
ICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICByZXR1
cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNDYXB0dXJlZChsb2NhbC0+
aW5kZXgoKSkpOwogfQogCiBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKQEAgLTExODYsNyArMTE5Miw3IEBAIExvY2FsIEJ5dGVj
b2RlR2VuZXJhdG9yOjpjb25zdExvY2FsKGNvbnMKICAgICAgICAgcmV0dXJuIExvY2FsKCk7CiAK
ICAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZy
ZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBl
bnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0
QXR0cmlidXRlcygpLCBpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSk7CiB9CiAKIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCShyZXZpc2lvbiAxNTk3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMiw5ICsx
MjIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAgICAgICBM
b2NhbChSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0NhcHR1
cmVkKQogICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBtX2F0dHJp
YnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgICAgICwgbV9pc0NhcHR1cmVkKGlzQ2FwdHVyZWQp
CiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsMTAgKzEzNCwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgeyByZXR1cm4gbV9sb2NhbDsgfQogCiAg
ICAgICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5
OyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzQ2FwdHVyZWQoKSB7IHJldHVybiBtX2lzQ2Fw
dHVyZWQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7
CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlSYW5nZSB7CkBAIC0xNzEsNiArMTc1LDggQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJ
ZGVudGlmaWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJn
dW1lbnRzKCk7CiAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKTsKKyAgICAg
ICAgCiAgICAgICAgIExvY2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTG9j
YWwgY29uc3RMb2NhbChjb25zdCBJZGVudGlmaWVyJik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9u
IDE1OTc3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2Rl
Z2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjczLDExICs2NzMsMTIgQEAgUmVnaXN0ZXJJRCog
UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dAogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50
ID0gcmVzb2x2ZS0+aWRlbnRpZmllcigpOwogCiAgICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJh
dG9yLmxvY2FsKGlkZW50KSkgeworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbFJlZyA9IGxvY2Fs
LmdldCgpOwogICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxv
Y2FsID0gTG9jYWwoZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgbG9jYWwuZ2V0KCkpLCAwKTsKKyAgICAgICAgICAgIGxvY2FsUmVnID0gZ2VuZXJhdG9y
LmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcpOwogICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCksIG1fb3BlcmF0b3IpOworICAg
ICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKICAgICB9CiAKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQo
KSk7CkBAIC04MzgsMTIgKzgzOSwxMyBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0UmVz
b2x2ZShCeXRlCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSByZXNvbHZlLT5pZGVudGlm
aWVyKCk7CiAKICAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpKSB7
CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7CiAgICAgICAgIGlm
IChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9u
bHlFeGNlcHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgbG9jYWwgPSBMb2NhbChnZW5lcmF0
b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSks
IDApOworICAgICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbFJlZyk7CiAgICAgICAgIH0KLSAgICAgICAgZW1p
dEluY09yRGVjKGdlbmVyYXRvciwgbG9jYWwuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5nZXQo
KSk7CisgICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIGxvY2FsUmVnLCBtX29wZXJhdG9y
KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgbG9jYWxSZWcpOwogICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTU5Nzc3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDYgKzQ1NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBj
YXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNhcHR1cmVFbmQ7IH0KIAogICAgIGludCBjYXB0
dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1fY2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0
KTsgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVTdGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJl
RW5kKCk7CisgICAgfQogCiAgICAgaW50IHBhcmFtZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJh
bWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5j
bHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218084</attachid>
            <date>2013-11-29 20:41:08 -0800</date>
            <delta_ts>2013-12-01 10:00:10 -0800</delta_ts>
            <desc>getting interesting</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>45792</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTk4ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBACiAJCTBGODMzNUI3MTYzOUMx
RTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODg1RTExMTg0OUEzQkUw
MEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNl
RGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8q
IEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGlu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJC
OTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRp
ZmllcnMuY3BwICovOyB9OwpAQCAtMTU4Myw2ICsxNTg0LDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFF
MzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JyYW5jaERpcmVjdGlv
bi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyogREZHVmFyaWFkaWNGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWRpY0Z1bmN0aW9u
Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFkaWNGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVVc2VEZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGlu
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdE
QkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9G
VExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQw
MDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmll
cnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA1OCw2ICs0MDYwLDcgQEAK
IAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKKwkJCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxM
aW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5r
SW5mby5oICovLApAQCAtNDI2OSw2ICs0MjcyLDcgQEAKIAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAz
REZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
QjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjNFMTdBMEJCRkQwMEE4REI4
MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxNTk4ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgor
I2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdl
dHMuaCIKQEAgLTY3LDQyNCArNjgsMjYgQEAgc3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2Rl
QmxvY2sqIGNvZAogICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVC
bG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgRmFzdEJpdFZlY3RvciYgdXNlcykKLXsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRd
OwotICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgIC8vIE5vIHVz
ZXMuCi0gICAgY2FzZSBvcF9uZXdfcmVnZXhwOgotICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgot
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKLSAgICBjYXNlIG9wX3BvcF9zY29wZToKLSAgICBj
YXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgotICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKLSAg
ICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgotICAgIGNh
c2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF9jYXRjaDoKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEZpcnN0IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVh
dGVfYWN0aXZhdGlvbjogCi0gICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgotICAgIGNhc2Ug
b3BfdG9fdGhpczoKLSAgICBjYXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246Ci0gICAgY2FzZSBv
cF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAg
Y2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKLSAgICBjYXNlIG9w
X2VuZDoKLSAgICBjYXNlIG9wX3JldDoKLSAgICBjYXNlIG9wX2p0cnVlOgotICAgIGNhc2Ugb3Bf
amZhbHNlOgotICAgIGNhc2Ugb3BfamVxX251bGw6Ci0gICAgY2FzZSBvcF9qbmVxX251bGw6Ci0g
ICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCBz
ZWNvbmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgotICAgIGNhc2Ugb3BfcmV0
X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfamxlc3NlcToKLSAgICBjYXNlIG9wX2pncmVh
dGVyOgotICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAgICBjYXNlIG9wX2pubGVzczoKLSAgICBj
YXNlIG9wX2pubGVzc2VxOgotICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgotICAgIGNhc2Ugb3Bfam5n
cmVhdGVyZXE6Ci0gICAgY2FzZSBvcF9qbGVzczogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAg
ICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBGaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgYXJndW1lbnRzLgot
ICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKLSAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogot
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFu
ZCB0aGlyZCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6Ci0gICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgot
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAg
Y2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0g
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KLSAgICBj
YXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCi0gICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25k
IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgotICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKLSAgICBj
YXNlIG9wX2dldF9ieV9pZDoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKLSAg
ICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRl
cl9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoKLSAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Nl
bGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2N1c3RvbV9jaGFpbjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgotICAg
IGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3Ro
OgotICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6Ci0gICAgY2FzZSBvcF90eXBlb2Y6
Ci0gICAgY2FzZSBvcF9pc191bmRlZmluZWQ6Ci0gICAgY2FzZSBvcF9pc19ib29sZWFuOgotICAg
IGNhc2Ugb3BfaXNfbnVtYmVyOgotICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgotICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgotICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246Ci0gICAgY2FzZSBvcF90b19udW1i
ZXI6Ci0gICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgY2FzZSBvcF9uZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2VxX251bGw6Ci0gICAgY2FzZSBvcF9ub3Q6Ci0gICAgY2FzZSBvcF9tb3Y6Ci0gICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1
c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9pbjoKLSAg
ICBjYXNlIG9wX2luc3RhbmNlb2Y6Ci0gICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Ci0g
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBvcF9tdWw6Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAg
Y2FzZSBvcF9tb2Q6Ci0gICAgY2FzZSBvcF9zdWI6Ci0gICAgY2FzZSBvcF9sc2hpZnQ6Ci0gICAg
Y2FzZSBvcF9yc2hpZnQ6Ci0gICAgY2FzZSBvcF91cnNoaWZ0OgotICAgIGNhc2Ugb3BfYml0YW5k
OgotICAgIGNhc2Ugb3BfYml0eG9yOgotICAgIGNhc2Ugb3BfYml0b3I6Ci0gICAgY2FzZSBvcF9s
ZXNzOgotICAgIGNhc2Ugb3BfbGVzc2VxOgotICAgIGNhc2Ugb3BfZ3JlYXRlcjoKLSAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKLSAgICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9wX3N0cmlj
dGVxOgotICAgIGNhc2Ugb3BfbmVxOgotICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBh
cmd1bWVudHMuCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfcG5h
bWVzOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNv
ZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBhbmQg
ZmlmdGggYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogewotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
LSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKQot
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzVd
LnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGly
ZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3VtZW50cy4gCi0gICAgY2FzZSBvcF9nZXRf
YnlfcG5hbWU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpCi0gICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQp
KQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzZdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVGhpcmQgYXJn
dW1lbnQuCi0gICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgotICAgIGNhc2Ugb3Bfc3dpdGNoX2No
YXI6Ci0gICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCi0gICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBWYXJpYWJsZSBudW1iZXIg
b2YgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV3X2FycmF5OgotICAgIGNhc2Ugb3Bfc3RyY2F0
OiB7Ci0gICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkpKQotICAgICAgICAgICAgICAgIHNldEZv
ck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0gaSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAvLyBDcmF6eSBzdHVmZiBmb3IgY2FsbHMuCi0gICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6Ci0gICAgY2FzZSBvcF9jYWxsX2V2YWw6Ci0gICAgY2FzZSBvcF9jYWxsOiB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9j
aywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaW50IGFyZ0NvdW50
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7
IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgbGFzdEFyZyArIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAvLyBTcGVjaWFsIHN0dWZmIGZvciB0ZWFyIG9mZiBhcmd1bWVudHMuCi0gICAgY2Fz
ZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCB1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpLm9mZnNldCgpKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KK25hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0
VmVjdG9yJiBkZWZzKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9j
ay0+dm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2lu
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07Ci0gICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKTsKLSAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgLy8gVGhlc2UgZG9uJ3QgZGVm
aW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9ub3A6Ci0gICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0g
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0g
ICAgY2FzZSBvcF9wb3Bfc2NvcGU6Ci0gICAgY2FzZSBvcF9lbmQ6Ci0gICAgY2FzZSBvcF9wcm9m
aWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBv
cF90aHJvdzoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKLSAgICBjYXNlIG9wX2Rl
YnVnOgotICAgIGNhc2Ugb3BfcmV0OgotICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgot
ICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfanRydWU6Ci0gICAgY2FzZSBvcF9qZmFsc2U6
Ci0gICAgY2FzZSBvcF9qZXFfbnVsbDoKLSAgICBjYXNlIG9wX2puZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3Bfamxlc3M6Ci0gICAgY2FzZSBvcF9qbGVzc2VxOgot
ICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgotICAgIGNhc2Ug
b3Bfam5sZXNzOgotICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXI6
Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKLSAgICBjYXNlIG9wX2xvb3BfaGludDoKLSAgICBj
YXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKLSAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRf
YnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291
dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoK
LSAgICBjYXNlIG9wX3B1dF9ieV92YWw6Ci0gICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
LSAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKLSAgICBjYXNlIG9wX2RlbF9ieV9pZDoKLSAgICBj
YXNlIG9wX2RlbF9ieV92YWw6Ci0jZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwg
bGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVO
U0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7Ci0jdW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0
aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAgY2FzZSBvcF9uZXh0X3BuYW1lOgotICAg
IGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6Ci0gICAgY2Fz
ZSBvcF9zdHJjYXQ6Ci0gICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOgotICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3BfY2F0Y2g6Ci0gICAgY2FzZSBvcF9jcmVhdGVf
dGhpczoKLSAgICBjYXNlIG9wX25ld19hcnJheToKLSAgICBjYXNlIG9wX25ld19hcnJheV9idWZm
ZXI6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKLSAgICBjYXNlIG9wX25ld19mdW5jOgotICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgot
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Ci0g
ICAgY2FzZSBvcF9jYWxsOgotICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgotICAgIGNhc2Ugb3BfY29u
c3RydWN0OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRf
YnlfaWRfcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46Ci0gICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3Rv
OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKLSAgICBjYXNlIG9wX2dldF9i
eV9pZF9jdXN0b21fc2VsZjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86Ci0g
ICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0
X3N0cmluZ19sZW5ndGg6Ci0gICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOgotICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dl
dF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6Ci0gICAgY2FzZSBv
cF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICBjYXNlIG9wX3R5cGVvZjoKLSAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZDoKLSAgICBjYXNlIG9wX2lzX2Jvb2xlYW46Ci0gICAgY2FzZSBvcF9pc19u
dW1iZXI6Ci0gICAgY2FzZSBvcF9pc19zdHJpbmc6Ci0gICAgY2FzZSBvcF9pc19vYmplY3Q6Ci0g
ICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKLSAgICBjYXNlIG9wX2luOgotICAgIGNhc2Ugb3BfdG9f
bnVtYmVyOgotICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ug
b3BfbXVsOgotICAgIGNhc2Ugb3BfZGl2OgotICAgIGNhc2Ugb3BfbW9kOgotICAgIGNhc2Ugb3Bf
c3ViOgotICAgIGNhc2Ugb3BfbHNoaWZ0OgotICAgIGNhc2Ugb3BfcnNoaWZ0OgotICAgIGNhc2Ug
b3BfdXJzaGlmdDoKLSAgICBjYXNlIG9wX2JpdGFuZDoKLSAgICBjYXNlIG9wX2JpdHhvcjoKLSAg
ICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfaW5jOgotICAgIGNhc2Ugb3BfZGVjOgotICAg
IGNhc2Ugb3BfZXE6Ci0gICAgY2FzZSBvcF9uZXE6Ci0gICAgY2FzZSBvcF9zdHJpY3RlcToKLSAg
ICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9wX2xlc3M6Ci0gICAgY2FzZSBvcF9sZXNz
ZXE6Ci0gICAgY2FzZSBvcF9ncmVhdGVyOgotICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgotICAgIGNh
c2Ugb3BfbmVxX251bGw6Ci0gICAgY2FzZSBvcF9lcV9udWxsOgotICAgIGNhc2Ugb3Bfbm90Ogot
ICAgIGNhc2Ugb3BfbW92OgotICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX3Rv
X3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgotICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKLSAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgotICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJl
dHVybjsKK2NsYXNzIFNldEJpdCB7CitwdWJsaWM6CisgICAgU2V0Qml0KEZhc3RCaXRWZWN0b3Im
IGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgewogICAgIH0KLSAgICBjYXNlIG9w
X3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICBpbnQgb3BlcmFuZCA9IHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKTsKKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKQor
ICAgIHsKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
b3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgZGVmcywgb3Bl
cmFuZCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCBtX2JpdHMsIG9wZXJhbmQpOwogICAgIH0KLSAgICBjYXNlIG9wX2VudGVyOiB7Ci0gICAg
ICAgIGRlZnMuc2V0QWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIAorcHJpdmF0ZToKKyAgICBGYXN0Qml0VmVj
dG9yJiBtX2JpdHM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogc3RhdGljIHVu
c2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNC
bG9jaz4qIGJhc2ljQmxvY2spCiB7CkBAIC01MzUsOCArMTM4LDEwIEBAIHN0YXRpYyB2b2lkIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MKICAgICB1c2VzLmNsZWFyQWxsKCk7CiAgICAgZGVm
cy5jbGVhckFsbCgpOwogICAgIAotICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29k
ZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICBTZXRCaXQgc2V0
VXNlcyh1c2VzKTsKKyAgICBTZXRCaXQgc2V0RGVmcyhkZWZzKTsKKyAgICBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHNldFVzZXMpOworICAg
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwg
c2V0RGVmcyk7CiAgICAgCiAgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CiAgICAgb3V0Lm1lcmdlKHVz
ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnl0ZWNvZGVVc2VEZWZfaAorI2RlZmluZSBCeXRlY29kZVVzZURlZl9o
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9y
JiBmdW5jdG9yKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+
dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4KKyAgICBjYXNl
IG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ug
b3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bfam5lcV9w
dHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6Cisg
ICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfaW5p
dF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgY2FzZSBvcF9lbnRlcjoK
KyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAgLy8gRmlyc3QgYXJndW1l
bnQuCisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9u
OiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9hcmd1bWVudHM6CisgICAgY2FzZSBvcF90b190aGlzOgor
ICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2ls
bF9jYWxsOgorICAgIGNhc2Ugb3BfcHJvZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93
OgorICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNh
c2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAg
Y2FzZSBvcF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2Rl
YzoKKyAgICBjYXNlIG9wX2luYzogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzLgorICAgIGNhc2Ug
b3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9w
X2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoK
KyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ug
b3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZp
cnN0LCBzZWNvbmQsIGFuZCB0aGlyZCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9kZWxfYnlfdmFs
OgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFs
OiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRmlyc3QgYW5kIHRoaXJk
IGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246CisgICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJh
bnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWxf
b3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAgICBjYXNl
IG9wX3B1dF90b19zY29wZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZpcnN0LCB0aGlyZCwgYW5kIGZv
dXJ0aCBhcmd1bWVudHMuCisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjogeworICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCBhcmd1bWVudC4KKyAgICBjYXNl
IG9wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0
OgorICAgIGNhc2Ugb3BfcHVzaF9uYW1lX3Njb3BlOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
c2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2No
YWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2N1c3RvbV9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX2dldF9hcnJheV9s
ZW5ndGg6CisgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9h
cmd1bWVudHNfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkOgorICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICBjYXNlIG9wX2lzX251bWJlcjoK
KyAgICBjYXNlIG9wX2lzX3N0cmluZzoKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICBjYXNl
IG9wX2lzX2Z1bmN0aW9uOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVn
YXRlOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNh
c2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92Ogor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlz
OgorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCBh
bmQgdGhpcmQgYXJndW1lbnRzLgorICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9w
X2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9pbjoKKyAgICBjYXNlIG9wX2luc3Rh
bmNlb2Y6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9hZGQ6
CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9tb2Q6Cisg
ICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6
CisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNhc2Ugb3Bf
Yml0eG9yOgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9sZXNzOgorICAgIGNhc2Ug
b3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNlIG9wX2dyZWF0ZXJlcToK
KyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAgIGNhc2Ug
b3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNvbmQsIHRoaXJk
LCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24s
IG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFNlY29uZCwgdGhpcmQsIGZvdXJ0aCwg
YW5kIGZpZnRoIGFyZ3VtZW50cy4KKyAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBTZWNvbmQs
IHRoaXJkLCBmb3VydGgsIGZpZnRoLCBhbmQgc2l4dGggYXJndW1lbnRzLiAKKyAgICBjYXNlIG9w
X2dldF9ieV9wbmFtZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24s
IG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQp
OworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls2XS51Lm9w
ZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIFRoaXJkIGFyZ3VtZW50Lgor
ICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAg
IGNhc2Ugb3Bfc3dpdGNoX2ltbTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIC8vIFZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgY2Fz
ZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9zdHJjYXQ6IHsKKyAgICAgICAgaW50IGJhc2Ug
PSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCBjb3VudCA9IGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
KQorICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwg
YmFzZSAtIGkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIENyYXp5IHN0dWZmIGZv
ciBjYWxscy4KKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBjYXNlIG9wX2NhbGxfZXZhbDoK
KyAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0
aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgaW50IGFy
Z0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgICAgICBpbnQgbGFzdEFyZyA9
IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKKyAgICAg
ICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJn
Q291bnQ7IGkrKykKKyAgICAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwg
b3Bjb2RlSUQsIGxhc3RBcmcgKyBpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBT
cGVjaWFsIHN0dWZmIGZvciB0ZWFyIG9mZiBhcmd1bWVudHMuCisgICAgY2FzZSBvcF90ZWFyX29m
Zl9hcmd1bWVudHM6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBv
cGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKSk7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRd
OworICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uLT51Lm9wY29kZSk7CisgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgIC8vIFRoZXNl
IGRvbid0IGRlZmluZSBhbnl0aGluZy4KKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0Ogor
ICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgorICAgIGNhc2Ugb3BfcHVzaF9uYW1l
X3Njb3BlOgorICAgIGNhc2Ugb3BfcHVzaF93aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfcHV0X3Rv
X3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNh
c2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgor
ICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAg
Y2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9wX3JldDoKKyAgICBjYXNlIG9wX3JldF9vYmplY3Rf
b3JfdGhpczoKKyAgICBjYXNlIG9wX2ptcDoKKyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ug
b3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6
CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAgICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bf
amxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToK
KyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9sb29wX2hp
bnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6Cisg
ICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxh
Y2U6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9u
X2RpcmVjdF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25v
cm1hbDoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGlu
ZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9nZW5lcmljOgorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9zZXR0ZXI6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3Zh
bF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6CisgICAgY2FzZSBvcF9kZWxfYnlf
dmFsOgorI2RlZmluZSBMTElOVF9IRUxQRVJfT1BDT0RFUyhvcGNvZGUsIGxlbmd0aCkgY2FzZSBv
cGNvZGU6CisgICAgICAgIEZPUl9FQUNIX0xMSU5UX09QQ09ERV9FWFRFTlNJT04oTExJTlRfSEVM
UEVSX09QQ09ERVMpOworI3VuZGVmIExMSU5UX0hFTFBFUl9PUENPREVTCisgICAgICAgIHJldHVy
bjsKKyAgICAvLyBUaGVzZSBhbGwgaGF2ZSBhIHNpbmdsZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGZp
cnN0IGFyZ3VtZW50LgorICAgIGNhc2Ugb3BfbmV4dF9wbmFtZToKKyAgICBjYXNlIG9wX3Jlc29s
dmVfc2NvcGU6CisgICAgY2FzZSBvcF9zdHJjYXQ6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hY3Rp
dmF0aW9uOgorICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgorICAgIGNhc2Ugb3BfY2F0Y2g6Cisg
ICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAgICBjYXNlIG9wX25ld19hcnJheToKKyAgICBjYXNl
IG9wX25ld19hcnJheV9idWZmZXI6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgor
ICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKKyAgICBjYXNlIG9wX25ld19mdW5jOgorICAgIGNhc2Ug
b3BfbmV3X2Z1bmNfZXhwOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgorICAgIGNhc2Ugb3Bf
Z2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9jYWxsOgorICAgIGNhc2Ugb3BfY2FsbF9ldmFs
OgorICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hh
aW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3Ro
OgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBvcF9jaGVja19oYXNf
aW5zdGFuY2U6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9nZXRfYnlf
cG5hbWU6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKKyAgICBjYXNlIG9wX3R5
cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46
CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgY2FzZSBvcF9pc19zdHJpbmc6CisgICAgY2Fz
ZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX2lu
OgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRlOgorICAgIGNhc2Ug
b3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3BfZGl2OgorICAgIGNhc2Ugb3Bf
bW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAgIGNhc2Ugb3Bf
cnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2JpdGFuZDoKKyAgICBj
YXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3BfaW5jOgorICAg
IGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9uZXE6CisgICAgY2Fz
ZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX2xlc3M6
CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
Z3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgor
ICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfY2FwdHVyZWRf
bW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAg
Y2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNl
IG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoKKyAg
ICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczogeworICAgICAgICBmdW5jdG9yKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYXJndW1lbnRzOiB7CisgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCAtIDEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZW50ZXI6
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTsp
CisgICAgICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCB2
aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZVVzZURl
Zl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxNTk4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU5LDYgKzc1OSwxMyBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRm
KCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRh
KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXB0
dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExv
Y2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYXB0dXJlZF9tb3YiKTsKKyAg
ICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICBjYXNlIG9wX25vdDogewogICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAibm90Iik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI0NjksOCAr
MjQ3Niw3IEBAIGJvb2wgQ29kZUJsb2NrOjppc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3QKICAgICBp
ZiAoIXN5bWJvbFRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBv
cGVyYW5kLm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCi0gICAgICAg
ICYmIG9wZXJhbmQub2Zmc2V0KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlKCktPmlzQ2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7CiB9CiAK
IGludCBDb2RlQmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVy
cyhpbnQgbWFjaGluZUNhcHR1cmVTdGFydCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDE1OTg4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBtYWNybyhvcF9uZXdfYXJyYXlfYnVmZmVyLCA1KSBcCiAgICAgbWFj
cm8ob3BfbmV3X3JlZ2V4cCwgMykgXAogICAgIG1hY3JvKG9wX21vdiwgMykgXAorICAgIG1hY3Jv
KG9wX2NhcHR1cmVkX21vdiwgMykgXAogICAgIFwKICAgICBtYWNybyhvcF9ub3QsIDMpIFwKICAg
ICBtYWNybyhvcF9lcSwgNCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1OTg4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA3LDYgKzEwMDcsMTYgQEAgUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKAogICAgIHJldHVybiBkc3Q7CiB9CiAKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FwdHVyZWRNb3ZlKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogc3JjKQoreworICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5tb3Yo
ZHN0LT5pbmRleCgpLCBzcmMtPmluZGV4KCkpOworCisgICAgZW1pdE9wY29kZShvcF9jYXB0dXJl
ZF9tb3YpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisK
IFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNv
ZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCiB7CiAgICAgZW1pdE9wY29k
ZShvcGNvZGVJRCk7CkBAIC0xMTU3LDExICsxMTY3LDE3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0TG9hZEcKICAgICByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsK
IH0KIAorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKK3sK
KyAgICByZXR1cm4gKG1fY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgVmlydHVhbFJlZ2lz
dGVyKG9wZXJhbmQpLmlzQXJndW1lbnQoKSkKKyAgICAgICAgfHwgc3ltYm9sVGFibGUoKS5pc0Nh
cHR1cmVkKG9wZXJhbmQpOworfQorCiBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAgaWYgKHByb3BlcnR5ID09IHByb3BlcnR5
TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNSZWdpc3Rl
cigpLCBSZWFkT25seSk7Ci0KKyAgICAgICAgcmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBS
ZWFkT25seSwgZmFsc2UpOworICAgIAogICAgIGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVz
KCkuYXJndW1lbnRzKQogICAgICAgICBjcmVhdGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogCkBA
IC0xMTczLDcgKzExODksNyBAQCBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3Qg
SWRlCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBj
cmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAg
ICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgaXNDYXB0dXJlZChs
b2NhbC0+aW5kZXgoKSkpOwogfQogCiBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2Nh
bChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKQEAgLTExODYsNyArMTIwMiw3IEBAIExvY2Fs
IEJ5dGVjb2RlR2VuZXJhdG9yOjpjb25zdExvY2FsKGNvbnMKICAgICAgICAgcmV0dXJuIExvY2Fs
KCk7CiAKICAgICBSZWdpc3RlcklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNz
YXJ5KCZyZWdpc3RlckZvcihlbnRyeS5nZXRJbmRleCgpKSk7Ci0gICAgcmV0dXJuIExvY2FsKGxv
Y2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCkpOworICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50
cnkuZ2V0QXR0cmlidXRlcygpLCBpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSk7CiB9CiAKIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDaGVja0hhc0luc3RhbmNlKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogdmFsdWUsIFJlZ2lzdGVySUQqIGJhc2UsIExhYmVsKiB0YXJnZXQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTk4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw5ICsxMjIsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCi0g
ICAgICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorICAg
ICAgICBMb2NhbChSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBp
c0NhcHR1cmVkKQogICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBt
X2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgICAgICwgbV9pc0NhcHR1cmVkKGlzQ2Fw
dHVyZWQpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsMTAgKzEzNCwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgeyByZXR1cm4gbV9sb2NhbDsg
fQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1fYXR0cmlidXRlcyAmIFJl
YWRPbmx5OyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzQ2FwdHVyZWQoKSB7IHJldHVybiBt
X2lzQ2FwdHVyZWQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9j
YWw7CiAgICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICAgICAgYm9vbCBtX2lzQ2Fw
dHVyZWQ7CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlSYW5nZSB7CkBAIC0xNzEsNiArMTc1LDgg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhj
b25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVy
Rm9yQXJndW1lbnRzKCk7CiAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKTsK
KyAgICAgICAgCiAgICAgICAgIExvY2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAg
ICAgTG9jYWwgY29uc3RMb2NhbChjb25zdCBJZGVudGlmaWVyJik7CiAKQEAgLTMzNiw2ICszNDIs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld1JlZ0V4cChS
ZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCopOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRNb3Zl
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKKyAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdENhcHR1cmVkTW92ZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvTnVtYmVyKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcChvcF90b19udW1iZXIsIGRzdCwgc3JjKTsgfQog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SW5jKFJlZ2lzdGVySUQqIHNyY0RzdCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4u
Y3BwCShyZXZpc2lvbiAxNTk4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MywxMSArNjczLDEyIEBA
IFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKIAogICAgIGlmIChMb2NhbCBs
b2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9j
YWxSZWcgPSBsb2NhbC5nZXQoKTsKICAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgewog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0g
ICAgICAgICAgICBsb2NhbCA9IExvY2FsKGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKSwgMCk7CisgICAgICAgICAgICBsb2NhbFJl
ZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxv
Y2FsUmVnKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5l
cmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX29w
ZXJhdG9yKTsKKyAgICAgICAgcmV0dXJuIGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbFJlZywgbV9vcGVyYXRvcik7CiAgICAg
fQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwpAQCAtODM4LDEyICs4MzksMTMgQEAgUmVnaXN0ZXJJRCogUHJlZml4
Tm9kZTo6ZW1pdFJlc29sdmUoQnl0ZQogICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gcmVz
b2x2ZS0+aWRlbnRpZmllcigpOwogCiAgICAgaWYgKExvY2FsIGxvY2FsID0gZ2VuZXJhdG9yLmxv
Y2FsKGlkZW50KSkgeworICAgICAgICBSZWdpc3RlcklEKiBsb2NhbFJlZyA9IGxvY2FsLmdldCgp
OwogICAgICAgICBpZiAobG9jYWwuaXNSZWFkT25seSgpKSB7CiAgICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGxvY2FsID0g
TG9jYWwoZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwg
bG9jYWwuZ2V0KCkpLCAwKTsKKyAgICAgICAgICAgIGxvY2FsUmVnID0gZ2VuZXJhdG9yLmVtaXRN
b3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcpOwogICAgICAgICB9
Ci0gICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIGxvY2FsLmdldCgpLCBtX29wZXJhdG9y
KTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRz
dCwgbG9jYWwuZ2V0KCkpOworICAgICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCBsb2NhbFJl
ZywgbV9vcGVyYXRvcik7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChkc3QsIGxvY2FsUmVnKTsKICAgICB9CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4
cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTU5ODgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxODgsNyArMjE4OCw4IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQnJl
YWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWJ1Zyk7CiAjZW5kaWYKLSAg
ICAgICAgY2FzZSBvcF9tb3Y6IHsKKyAgICAgICAgY2FzZSBvcF9tb3Y6CisgICAgICAgIGNhc2Ug
b3BfY2FwdHVyZWRfbW92OiB7CiAgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgb3ApOwog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1OTg4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAyLDYgKzEwMiw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bj
b2RlSUQKICAgICBjYXNlIG9wX2RlYnVnOgogI2VuZGlmCiAgICAgY2FzZSBvcF9tb3Y6CisgICAg
Y2FzZSBvcF9jYXB0dXJlZF9tb3Y6CiAgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CiAg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOgogICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTU5ODgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Ao
b3BfbG9vcF9oaW50KQogICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQogICAgICAgICBERUZJ
TkVfT1Aob3BfbW9kKQorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKICAgICAgICAgREVG
SU5FX09QKG9wX21vdikKICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5F
X09QKG9wX25lZ2F0ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxNTk4ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bQkod29ya2luZyBjb3B5KQpAQCAtNTQyLDYgKzU0MiwxNiBAQCBfbGxpbnRfb3BfbW92OgogICAg
IGRpc3BhdGNoKDMpCiAKIAorX2xsaW50X29wX2NhcHR1cmVkX21vdjoKKyAgICB0cmFjZUV4ZWN1
dGlvbigpCisgICAgbG9hZGkgOFtQQ10sIHQxCisgICAgbG9hZGkgNFtQQ10sIHQwCisgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQzKQorICAgIHN0b3JlaSB0MiwgVGFnT2Zmc2V0
W2NmciwgdDAsIDhdCisgICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdCisg
ICAgZGlzcGF0Y2goMykKKworCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNlRXhlY3V0aW9uKCkK
ICAgICBsb2FkaSA4W1BDXSwgdDAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTk4ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCwxNSBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRp
c3BhdGNoKDMpCiAKIAorX2xsaW50X29wX2NhcHR1cmVkX21vdjoKKyAgICB0cmFjZUV4ZWN1dGlv
bigpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQorICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbigxLCB0MCkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKKyAgICBz
dG9yZXEgdDIsIFtjZnIsIHQwLCA4XQorICAgIGRpc3BhdGNoKDMpCisKKwogX2xsaW50X29wX25v
dDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQw
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShy
ZXZpc2lvbiAxNTk4ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNiArNDUzLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldENhcHR1cmVFbmQoaW50IGNhcHR1cmVFbmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVy
ZUVuZDsgfQogCiAgICAgaW50IGNhcHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0
dXJlRW5kIC0gbV9jYXB0dXJlU3RhcnQpOyB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkKGlu
dCBvcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wZXJhbmQgPD0gY2FwdHVyZVN0YXJ0
KCkgJiYgb3BlcmFuZCA+IGNhcHR1cmVFbmQoKTsKKyAgICB9CiAKICAgICBpbnQgcGFyYW1ldGVy
Q291bnQoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KICAg
ICBpbnQgcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJD
b3VudEluY2x1ZGluZ1RoaXM7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218113</attachid>
            <date>2013-12-01 10:00:10 -0800</date>
            <delta_ts>2013-12-01 11:23:53 -0800</delta_ts>
            <desc>almost there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50405</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTk4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBACiAJCTBGODMzNUI3MTYzOUMx
RTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAv
KiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAw
MTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVj
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODg1RTExMTg0OUEzQkUw
MEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNl
RGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8q
IEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGlu
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJC
OTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRp
ZmllcnMuY3BwICovOyB9OwpAQCAtMTU4Myw2ICsxNTg0LDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFF
MzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JyYW5jaERpcmVjdGlv
bi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3MUUgLyogREZHVmFyaWFkaWNGdW5jdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWRpY0Z1bmN0aW9u
Lmg7IHBhdGggPSBkZmcvREZHVmFyaWFkaWNGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVVc2VEZWYuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGlu
ay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdE
QkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9G
VExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQw
MDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmll
cnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDA1OCw2ICs0MDYwLDcgQEAK
IAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lz
LmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZFQkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKKwkJCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYwQjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxM
aW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5r
SW5mby5oICovLApAQCAtNDI2OSw2ICs0MjcyLDcgQEAKIAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAz
REZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
QjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjNFMTdBMEJCRkQwMEE4REI4
MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgor
I2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdl
dHMuaCIKQEAgLTY3LDQyNCArNjgsMjYgQEAgc3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2Rl
QmxvY2sqIGNvZAogICAgICAgICBiaXRzLnNldCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVC
bG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5
dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgRmFzdEJpdFZlY3RvciYgdXNlcykKLXsKLSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIg
PSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRd
OwotICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3Ry
dWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChvcGNvZGVJRCkgewotICAgIC8vIE5vIHVz
ZXMuCi0gICAgY2FzZSBvcF9uZXdfcmVnZXhwOgotICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgot
ICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKLSAgICBjYXNlIG9wX3BvcF9zY29wZToKLSAgICBj
YXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3Bf
bG9vcF9oaW50OgotICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKLSAg
ICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgotICAgIGNh
c2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF9jYXRjaDoKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEZpcnN0IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfbmV3X2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVh
dGVfYWN0aXZhdGlvbjogCi0gICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgotICAgIGNhc2Ug
b3BfdG9fdGhpczoKLSAgICBjYXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246Ci0gICAgY2FzZSBv
cF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAg
Y2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3B1c2hfd2l0aF9zY29wZToKLSAgICBjYXNlIG9w
X2VuZDoKLSAgICBjYXNlIG9wX3JldDoKLSAgICBjYXNlIG9wX2p0cnVlOgotICAgIGNhc2Ugb3Bf
amZhbHNlOgotICAgIGNhc2Ugb3BfamVxX251bGw6Ci0gICAgY2FzZSBvcF9qbmVxX251bGw6Ci0g
ICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCBz
ZWNvbmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVsX2J5X2lkOgotICAgIGNhc2Ugb3BfcmV0
X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfamxlc3NlcToKLSAgICBjYXNlIG9wX2pncmVh
dGVyOgotICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAgICBjYXNlIG9wX2pubGVzczoKLSAgICBj
YXNlIG9wX2pubGVzc2VxOgotICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgotICAgIGNhc2Ugb3Bfam5n
cmVhdGVyZXE6Ci0gICAgY2FzZSBvcF9qbGVzczogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAg
ICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxv
Y2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5k
KGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBGaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgYXJndW1lbnRzLgot
ICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKLSAgICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0Ogot
ICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAg
ICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFs
aWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFu
ZCB0aGlyZCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6Ci0gICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgot
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAg
Y2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0g
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KLSAgICBj
YXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpCi0gICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25k
IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Rfbm9wOgotICAgIGNhc2Ug
b3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKLSAgICBj
YXNlIG9wX2dldF9ieV9pZDoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKLSAg
ICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRl
cl9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9wcm90bzoKLSAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Nl
bGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2N1c3RvbV9jaGFpbjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgotICAg
IGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3Ro
OgotICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5ndGg6Ci0gICAgY2FzZSBvcF90eXBlb2Y6
Ci0gICAgY2FzZSBvcF9pc191bmRlZmluZWQ6Ci0gICAgY2FzZSBvcF9pc19ib29sZWFuOgotICAg
IGNhc2Ugb3BfaXNfbnVtYmVyOgotICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgotICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0OgotICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246Ci0gICAgY2FzZSBvcF90b19udW1i
ZXI6Ci0gICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgY2FzZSBvcF9uZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2VxX251bGw6Ci0gICAgY2FzZSBvcF9ub3Q6Ci0gICAgY2FzZSBvcF9tb3Y6Ci0gICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1
c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9pbjoKLSAg
ICBjYXNlIG9wX2luc3RhbmNlb2Y6Ci0gICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Ci0g
ICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBvcF9tdWw6Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAg
Y2FzZSBvcF9tb2Q6Ci0gICAgY2FzZSBvcF9zdWI6Ci0gICAgY2FzZSBvcF9sc2hpZnQ6Ci0gICAg
Y2FzZSBvcF9yc2hpZnQ6Ci0gICAgY2FzZSBvcF91cnNoaWZ0OgotICAgIGNhc2Ugb3BfYml0YW5k
OgotICAgIGNhc2Ugb3BfYml0eG9yOgotICAgIGNhc2Ugb3BfYml0b3I6Ci0gICAgY2FzZSBvcF9s
ZXNzOgotICAgIGNhc2Ugb3BfbGVzc2VxOgotICAgIGNhc2Ugb3BfZ3JlYXRlcjoKLSAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKLSAgICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9wX3N0cmlj
dGVxOgotICAgIGNhc2Ugb3BfbmVxOgotICAgIGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBh
cmd1bWVudHMuCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfcG5h
bWVzOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ss
IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNv
ZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBhbmQg
ZmlmdGggYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV4dF9wbmFtZTogewotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZl
bmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBz
ZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
LSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKQot
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzVd
LnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGly
ZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3VtZW50cy4gCi0gICAgY2FzZSBvcF9nZXRf
YnlfcG5hbWU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBp
ZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCkpCi0gICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxp
ZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQp
KQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9u
WzZdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVGhpcmQgYXJn
dW1lbnQuCi0gICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgotICAgIGNhc2Ugb3Bfc3dpdGNoX2No
YXI6Ci0gICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCi0gICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBWYXJpYWJsZSBudW1iZXIg
b2YgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV3X2FycmF5OgotICAgIGNhc2Ugb3Bfc3RyY2F0
OiB7Ci0gICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAg
ICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkpKQotICAgICAgICAgICAgICAgIHNldEZv
ck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0gaSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICAvLyBDcmF6eSBzdHVmZiBmb3IgY2FsbHMuCi0gICAgY2FzZSBv
cF9jb25zdHJ1Y3Q6Ci0gICAgY2FzZSBvcF9jYWxsX2V2YWw6Ci0gICAgY2FzZSBvcF9jYWxsOiB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9j
aywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgaW50IGFyZ0NvdW50
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7
IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgbGFzdEFyZyArIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAvLyBTcGVjaWFsIHN0dWZmIGZvciB0ZWFyIG9mZiBhcmd1bWVudHMuCi0gICAgY2Fz
ZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCB1
bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCkpLm9mZnNldCgpKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGlu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LX0KK25hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0
VmVjdG9yJiBkZWZzKQotewotICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9j
ay0+dm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2lu
ID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwotICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07Ci0gICAgT3Bj
b2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUu
b3Bjb2RlKTsKLSAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Ci0gICAgLy8gVGhlc2UgZG9uJ3QgZGVm
aW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBv
cF9pbml0X2dsb2JhbF9jb25zdF9ub3A6Ci0gICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0g
ICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0g
ICAgY2FzZSBvcF9wb3Bfc2NvcGU6Ci0gICAgY2FzZSBvcF9lbmQ6Ci0gICAgY2FzZSBvcF9wcm9m
aWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBv
cF90aHJvdzoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKLSAgICBjYXNlIG9wX2Rl
YnVnOgotICAgIGNhc2Ugb3BfcmV0OgotICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgot
ICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfanRydWU6Ci0gICAgY2FzZSBvcF9qZmFsc2U6
Ci0gICAgY2FzZSBvcF9qZXFfbnVsbDoKLSAgICBjYXNlIG9wX2puZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3Bfamxlc3M6Ci0gICAgY2FzZSBvcF9qbGVzc2VxOgot
ICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgotICAgIGNhc2Ug
b3Bfam5sZXNzOgotICAgIGNhc2Ugb3Bfam5sZXNzZXE6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXI6
Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKLSAgICBjYXNlIG9wX2xvb3BfaGludDoKLSAgICBj
YXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKLSAgICBjYXNlIG9w
X3N3aXRjaF9zdHJpbmc6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRf
YnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291
dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoK
LSAgICBjYXNlIG9wX3B1dF9ieV92YWw6Ci0gICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoK
LSAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKLSAgICBjYXNlIG9wX2RlbF9ieV9pZDoKLSAgICBj
YXNlIG9wX2RlbF9ieV92YWw6Ci0jZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwg
bGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVO
U0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7Ci0jdW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0
aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAgY2FzZSBvcF9uZXh0X3BuYW1lOgotICAg
IGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6Ci0gICAgY2Fz
ZSBvcF9zdHJjYXQ6Ci0gICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOgotICAgIGNhc2Ug
b3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3BfY2F0Y2g6Ci0gICAgY2FzZSBvcF9jcmVhdGVf
dGhpczoKLSAgICBjYXNlIG9wX25ld19hcnJheToKLSAgICBjYXNlIG9wX25ld19hcnJheV9idWZm
ZXI6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNhc2Ugb3BfbmV3X3Jl
Z2V4cDoKLSAgICBjYXNlIG9wX25ld19mdW5jOgotICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgot
ICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Ci0g
ICAgY2FzZSBvcF9jYWxsOgotICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgotICAgIGNhc2Ugb3BfY29u
c3RydWN0OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291
dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRf
YnlfaWRfcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hhaW46Ci0gICAgY2FzZSBvcF9n
ZXRfYnlfaWRfZ2V0dGVyX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3Rv
OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoKLSAgICBjYXNlIG9wX2dldF9i
eV9pZF9jdXN0b21fc2VsZjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86Ci0g
ICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0
X3N0cmluZ19sZW5ndGg6Ci0gICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2Fz
ZSBvcF9pbnN0YW5jZW9mOgotICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dl
dF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6Ci0gICAgY2FzZSBv
cF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICBjYXNlIG9wX3R5cGVvZjoKLSAgICBjYXNlIG9w
X2lzX3VuZGVmaW5lZDoKLSAgICBjYXNlIG9wX2lzX2Jvb2xlYW46Ci0gICAgY2FzZSBvcF9pc19u
dW1iZXI6Ci0gICAgY2FzZSBvcF9pc19zdHJpbmc6Ci0gICAgY2FzZSBvcF9pc19vYmplY3Q6Ci0g
ICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKLSAgICBjYXNlIG9wX2luOgotICAgIGNhc2Ugb3BfdG9f
bnVtYmVyOgotICAgIGNhc2Ugb3BfbmVnYXRlOgotICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ug
b3BfbXVsOgotICAgIGNhc2Ugb3BfZGl2OgotICAgIGNhc2Ugb3BfbW9kOgotICAgIGNhc2Ugb3Bf
c3ViOgotICAgIGNhc2Ugb3BfbHNoaWZ0OgotICAgIGNhc2Ugb3BfcnNoaWZ0OgotICAgIGNhc2Ug
b3BfdXJzaGlmdDoKLSAgICBjYXNlIG9wX2JpdGFuZDoKLSAgICBjYXNlIG9wX2JpdHhvcjoKLSAg
ICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfaW5jOgotICAgIGNhc2Ugb3BfZGVjOgotICAg
IGNhc2Ugb3BfZXE6Ci0gICAgY2FzZSBvcF9uZXE6Ci0gICAgY2FzZSBvcF9zdHJpY3RlcToKLSAg
ICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9wX2xlc3M6Ci0gICAgY2FzZSBvcF9sZXNz
ZXE6Ci0gICAgY2FzZSBvcF9ncmVhdGVyOgotICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgotICAgIGNh
c2Ugb3BfbmVxX251bGw6Ci0gICAgY2FzZSBvcF9lcV9udWxsOgotICAgIGNhc2Ugb3Bfbm90Ogot
ICAgIGNhc2Ugb3BfbW92OgotICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX3Rv
X3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgotICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKLSAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgotICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJl
dHVybjsKK2NsYXNzIFNldEJpdCB7CitwdWJsaWM6CisgICAgU2V0Qml0KEZhc3RCaXRWZWN0b3Im
IGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJpdHMpCisgICAgewogICAgIH0KLSAgICBjYXNlIG9w
X3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICBpbnQgb3BlcmFuZCA9IHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKTsKKyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKQor
ICAgIHsKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
b3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgZGVmcywgb3Bl
cmFuZCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCBtX2JpdHMsIG9wZXJhbmQpOwogICAgIH0KLSAgICBjYXNlIG9wX2VudGVyOiB7Ci0gICAg
ICAgIGRlZnMuc2V0QWxsKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IH0KLSAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIAorcHJpdmF0ZToKKyAgICBGYXN0Qml0VmVj
dG9yJiBtX2JpdHM7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAogc3RhdGljIHVu
c2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNC
bG9jaz4qIGJhc2ljQmxvY2spCiB7CkBAIC01MzUsOCArMTM4LDEwIEBAIHN0YXRpYyB2b2lkIHN0
ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MKICAgICB1c2VzLmNsZWFyQWxsKCk7CiAgICAgZGVm
cy5jbGVhckFsbCgpOwogICAgIAotICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7Ci0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29k
ZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBkZWZzKTsKKyAgICBTZXRCaXQgc2V0
VXNlcyh1c2VzKTsKKyAgICBTZXRCaXQgc2V0RGVmcyhkZWZzKTsKKyAgICBjb21wdXRlVXNlc0Zv
ckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNvZGVPZmZzZXQsIHNldFVzZXMpOworICAg
IGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwg
c2V0RGVmcyk7CiAgICAgCiAgICAgb3V0LmV4Y2x1ZGUoZGVmcyk7CiAgICAgb3V0Lm1lcmdlKHVz
ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQnl0ZWNvZGVVc2VEZWZfaAorI2RlZmluZSBCeXRlY29kZVVzZURlZl9o
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9y
JiBmdW5jdG9yKQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+
dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0g
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2Rl
SUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gTm8gdXNlcy4KKyAgICBjYXNl
IG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ug
b3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bfam5lcV9w
dHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6Cisg
ICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfaW5p
dF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6CisgICAgY2FzZSBvcF9lbnRlcjoK
KyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBvcF9uZXdfZnVu
YzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOiAKKyAgICBjYXNlIG9wX2NyZWF0ZV9h
cmd1bWVudHM6CisgICAgY2FzZSBvcF90b190aGlzOgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0
aXZhdGlvbjoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfd2lsbF9jYWxsOgorICAgIGNhc2Ugb3BfcHJv
ZmlsZV9kaWRfY2FsbDoKKyAgICBjYXNlIG9wX3Rocm93OgorICAgIGNhc2Ugb3BfcHVzaF93aXRo
X3Njb3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcmV0OgorICAgIGNhc2Ugb3Bf
anRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFfbnVsbDoKKyAgICBj
YXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2RlYzoKKyAgICBjYXNlIG9wX2luYzogewor
ICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bf
cmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pn
cmVhdGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAg
ICBjYXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bf
am5ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9qbGVzczogeworICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwor
ICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CisgICAgICAgIGZ1
bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
bm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6CisgICAg
Y2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3B1dF9nZXR0
ZXJfc2V0dGVyOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9p
bml0X2dsb2JhbF9jb25zdF9ub3A6CisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdDoKKyAg
ICBjYXNlIG9wX3B1c2hfbmFtZV9zY29wZToKKyAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgor
ICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgorICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3NlbGY6
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY2hh
aW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAgY2FzZSBvcF9nZXRf
YnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9jaGFpbjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWluOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRfYXJyYXlfbGVuZ3Ro
OgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBvcF9nZXRfYXJndW1l
bnRzX2xlbmd0aDoKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5l
ZDoKKyAgICBjYXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAg
Y2FzZSBvcF9pc19zdHJpbmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBvcF9p
c19mdW5jdGlvbjoKKyAgICBjYXNlIG9wX3RvX251bWJlcjoKKyAgICBjYXNlIG9wX25lZ2F0ZToK
KyAgICBjYXNlIG9wX25lcV9udWxsOgorICAgIGNhc2Ugb3BfZXFfbnVsbDoKKyAgICBjYXNlIG9w
X25vdDoKKyAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKKyAgICBj
YXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKKyAg
ICBjYXNlIG9wX2dldF9wbmFtZXM6CisgICAgY2FzZSBvcF9kZWxfYnlfaWQ6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2dldF9ieV92
YWw6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRfYnlfdmFsOgorICAgIGNhc2Ugb3BfaW46Cisg
ICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNlOgor
ICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3BfZGl2OgorICAg
IGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNoaWZ0OgorICAg
IGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2JpdGFu
ZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ugb3Bf
bGVzczoKKyAgICBjYXNlIG9wX2xlc3NlcToKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgY2Fz
ZSBvcF9ncmVhdGVyZXE6CisgICAgY2FzZSBvcF9uc3RyaWN0ZXE6CisgICAgY2FzZSBvcF9zdHJp
Y3RlcToKKyAgICBjYXNlIG9wX25lcToKKyAgICBjYXNlIG9wX2VxOgorICAgIGNhc2Ugb3BfZGVs
X2J5X3ZhbDogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29k
ZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CisgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9uZXh0X3BuYW1lOiB7CisgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bj
b2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzVdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9n
ZXRfYnlfcG5hbWU6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBv
cGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
KyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1
Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0
aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNl0udS5vcGVy
YW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06IHsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX25l
d19hcnJheToKKyAgICBjYXNlIG9wX3N0cmNhdDogeworICAgICAgICBpbnQgYmFzZSA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgaW50IGNvdW50ID0gaW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspCisgICAg
ICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBiYXNlIC0g
aSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CisgICAg
Y2FzZSBvcF9jYWxsX2V2YWw6CisgICAgY2FzZSBvcF9jYWxsOiB7CisgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCk7CisgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAg
ICAgICAgaW50IGxhc3RBcmcgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6dGhpc0FyZ3Vt
ZW50T2Zmc2V0KCk7CisgICAgICAgIGZvciAoaW50IGkgPSBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1
Y3QgPyAxIDogMDsgaSA8IGFyZ0NvdW50OyBpKyspCisgICAgICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBsYXN0QXJnICsgaSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKKyAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKSk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgordm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayog
Y29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRnVuY3RvciYgZnVuY3RvcikKK3sK
KyAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJl
dGVyOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5z
dHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOworICAgIE9wY29kZUlEIG9wY29kZUlEID0g
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CisgICAgc3dp
dGNoIChvcGNvZGVJRCkgeworICAgIC8vIFRoZXNlIGRvbid0IGRlZmluZSBhbnl0aGluZy4KKyAg
ICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29u
c3Rfbm9wOgorICAgIGNhc2Ugb3BfcHVzaF9uYW1lX3Njb3BlOgorICAgIGNhc2Ugb3BfcHVzaF93
aXRoX3Njb3BlOgorICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Nj
b3BlOgorICAgIGNhc2Ugb3BfZW5kOgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6Cisg
ICAgY2FzZSBvcF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2Fz
ZSBvcF90aHJvd19zdGF0aWNfZXJyb3I6CisgICAgY2FzZSBvcF9kZWJ1ZzoKKyAgICBjYXNlIG9w
X3JldDoKKyAgICBjYXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpczoKKyAgICBjYXNlIG9wX2ptcDoK
KyAgICBjYXNlIG9wX2p0cnVlOgorICAgIGNhc2Ugb3BfamZhbHNlOgorICAgIGNhc2Ugb3BfamVx
X251bGw6CisgICAgY2FzZSBvcF9qbmVxX251bGw6CisgICAgY2FzZSBvcF9qbmVxX3B0cjoKKyAg
ICBjYXNlIG9wX2psZXNzOgorICAgIGNhc2Ugb3Bfamxlc3NlcToKKyAgICBjYXNlIG9wX2pncmVh
dGVyOgorICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2pubGVzczoKKyAgICBj
YXNlIG9wX2pubGVzc2VxOgorICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgorICAgIGNhc2Ugb3Bfam5n
cmVhdGVyZXE6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9zd2l0Y2hfaW1t
OgorICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6CisgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX291dF9vZl9saW5l
OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3JlcGxhY2U6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRf
dHJhbnNpdGlvbjoKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdDoKKyAg
ICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX2RpcmVjdF9vdXRfb2ZfbGluZToKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uX25vcm1hbDoKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZF90cmFuc2l0aW9uX25vcm1hbF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF9n
ZW5lcmljOgorICAgIGNhc2Ugb3BfcHV0X2dldHRlcl9zZXR0ZXI6CisgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRf
YnlfaW5kZXg6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6CisjZGVmaW5lIExMSU5U
X0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKKyAgICAgICAgRk9S
X0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7CisjdW5k
ZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKKyAgICAgICAgcmV0dXJuOworICAgIC8vIFRoZXNlIGFs
bCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOgorICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICBjYXNl
IG9wX3N0cmNhdDoKKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FjdGl2YXRpb246CisgICAgY2FzZSBv
cF90b19wcmltaXRpdmU6CisgICAgY2FzZSBvcF9jYXRjaDoKKyAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5OgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZl
cjoKKyAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6CisgICAgY2FzZSBvcF9uZXdfcmVn
ZXhwOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6Cisg
ICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKKyAg
ICBjYXNlIG9wX2NhbGw6CisgICAgY2FzZSBvcF9jYWxsX2V2YWw6CisgICAgY2FzZSBvcF9jb25z
dHJ1Y3Q6CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0
X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFpbjoKKyAgICBjYXNlIG9wX2dl
dF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2N1c3RvbV9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9wcm90bzoKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
Z2VuZXJpYzoKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6CisgICAgY2FzZSBvcF9nZXRf
c3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKKyAgICBjYXNl
IG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9nZXRfYnlfdmFsOgorICAgIGNhc2Ugb3BfZ2V0
X2FyZ3VtZW50X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9ieV9wbmFtZToKKyAgICBjYXNlIG9w
X2dldF9hcmd1bWVudHNfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgIGNhc2Ugb3Bf
aXNfdW5kZWZpbmVkOgorICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICBjYXNlIG9wX2lzX251
bWJlcjoKKyAgICBjYXNlIG9wX2lzX3N0cmluZzoKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAg
ICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgorICAgIGNhc2Ugb3BfaW46CisgICAgY2FzZSBvcF90b19u
dW1iZXI6CisgICAgY2FzZSBvcF9uZWdhdGU6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBv
cF9tdWw6CisgICAgY2FzZSBvcF9kaXY6CisgICAgY2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9z
dWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBv
cF91cnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAg
IGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9pbmM6CisgICAgY2FzZSBvcF9kZWM6CisgICAg
Y2FzZSBvcF9lcToKKyAgICBjYXNlIG9wX25lcToKKyAgICBjYXNlIG9wX3N0cmljdGVxOgorICAg
IGNhc2Ugb3BfbnN0cmljdGVxOgorICAgIGNhc2Ugb3BfbGVzczoKKyAgICBjYXNlIG9wX2xlc3Nl
cToKKyAgICBjYXNlIG9wX2dyZWF0ZXI6CisgICAgY2FzZSBvcF9ncmVhdGVyZXE6CisgICAgY2Fz
ZSBvcF9uZXFfbnVsbDoKKyAgICBjYXNlIG9wX2VxX251bGw6CisgICAgY2FzZSBvcF9ub3Q6Cisg
ICAgY2FzZSBvcF9tb3Y6CisgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6CisgICAgY2FzZSBvcF9u
ZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfdG9fdGhpczoKKyAgICBjYXNlIG9wX2dldF9jYWxsZWU6
CisgICAgY2FzZSBvcF9pbml0X2xhenlfcmVnOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRp
b246CisgICAgY2FzZSBvcF9jcmVhdGVfYXJndW1lbnRzOgorICAgIGNhc2Ugb3BfZGVsX2J5X2lk
OgorICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczogeworICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZW50ZXI6IHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gY29kZUJsb2NrLT5tX251bVZhcnM7IGktLTspCisgICAgICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChpKS5vZmZzZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9IH0KK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCisKKyNlbmRpZiAvLyBCeXRlY29kZVVzZURlZl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTk4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogCiAjaW5j
bHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJCeXRlY29kZVVzZURlZi5oIgog
I2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCkBAIC03NTksNiArNzYwLDEzIEBAIHZvaWQgQ29kZUJs
b2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2NhcHR1cmVk
X21vdjogeworICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKKyAgICAgICAgICAgIHByaW50TG9jYXRp
b25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhcHR1cmVkX21vdiIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiJXMsICVzIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShyMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3Bfbm90OiB7CiAgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJub3QiKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ2OSw4ICsyNDc3
LDcgQEAgYm9vbCBDb2RlQmxvY2s6OmlzQ2FwdHVyZWQoVmlydHVhbFJlZ2lzdAogICAgIGlmICgh
c3ltYm9sVGFibGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG9wZXJh
bmQub2Zmc2V0KCkgPD0gc3ltYm9sVGFibGUoKS0+Y2FwdHVyZVN0YXJ0KCkKLSAgICAgICAgJiYg
b3BlcmFuZC5vZmZzZXQoKSA+IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVFbmQoKTsKKyAgICByZXR1
cm4gc3ltYm9sVGFibGUoKS0+aXNDYXB0dXJlZChvcGVyYW5kLm9mZnNldCgpKTsKIH0KIAogaW50
IENvZGVCbG9jazo6ZnJhbWVQb2ludGVyT2Zmc2V0VG9HZXRBY3RpdmF0aW9uUmVnaXN0ZXJzKGlu
dCBtYWNoaW5lQ2FwdHVyZVN0YXJ0KQpAQCAtMzQyNyw2ICszNDM0LDQxIEBAIFN0cmluZyBDb2Rl
QmxvY2s6Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWEKICAgICByZXR1cm4gIiI7CiB9CiAKK25hbWVz
cGFjZSB7CisKK3N0cnVjdCBWZXJpZnlDYXB0dXJlZERlZiB7CisgICAgdm9pZCBvcGVyYXRvcigp
KENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIE9wY29kZUlE
IG9wY29kZUlELCBpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0ID0gaW5zdHJ1Y3Rpb24gLSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7
CisgICAgICAgIAorICAgICAgICBpZiAoY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRl
eChvcGVyYW5kKSkgeworICAgICAgICAgICAgY29kZUJsb2NrLT5iZWdpblZhbGlkYXRpb25EaWRG
YWlsKCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgQXQgYmMjIiwgYnl0ZWNvZGVPZmZzZXQs
ICIgZW5jb3VudGVyZWQgYSBkZWZpbml0aW9uIG9mIGEgY29uc3RhbnQuXG4iKTsKKyAgICAgICAg
ICAgIGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9lbnRlciB8fCBvcGNv
ZGVJRCA9PSBvcF9jYXB0dXJlZF9tb3YpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICAgICAgaWYg
KCF2aXJ0dWFsUmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpCisgICAgICAgICAgICAmJiBvcGVy
YW5kIDw9IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9jay0+
Y2FwdHVyZUVuZCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFsaWRhdGlvbkRp
ZEZhaWwoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRlY29kZU9mZnNl
dCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQgdmFyaWFibGUg
bG9jIiwgdmlydHVhbFJlZy50b0xvY2FsKCksICIuXG4iKTsKKyAgICAgICAgICAgIGNvZGVCbG9j
ay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK307CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAgIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBmcm9t
IHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KQEAgLTM0
NjQsNiArMzUwNiwxNiBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKTspIHsKKyAgICAg
ICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJlZ2lu
KCkgKyBieXRlY29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5p
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7Cisg
ICAgICAgIAorICAgICAgICBWZXJpZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJlZERlZjsKKyAg
ICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCwg
dmVyaWZ5Q2FwdHVyZWREZWYpOworICAgICAgICAKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQgKz0g
b3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpiZWdp
blZhbGlkYXRpb25EaWRGYWlsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8vIElu
aXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAogICAgIGJvb2wgbV9kaWRGYWls
RlRMQ29tcGlsYXRpb247Ci0gICAgCisKKyAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1c2Ug
YnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndAorICAg
IC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1lc3BhY2Vz
LgorICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIE5PX1JFVFVSTl9EVUVf
VE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworCiBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBPVkVSUklERTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBPVkVSUklERTsKQEAg
LTEwMzEsOSArMTAzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0gYWRv
cHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBiZWdpblZhbGlkYXRp
b25EaWRGYWlsKCk7Ci0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlkYXRp
b25EaWRGYWlsKCk7Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRTdHViSW50ZXJu
YWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgdm9pZCByZXNldFN0
dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMTU5
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKG9wX25l
d19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9uZXdfcmVnZXhwLCAzKSBcCiAgICAg
bWFjcm8ob3BfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCAzKSBcCiAgICAg
XAogICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MDEsNyArMTAwMSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TW92ZSgK
IHsKICAgICBtX3N0YXRpY1Byb3BlcnR5QW5hbHl6ZXIubW92KGRzdC0+aW5kZXgoKSwgc3JjLT5p
bmRleCgpKTsKIAotICAgIGVtaXRPcGNvZGUob3BfbW92KTsKKyAgICBlbWl0T3Bjb2RlKGlzQ2Fw
dHVyZWQoZHN0LT5pbmRleCgpKSA/IG9wX2NhcHR1cmVkX21vdiA6IG9wX21vdik7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsKQEAgLTExNTcsMTEgKzExNTcsMTYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRMb2FkRwogICAgIHJldHVybiBt
X2dsb2JhbE9iamVjdFJlZ2lzdGVyOwogfQogCitib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjppc0Nh
cHR1cmVkKGludCBvcGVyYW5kKQoreworICAgIHJldHVybiBtX3N5bWJvbFRhYmxlICYmIG1fc3lt
Ym9sVGFibGUtPmlzQ2FwdHVyZWQob3BlcmFuZCk7Cit9CisKIExvY2FsIEJ5dGVjb2RlR2VuZXJh
dG9yOjpsb2NhbChjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSkKIHsKICAgICBpZiAocHJvcGVy
dHkgPT0gcHJvcGVydHlOYW1lcygpLnRoaXNJZGVudGlmaWVyKQotICAgICAgICByZXR1cm4gTG9j
YWwodGhpc1JlZ2lzdGVyKCksIFJlYWRPbmx5KTsKLQorICAgICAgICByZXR1cm4gTG9jYWwodGhp
c1JlZ2lzdGVyKCksIFJlYWRPbmx5LCBmYWxzZSk7CisgICAgCiAgICAgaWYgKHByb3BlcnR5ID09
IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCiAgICAgICAgIGNyZWF0ZUFyZ3VtZW50c0lmTmVj
ZXNzYXJ5KCk7CiAKQEAgLTExNzMsNyArMTE3OCw3IEBAIExvY2FsIEJ5dGVjb2RlR2VuZXJhdG9y
Ojpsb2NhbChjb25zdCBJZGUKICAgICAgICAgcmV0dXJuIExvY2FsKCk7CiAKICAgICBSZWdpc3Rl
cklEKiBsb2NhbCA9IGNyZWF0ZUxhenlSZWdpc3RlcklmTmVjZXNzYXJ5KCZyZWdpc3RlckZvcihl
bnRyeS5nZXRJbmRleCgpKSk7Ci0gICAgcmV0dXJuIExvY2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRy
aWJ1dGVzKCkpOworICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
LCBpc0NhcHR1cmVkKGxvY2FsLT5pbmRleCgpKSk7CiB9CiAKIExvY2FsIEJ5dGVjb2RlR2VuZXJh
dG9yOjpjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5KQpAQCAtMTE4Niw3ICsx
MTkxLDcgQEAgTG9jYWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29ucwogICAgICAg
ICByZXR1cm4gTG9jYWwoKTsKIAogICAgIFJlZ2lzdGVySUQqIGxvY2FsID0gY3JlYXRlTGF6eVJl
Z2lzdGVySWZOZWNlc3NhcnkoJnJlZ2lzdGVyRm9yKGVudHJ5LmdldEluZGV4KCkpKTsKLSAgICBy
ZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSk7CisgICAgcmV0dXJuIExv
Y2FsKGxvY2FsLCBlbnRyeS5nZXRBdHRyaWJ1dGVzKCksIGlzQ2FwdHVyZWQobG9jYWwtPmluZGV4
KCkpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNrSGFzSW5zdGFuY2Uo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJRCogYmFzZSwgTGFi
ZWwqIHRhcmdldCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIyLDkgKzEyMiwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewog
ICAgICAgICB9CiAKLSAgICAgICAgTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCisgICAgICAgIExvY2FsKFJlZ2lzdGVySUQqIGxvY2FsLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBib29sIGlzQ2FwdHVyZWQpCiAgICAgICAgICAgICA6IG1fbG9jYWwobG9jYWwpCiAg
ICAgICAgICAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICAgICAgICAgLCBtX2lz
Q2FwdHVyZWQoaXNDYXB0dXJlZCkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTEzMywxMCAr
MTM0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBnZXQoKSB7IHJl
dHVybiBtX2xvY2FsOyB9CiAKICAgICAgICAgYm9vbCBpc1JlYWRPbmx5KCkgeyByZXR1cm4gbV9h
dHRyaWJ1dGVzICYgUmVhZE9ubHk7IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNDYXB0dXJl
ZCgpIHsgcmV0dXJuIG1faXNDYXB0dXJlZDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVn
aXN0ZXJJRCogbV9sb2NhbDsKICAgICAgICAgdW5zaWduZWQgbV9hdHRyaWJ1dGVzOworICAgICAg
ICBib29sIG1faXNDYXB0dXJlZDsKICAgICB9OwogCiAgICAgc3RydWN0IFRyeVJhbmdlIHsKQEAg
LTE3MSw2ICsxNzUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCB3aWxsUmVzb2x2
ZVRvQXJndW1lbnRzKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgUmVnaXN0ZXJJRCogdW5j
aGVja2VkUmVnaXN0ZXJGb3JBcmd1bWVudHMoKTsKIAorICAgICAgICBib29sIGlzQ2FwdHVyZWQo
aW50IG9wZXJhbmQpOworICAgICAgICAKICAgICAgICAgTG9jYWwgbG9jYWwoY29uc3QgSWRlbnRp
ZmllciYpOwogICAgICAgICBMb2NhbCBjb25zdExvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKIApA
QCAtMjMxLDYgKzIzNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAg
ICAvLyBOb2RlOjplbWl0Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0
aGVyIGEgbG9jYWwgb3IgYSByZWZlcmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VS
VCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8
fCBkc3QtPnJlZkNvdW50KCkpOworICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHN0b3JlIGRp
cmVjdGx5IGludG8gYSBjYXB0dXJlZCB2YXJpYWJsZS4KKyAgICAgICAgICAgIEFTU0VSVCghZHN0
IHx8IGRzdCA9PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWlzQ2FwdHVyZWQoZHN0LT5pbmRleCgpKSk7
CiAgICAgICAgICAgICBpZiAoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKSB7CiAgICAgICAgICAg
ICAgICAgZW1pdFRocm93RXhwcmVzc2lvblRvb0RlZXBFeGNlcHRpb24oKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNDcsNiArMjU1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIC8vIE5vZGU6OmVtaXRDb2RlIGFzc3VtZXMgdGhhdCBkc3QsIGlmIHBy
b3ZpZGVkLCBpcyBlaXRoZXIgYSBsb2NhbCBvciBhIHJlZmVyZW5jZWQgdGVtcG9yYXJ5LgogICAg
ICAgICAgICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9yZWRSZXN1bHQoKSB8fCAhZHN0LT5p
c1RlbXBvcmFyeSgpIHx8IGRzdC0+cmVmQ291bnQoKSk7CisgICAgICAgICAgICAvLyBTaG91bGQg
bmV2ZXIgc3RvcmUgZGlyZWN0bHkgaW50byBhIGNhcHR1cmVkIHZhcmlhYmxlLgorICAgICAgICAg
ICAgQVNTRVJUKCFkc3QgfHwgZHN0ID09IGlnbm9yZWRSZXN1bHQoKSB8fCAhaXNDYXB0dXJlZChk
c3QtPmluZGV4KCkpKTsKICAgICAgICAgICAgIGlmICghbV92bS0+aXNTYWZlVG9SZWN1cnNlKCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhjZXB0
aW9uKCk7CiAgICAgICAgICAgICByZXR1cm4gbi0+ZW1pdEJ5dGVjb2RlKCp0aGlzLCBkc3QpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzMsMTEgKzY3
MywyMiBAQCBSZWdpc3RlcklEKiBQb3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0CiAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAKICAgICBpZiAo
TG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpKSB7CisgICAgICAgIFJlZ2lzdGVy
SUQqIGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7CiAgICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5
KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRl
ZCgpOwotICAgICAgICAgICAgbG9jYWwgPSBMb2NhbChnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSksIDApOworICAgICAgICAgICAg
bG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBsb2NhbFJlZyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVtaXRQb3N0SW5jT3JE
ZWMoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQo
KSwgbV9vcGVyYXRvcik7CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChkc3QpOworICAgICAgICAgICAgQVNTRVJUKGRzdCAhPSBsb2NhbFJlZyk7
CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERzdFNyYyA9IGdlbmVyYXRvci5u
ZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0VG9OdW1iZXIoZHN0LCBs
b2NhbFJlZyk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUodGVtcERzdFNyYy5nZXQo
KSwgbG9jYWxSZWcpOworICAgICAgICAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdGVtcERz
dFNyYy5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
bG9jYWxSZWcsIHRlbXBEc3RTcmMuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGRzdDsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKICAgICB9
CiAKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQo
KSwgZGl2b3RFbmQoKSk7CkBAIC04MzgsMTIgKzg0OSwyMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhO
b2RlOjplbWl0UmVzb2x2ZShCeXRlCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSByZXNv
bHZlLT5pZGVudGlmaWVyKCk7CiAKICAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9j
YWwoaWRlbnQpKSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7
CiAgICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgbG9jYWwgPSBM
b2NhbChnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBs
b2NhbC5nZXQoKSksIDApOworICAgICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1v
dmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbFJlZyk7CiAgICAgICAgIH0K
LSAgICAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgbG9jYWwuZ2V0KCksIG1fb3BlcmF0b3Ip
OwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0
LCBsb2NhbC5nZXQoKSk7CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5h
dGlvbihkc3QpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHRlbXBEc3QuZ2V0KCks
IGxvY2FsUmVnKTsKKyAgICAgICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHRlbXBEc3Qu
Z2V0KCksIG1fb3BlcmF0b3IpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2Fs
UmVnLCB0ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRv
RGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICB9CisgICAg
ICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKKyAgICAg
ICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWxS
ZWcpOwogICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwg
ZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKQEAgLTEzNTYsNiArMTM3NSwxMiBAQCBSZWdpc3Rl
cklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjCiAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKICAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3JpZ2h0KTsKICAgICAgICAgfQorICAgICAgICBpZiAobG9j
YWwuaXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERz
dCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX3JpZ2h0KTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0LmdldCgp
KTsKKyAgICAgICAgfQogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobG9jYWwuZ2V0KCksIG1fcmlnaHQpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0MSw3ICsyMTQxLDggQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmVha3Bv
aW50KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgotICAgICAg
ICBjYXNlIG9wX21vdjogeworICAgICAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgY2FzZSBvcF9j
YXB0dXJlZF9tb3Y6IHsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9tb3YpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDIsNiArMTAyLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJ
RAogICAgIGNhc2Ugb3BfZGVidWc6CiAjZW5kaWYKICAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNl
IG9wX2NhcHR1cmVkX21vdjoKICAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKICAgICBj
YXNlIG9wX2luc3RhbmNlb2Y6CiAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9s
b29wX2hpbnQpCiAgICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCiAgICAgICAgIERFRklORV9P
UChvcF9tb2QpCisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgICAgICBERUZJTkVf
T1Aob3BfbW92KQogICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Ao
b3BfbmVnYXRlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1OTg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3
b3JraW5nIGNvcHkpCkBAIC01NDIsNiArNTQyLDE2IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlz
cGF0Y2goMykKIAogCitfbGxpbnRfb3BfY2FwdHVyZWRfbW92OgorICAgIHRyYWNlRXhlY3V0aW9u
KCkKKyAgICBsb2FkaSA4W1BDXSwgdDEKKyAgICBsb2FkaSA0W1BDXSwgdDAKKyAgICBsb2FkQ29u
c3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCisgICAgc3RvcmVpIHQyLCBUYWdPZmZzZXRbY2Zy
LCB0MCwgOF0KKyAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MCwgOF0KKyAgICBk
aXNwYXRjaCgzKQorCisKIF9sbGludF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAg
IGxvYWRpIDhbUENdLCB0MApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTgsNiArNDE4LDE1IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0
Y2goMykKIAogCitfbGxpbnRfb3BfY2FwdHVyZWRfbW92OgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQwKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQorICAgIHN0b3Jl
cSB0MiwgW2NmciwgdDAsIDhdCisgICAgZGlzcGF0Y2goMykKKworCiBfbGxpbnRfb3Bfbm90Ogog
ICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlz
aW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Myw2ICs0NTMsMTEgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Q2FwdHVyZUVuZChpbnQgY2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5k
OyB9CiAKICAgICBpbnQgY2FwdHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVF
bmQgLSBtX2NhcHR1cmVTdGFydCk7IH0KKyAgICAKKyAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9w
ZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAm
JiBvcGVyYW5kID4gY2FwdHVyZUVuZCgpOworICAgIH0KIAogICAgIGludCBwYXJhbWV0ZXJDb3Vu
dCgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGlu
dCBwYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50
SW5jbHVkaW5nVGhpczsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218117</attachid>
            <date>2013-12-01 11:23:53 -0800</date>
            <delta_ts>2013-12-01 12:18:14 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67746</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5OTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEzLTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RvcmVzIHRvIGxvY2FsIGNhcHR1cmVkIHZhcmlhYmxlcyBzaG91bGQgYmUgaW50ZXJjZXB0ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDg4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
UHJldmlvdXNseSwgaW4gYnl0ZWNvZGUsIHlvdSBjb3VsZCBhc3NpZ24gdG8gYSBjYXB0dXJlZCB2
YXJpYWJsZSBqdXN0IGFzIHlvdSB3b3VsZAorICAgICAgICBhc3NpZ24gdG8gYW55IG90aGVyIGtp
bmQgb2YgdmFyaWFibGUuIFRoaXMgY29tcGxpY2F0ZXMgY2xvc3VyZSB2YXJpYWJsZSBjb25zdGFu
dAorICAgICAgICBpbmZlcmVuY2UgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSBwbGFjZSB3aGVy
ZSB3ZSBjYW4gaW50ZXJjZXB0IHN0b3JlcyB0byBjYXB0dXJlZAorICAgICAgICB2YXJpYWJsZXMg
aW4gdGhlIExMSW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnN0aXR1dGVzIGEg
cG9saWN5IHRoYXQgb25seSBjZXJ0YWluIGluc3RydWN0aW9ucyBjYW4gc3RvcmUgdG8gY2FwdHVy
ZWQKKyAgICAgICAgdmFyaWFibGVzLiBJZiB5b3UgaW50ZXJwcmV0IHRob3NlIGluc3RydWN0aW9u
cyBhbmQgeW91IGFyZSByZXF1aXJlZCB0byBub3RpZnlXcml0ZSgpCisgICAgICAgIHRoZW4geW91
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlbGV2YW50IHZhcmlhYmxlIGlzIGNhcHR1cmVkLiBUaG9z
ZSBpbnN0cnVjdGlvbnMgYXJlCisgICAgICAgIHRyYWNrZWQgaW4gQ29kZUJsb2NrLmNwcCdzIFZl
cmlmeUNhcHR1cmVkRGVmLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjpz
dGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0NhcHR1cmVkKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgIChKU0M6OnBhZE9wY29kZU5h
bWUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmlzQ2FwdHVyZWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bG9j
YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2Fs
OjpMb2NhbCk6CisgICAgICAgIChKU0M6OkxvY2FsOjppc0NhcHR1cmVkKToKKyAgICAgICAgKEpT
Qzo6TG9jYWw6OmNhcHR1cmVNb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmNhcHR1cmVNb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2Rl
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpT
Qzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9kZTo6
ZW1pdFJlc29sdmUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6aXNDYXB0dXJlZCk6CisKIDIwMTMtMTEt
MjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5hbGx5IHJl
bW92ZSB0aG9zZSBERkdfRU5BQkxFIHRoaW5ncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEw
MiwxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggXAotCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNzUxLDYgKzc1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZVVzZURlZi5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4
OSw3IEBACiAJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsg
fTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1
MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAw
NTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5j
aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExp
bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3
MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5
OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdE
QkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtMTU4Myw2ICsxNTg0
LDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1
MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3
MUUgLyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWYXJpYWRpY0Z1bmN0aW9uLmg7IHBhdGggPSBkZmcvREZHVmFyaWFkaWNGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMx
NzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGlu
ay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9
IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDA1OCw2ICs0MDYwLDcgQEAKIAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZFQkUxODM1
NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKKwkJ
CQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYwQjgzQUUx
NEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJD
RjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLApAQCAtNDI2OSw2ICs0MjcyLDcgQEAK
IAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBE
ZWZlckdDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyog
Qnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhD
QzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjNFMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lv
biAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNp
bmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKQEAgLTY3LDQyNCArNjgsMjYgQEAgc3RhdGlj
IHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZAogICAgICAgICBiaXRzLnNldCh2aXJ0
dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCi1zdGF0
aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKLXsKLSAgICBJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwot
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rp
b25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOwotICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgIC8vIE5vIHVzZXMuCi0gICAgY2FzZSBvcF9uZXdfcmVnZXhwOgotICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJv
cjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKLSAgICBj
YXNlIG9wX3BvcF9zY29wZToKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3BfbmV3
X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfbG9vcF9oaW50OgotICAgIGNhc2Ugb3Bfam1wOgotICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6Ci0gICAgY2Fz
ZSBvcF9nZXRfY2FsbGVlOgotICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF9jYXRjaDoK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZpcnN0IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfbmV3
X2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjogCi0gICAgY2FzZSBvcF9jcmVh
dGVfYXJndW1lbnRzOgotICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICBjYXNlIG9wX3RlYXJfb2Zm
X2FjdGl2YXRpb246Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9w
X3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3B1c2hf
d2l0aF9zY29wZToKLSAgICBjYXNlIG9wX2VuZDoKLSAgICBjYXNlIG9wX3JldDoKLSAgICBjYXNl
IG9wX2p0cnVlOgotICAgIGNhc2Ugb3BfamZhbHNlOgotICAgIGNhc2Ugb3BfamVxX251bGw6Ci0g
ICAgY2FzZSBvcF9qbmVxX251bGw6Ci0gICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6
IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVs
X2J5X2lkOgotICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfamxl
c3NlcToKLSAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAg
ICBjYXNlIG9wX2pubGVzczoKLSAgICBjYXNlIG9wX2pubGVzc2VxOgotICAgIGNhc2Ugb3Bfam5n
cmVhdGVyOgotICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgY2FzZSBvcF9qbGVzczogewot
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0g
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGaXJzdCwgc2Vjb25k
LCBhbmQgdGhpcmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKLSAgICBjYXNl
IG9wX3B1dF9ieV92YWxfZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAg
ICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMs
IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9w
dXRfYnlfaW5kZXg6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
ZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9s
aW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0g
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAg
ICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQg
Zm91cnRoIGFyZ3VtZW50cy4KLSAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNl
cywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kIGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Rfbm9wOgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBv
cF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICBjYXNl
IG9wX3RvX3ByaW1pdGl2ZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICBjYXNlIG9wX2dl
dF9ieV9pZF9vdXRfb2ZfbGluZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9wcm90bzoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46Ci0gICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKLSAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZW5lcmljOgotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBj
YXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5n
dGg6Ci0gICAgY2FzZSBvcF90eXBlb2Y6Ci0gICAgY2FzZSBvcF9pc191bmRlZmluZWQ6Ci0gICAg
Y2FzZSBvcF9pc19ib29sZWFuOgotICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgotICAgIGNhc2Ugb3Bf
aXNfc3RyaW5nOgotICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgotICAgIGNhc2Ugb3BfaXNfZnVuY3Rp
b246Ci0gICAgY2FzZSBvcF90b19udW1iZXI6Ci0gICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgY2Fz
ZSBvcF9uZXFfbnVsbDoKLSAgICBjYXNlIG9wX2VxX251bGw6Ci0gICAgY2FzZSBvcF9ub3Q6Ci0g
ICAgY2FzZSBvcF9tb3Y6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNh
c2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNl
dEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRz
LgotICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92
YWw6Ci0gICAgY2FzZSBvcF9pbjoKLSAgICBjYXNlIG9wX2luc3RhbmNlb2Y6Ci0gICAgY2FzZSBv
cF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBvcF9tdWw6
Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAgY2FzZSBvcF9tb2Q6Ci0gICAgY2FzZSBvcF9zdWI6Ci0g
ICAgY2FzZSBvcF9sc2hpZnQ6Ci0gICAgY2FzZSBvcF9yc2hpZnQ6Ci0gICAgY2FzZSBvcF91cnNo
aWZ0OgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNhc2Ugb3BfYml0eG9yOgotICAgIGNhc2Ug
b3BfYml0b3I6Ci0gICAgY2FzZSBvcF9sZXNzOgotICAgIGNhc2Ugb3BfbGVzc2VxOgotICAgIGNh
c2Ugb3BfZ3JlYXRlcjoKLSAgICBjYXNlIG9wX2dyZWF0ZXJlcToKLSAgICBjYXNlIG9wX25zdHJp
Y3RlcToKLSAgICBjYXNlIG9wX3N0cmljdGVxOgotICAgIGNhc2Ugb3BfbmVxOgotICAgIGNhc2Ug
b3BfZXE6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vj
b25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3M6Ci0gICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vj
b25kLCB0aGlyZCwgZm91cnRoLCBhbmQgZmlmdGggYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV4
dF9wbmFtZTogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlm
IChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxp
dmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKLSAgICAgICAgICAg
IHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
OwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbls1XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxv
Y2ssIHVzZXMsIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3Vt
ZW50cy4gCi0gICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywg
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gVGhpcmQgYXJndW1lbnQuCi0gICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5n
OgotICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6Ci0gICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5OgotICAgIGNhc2Ugb3Bfc3RyY2F0OiB7Ci0gICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkp
KQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0g
aSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDcmF6eSBzdHVm
ZiBmb3IgY2FsbHMuCi0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgY2FzZSBvcF9jYWxsX2V2
YWw6Ci0gICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgbGFzdEFyZyArIGkpKQotICAgICAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBTcGVjaWFsIHN0dWZmIGZvciB0ZWFy
IG9mZiBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KK25hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBkZWZzKQotewotICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpblti
eXRlY29kZU9mZnNldF07Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3BfaW5pdF9n
bG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6Ci0gICAgY2Fz
ZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Ci0gICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0gICAgY2FzZSBvcF9wb3Bfc2NvcGU6Ci0gICAgY2FzZSBv
cF9lbmQ6Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2Zp
bGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRp
Y19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmV0OgotICAgIGNhc2Ug
b3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfanRy
dWU6Ci0gICAgY2FzZSBvcF9qZmFsc2U6Ci0gICAgY2FzZSBvcF9qZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2puZXFfbnVsbDoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3Bfamxlc3M6
Ci0gICAgY2FzZSBvcF9qbGVzc2VxOgotICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgY2FzZSBv
cF9qZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3Bfam5sZXNzOgotICAgIGNhc2Ugb3Bfam5sZXNzZXE6
Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKLSAgICBj
YXNlIG9wX2xvb3BfaGludDoKLSAgICBjYXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgY2FzZSBvcF9z
d2l0Y2hfY2hhcjoKLSAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Ci0gICAgY2FzZSBvcF9wdXRf
YnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKLSAgICBjYXNlIG9wX3B1dF9ieV92YWw6Ci0gICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKLSAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKLSAgICBj
YXNlIG9wX2RlbF9ieV9pZDoKLSAgICBjYXNlIG9wX2RlbF9ieV92YWw6Ci0jZGVmaW5lIExMSU5U
X0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICAgICAgRk9S
X0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7Ci0jdW5k
ZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZXNlIGFs
bCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOgotICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICBjYXNlIG9w
X3Jlc29sdmVfc2NvcGU6Ci0gICAgY2FzZSBvcF9zdHJjYXQ6Ci0gICAgY2FzZSBvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uOgotICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3BfY2F0
Y2g6Ci0gICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKLSAgICBjYXNlIG9wX25ld19hcnJheToKLSAg
ICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9z
aXplOgotICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKLSAgICBjYXNlIG9wX25ld19mdW5jOgotICAg
IGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgIGNhc2Ugb3BfY2Fs
bF9ldmFsOgotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlf
aWRfY2hhaW46Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6Ci0gICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKLSAgICBjYXNlIG9wX2dl
dF9ieV9pZF9jdXN0b21fcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWlu
OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9nZXRfYXJyYXlf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgY2FzZSBvcF9jaGVj
a19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9pbnN0YW5jZW9mOgotICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9n
ZXRfYnlfcG5hbWU6Ci0gICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICBjYXNl
IG9wX3R5cGVvZjoKLSAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKLSAgICBjYXNlIG9wX2lzX2Jv
b2xlYW46Ci0gICAgY2FzZSBvcF9pc19udW1iZXI6Ci0gICAgY2FzZSBvcF9pc19zdHJpbmc6Ci0g
ICAgY2FzZSBvcF9pc19vYmplY3Q6Ci0gICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKLSAgICBjYXNl
IG9wX2luOgotICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgotICAgIGNhc2Ugb3BfbmVnYXRlOgotICAg
IGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNhc2Ugb3BfZGl2OgotICAgIGNh
c2Ugb3BfbW9kOgotICAgIGNhc2Ugb3Bfc3ViOgotICAgIGNhc2Ugb3BfbHNoaWZ0OgotICAgIGNh
c2Ugb3BfcnNoaWZ0OgotICAgIGNhc2Ugb3BfdXJzaGlmdDoKLSAgICBjYXNlIG9wX2JpdGFuZDoK
LSAgICBjYXNlIG9wX2JpdHhvcjoKLSAgICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfaW5j
OgotICAgIGNhc2Ugb3BfZGVjOgotICAgIGNhc2Ugb3BfZXE6Ci0gICAgY2FzZSBvcF9uZXE6Ci0g
ICAgY2FzZSBvcF9zdHJpY3RlcToKLSAgICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9w
X2xlc3M6Ci0gICAgY2FzZSBvcF9sZXNzZXE6Ci0gICAgY2FzZSBvcF9ncmVhdGVyOgotICAgIGNh
c2Ugb3BfZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3BfbmVxX251bGw6Ci0gICAgY2FzZSBvcF9lcV9u
dWxsOgotICAgIGNhc2Ugb3Bfbm90OgotICAgIGNhc2Ugb3BfbW92OgotICAgIGNhc2Ugb3BfbmV3
X29iamVjdDoKLSAgICBjYXNlIG9wX3RvX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgot
ICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKLSAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9u
OgotICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogewotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQot
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKK2NsYXNzIFNldEJpdCB7CitwdWJsaWM6Cisg
ICAgU2V0Qml0KEZhc3RCaXRWZWN0b3ImIGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJpdHMpCisg
ICAgewogICAgIH0KLSAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICBp
bnQgb3BlcmFuZCA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKTsKKyAgICAK
KyAgICB2b2lkIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiwg
T3Bjb2RlSUQsIGludCBvcGVyYW5kKQorICAgIHsKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgZGVmcywgb3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCBtX2JpdHMsIG9wZXJhbmQpOwogICAgIH0KLSAg
ICBjYXNlIG9wX2VudGVyOiB7Ci0gICAgICAgIGRlZnMuc2V0QWxsKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIAor
cHJpdmF0ZToKKyAgICBGYXN0Qml0VmVjdG9yJiBtX2JpdHM7Cit9OworCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAogc3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxv
Y2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCiB7CkBAIC01MzUsOCAr
MTM4LDEwIEBAIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MKICAgICB1
c2VzLmNsZWFyQWxsKCk7CiAgICAgZGVmcy5jbGVhckFsbCgpOwogICAgIAotICAgIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7Ci0g
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCBkZWZzKTsKKyAgICBTZXRCaXQgc2V0VXNlcyh1c2VzKTsKKyAgICBTZXRCaXQgc2V0RGVmcyhk
ZWZzKTsKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIHNldFVzZXMpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgc2V0RGVmcyk7CiAgICAgCiAgICAgb3V0LmV4Y2x1ZGUo
ZGVmcyk7CiAgICAgb3V0Lm1lcmdlKHVzZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVVc2VEZWZfaAor
I2RlZmluZSBCeXRlY29kZVVzZURlZl9oCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
OworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRl
Y29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Cisg
ICAgLy8gTm8gdXNlcy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ug
b3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Nj
b3BlOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6Cisg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdf
b2JqZWN0OgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxs
ZWU6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5j
OgorICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRpb246IAorICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hY3Rp
dmF0aW9uOgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2FzZSBvcF9wcm9m
aWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF9wdXNoX3dpdGhf
c2NvcGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfaW5jOiB7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9y
ZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9zZXR0ZXI6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2lu
aXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgorICAg
IGNhc2Ugb3BfcHVzaF9uYW1lX3Njb3BlOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Cisg
ICAgY2FzZSBvcF90b19wcmltaXRpdmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFp
bjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9nZXR0ZXJfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2NoYWluOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2N1c3RvbV9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
CisgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVu
dHNfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVk
OgorICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICBj
YXNlIG9wX2lzX3N0cmluZzoKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICBjYXNlIG9wX2lz
X2Z1bmN0aW9uOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRlOgor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNhc2Ugb3Bf
bm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAg
IGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9pbjoKKyAg
ICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Cisg
ICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBvcF9kaXY6CisgICAg
Y2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAg
Y2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0YW5k
OgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9s
ZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX3N0cmlj
dGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9kZWxf
YnlfdmFsOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2dl
dF9ieV9wbmFtZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoK
KyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTogeworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfbmV3
X2FycmF5OgorICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0gaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGJhc2UgLSBp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAg
ICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGxhc3RBcmcgKyBpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogeworICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9yKQorewor
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0
ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0
cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgorICAg
IGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25z
dF9ub3A6CisgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9wdXNoX3dp
dGhfc2NvcGU6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wb3Bfc2Nv
cGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKKyAg
ICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNl
IG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3Bf
cmV0OgorICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bfam1wOgor
ICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFf
bnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAg
IGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNh
c2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdy
ZWF0ZXJlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90
cmFuc2l0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dl
bmVyaWM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pbmRleDoKKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKKyNkZWZpbmUgTExJTlRf
SEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ugb3Bjb2RlOgorICAgICAgICBGT1Jf
RUFDSF9MTElOVF9PUENPREVfRVhURU5TSU9OKExMSU5UX0hFTFBFUl9PUENPREVTKTsKKyN1bmRl
ZiBMTElOVF9IRUxQRVJfT1BDT0RFUworICAgICAgICByZXR1cm47CisgICAgLy8gVGhlc2UgYWxs
IGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICBj
YXNlIG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9w
X3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Ro
aXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX25ld19yZWdl
eHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5j
OgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgor
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9jYWxsOgorICAgIGNhc2Ug
b3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNl
IG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRf
YXJyYXlfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBv
cF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2Fz
ZSBvcF9nZXRfYnlfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKKyAg
ICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICBjYXNlIG9w
X2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgY2FzZSBvcF9pc19zdHJp
bmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAg
ICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRl
OgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3BfZGl2Ogor
ICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2Jp
dGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ug
b3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBj
YXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgor
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBv
cF9lcV9udWxsOgorICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ug
b3BfY2FwdHVyZWRfbW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX3Rv
X3RoaXM6CisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6
IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2VudGVyOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jay0+bV9udW1W
YXJzOyBpLS07KQorICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBv
cGNvZGVJRCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfSB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0
ZWNvZGVVc2VEZWZfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5o
IgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgpA
QCAtNzU5LDYgKzc2MCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJjYXB0dXJlZF9tb3YiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewogICAgICAg
ICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibm90Iik7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyMTAsNiArMTIxOCwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgZiVkLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hvdWxkQ2hlY2sgPyAiPENoZWNrZWQ+
IiA6ICI8VW5jaGVja2VkPiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBzaG91bGRDaGVjayA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Nh
cHR1cmVkX2Z1bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIGYwLCBzaG91bGRDaGVjayA/ICI8Q2hlY2tlZD4iIDogIjxV
bmNoZWNrZWQ+Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTI0NjksOCAr
MjQ4NSw3IEBAIGJvb2wgQ29kZUJsb2NrOjppc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3QKICAgICBp
ZiAoIXN5bWJvbFRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBv
cGVyYW5kLm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCi0gICAgICAg
ICYmIG9wZXJhbmQub2Zmc2V0KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlKCktPmlzQ2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7CiB9CiAK
IGludCBDb2RlQmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVy
cyhpbnQgbWFjaGluZUNhcHR1cmVTdGFydCkKQEAgLTM0MjcsNiArMzQ0Miw0OSBAQCBTdHJpbmcg
Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwogfQogCitu
YW1lc3BhY2UgeworCitzdHJ1Y3QgVmVyaWZ5Q2FwdHVyZWREZWYgeworICAgIHZvaWQgb3BlcmF0
b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBPcGNv
ZGVJRCBvcGNvZGVJRCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+YmVnaW5WYWxpZGF0aW9u
RGlkRmFpbCgpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0IGJjIyIsIGJ5dGVjb2RlT2Zm
c2V0LCAiIGVuY291bnRlcmVkIGEgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50LlxuIik7CisgICAg
ICAgICAgICBjb2RlQmxvY2stPmVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAg
IGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgICAgICBj
YXNlIG9wX2luaXRfbGF6eV9yZWc6CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICAgICAg
aWYgKCF2aXJ0dWFsUmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpCisgICAgICAgICAgICAmJiBv
cGVyYW5kIDw9IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9j
ay0+Y2FwdHVyZUVuZCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRlY29kZU9m
ZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQgdmFyaWFi
bGUgbG9jIiwgdmlydHVhbFJlZy50b0xvY2FsKCksICIuXG4iKTsKKyAgICAgICAgICAgIGNvZGVC
bG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAgIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBm
cm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KQEAg
LTM0NjQsNiArMzUyMiwxNiBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKTspIHsKKyAg
ICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBieXRlY29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3Zt
LT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7
CisgICAgICAgIAorICAgICAgICBWZXJpZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJlZERlZjsK
KyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNl
dCwgdmVyaWZ5Q2FwdHVyZWREZWYpOworICAgICAgICAKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQg
Kz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCwx
MiBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8v
IEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb247Ci0gICAgCisKKyAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1
c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndAor
ICAgIC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1lc3Bh
Y2VzLgorICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBPVkVSUklERTsK
QEAgLTEwMzEsOSArMTAzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0g
YWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBiZWdpblZhbGlk
YXRpb25EaWRGYWlsKCk7Ci0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlk
YXRpb25EaWRGYWlsKCk7Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRTdHViSW50
ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgdm9pZCByZXNl
dFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKG9w
X25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9uZXdfcmVnZXhwLCAzKSBcCiAg
ICAgbWFjcm8ob3BfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCAzKSBcCiAg
ICAgXAogICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkBAIC0x
NTMsNiArMTU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3Bfc3dpdGNoX3N0cmlu
ZywgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9uZXdfZnVuYywgNCkgXAorICAgIG1hY3JvKG9w
X25ld19jYXB0dXJlZF9mdW5jLCA0KSBcCiAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhwLCAzKSBc
CiAgICAgbWFjcm8ob3BfY2FsbCwgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAg
bWFjcm8ob3BfY2FsbF9ldmFsLCA4KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA3LDcgKzMwNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJl
Z2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0
aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgZW1p
dE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YXJTdGFjay5zaXplKCk7ICsraSkgewpAQCAtMzM1LDcgKzMzNSw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIC8vIERvbid0IGxhemls
eSBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAg
ICAgICAgICAgIC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24g
b2YgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVu
Y3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgICAg
ICAgICAgZW1pdE5ld0Z1bmN0aW9uKHJlZy5nZXQoKSwgZnVuY3Rpb24pOworICAgICAgICAgICAg
ICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIE5vdENhcHR1cmVkLCBmdW5jdGlvbik7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcihy
ZWcuZ2V0KCkpOwogICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVnLT52aXJ0
dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKQEAgLTQ3Miw3ICs0NzIsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhCiAgICAgICAgIHJldHVybiAm
bV9jYWxsZWVSZWdpc3RlcjsKIAogICAgIC8vIE1vdmUgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYXB0
dXJlZCBzZWN0aW9uIG9mIHRoZSBzdGFjay4KLSAgICByZXR1cm4gZW1pdE1vdmUoYWRkVmFyKCks
ICZtX2NhbGxlZVJlZ2lzdGVyKTsKKyAgICByZXR1cm4gZW1pdE1vdmUoYWRkVmFyKCksIElzQ2Fw
dHVyZWQsICZtX2NhbGxlZVJlZ2lzdGVyKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIFJlZ2lzdGVySUQq
IGNhbGxlZVJlZ2lzdGVyKQpAQCAtOTk3LDE2ICs5OTcsMjEgQEAgdW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFJlZ0V4cChSZQogICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkUmVnRXhw
KHIpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE1vdmUoUmVnaXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSBjYXB0dXJlTW9kZSwgUmVn
aXN0ZXJJRCogc3JjKQogewogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5tb3YoZHN0LT5p
bmRleCgpLCBzcmMtPmluZGV4KCkpOwogCi0gICAgZW1pdE9wY29kZShvcF9tb3YpOworICAgIGVt
aXRPcGNvZGUoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCA/IG9wX2NhcHR1cmVkX21vdiA6IG9w
X21vdik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKQoreworICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNhcHR1cmVNb2Rl
KGRzdC0+aW5kZXgoKSksIHNyYyk7Cit9CisKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpCiB7CiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CkBAIC0xMTU3LDExICsxMTYy
LDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEcKICAgICByZXR1
cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKIH0KIAorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gbV9zeW1ib2xUYWJsZSAmJiBt
X3N5bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOworfQorCiBMb2NhbCBCeXRlY29kZUdl
bmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAgaWYgKHBy
b3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJu
IExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSk7Ci0KKyAgICAgICAgcmV0dXJuIExvY2Fs
KHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTm90Q2FwdHVyZWQpOworICAgIAogICAgIGlmIChw
cm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQogICAgICAgICBjcmVhdGVBcmd1
bWVudHNJZk5lY2Vzc2FyeSgpOwogCkBAIC0xMTczLDcgKzExODMsNyBAQCBMb2NhbCBCeXRlY29k
ZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAg
ICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVn
aXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50
cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSwgY2FwdHVyZU1vZGUobG9jYWwtPmluZGV4KCkpKTsKIH0KIAogTG9jYWwgQnl0
ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCkBA
IC0xMTg2LDcgKzExOTYsNyBAQCBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChj
b25zCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBj
cmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAg
ICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgY2FwdHVyZU1vZGUo
bG9jYWwtPmluZGV4KCkpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNr
SGFzSW5zdGFuY2UoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJ
RCogYmFzZSwgTGFiZWwqIHRhcmdldCkKQEAgLTE1NDcsOSArMTU1Nyw5IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRz
dCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgQ2FwdHVyZU1vZGUgY2FwdHVy
ZU1vZGUsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBlbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50
ZXJuYWwoZHN0LCBjYXB0dXJlTW9kZSwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtl
RnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9k
eU5vZGUqIGZ1bmN0aW9uKQpAQCAtMTU1NywxMyArMTU2NywxMyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExhenlOCiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3Vs
dCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIu
aXNOZXdFbnRyeSkKICAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXRO
ZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CisgICAg
cmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgTm90Q2FwdHVyZWQsIHB0ci5pdGVy
YXRvci0+dmFsdWUsIHRydWUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwg
Ym9vbCBkb051bGxDaGVjaykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIENhcHR1cmVNb2RlIGNhcHR1cmVNb2Rl
LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKIHsKICAgICBjcmVhdGVBY3RpdmF0
aW9uSWZOZWNlc3NhcnkoKTsKLSAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKKyAgICBlbWl0
T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRfZnVuYyA6
IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkb051bGxDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTk4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAorICAgIGVudW0gQ2FwdHVyZU1vZGUgewor
ICAgICAgICBOb3RDYXB0dXJlZCwKKyAgICAgICAgSXNDYXB0dXJlZAorICAgIH07CisKICAgICBj
bGFzcyBMb2NhbCB7CiAgICAgcHVibGljOgogICAgICAgICBMb2NhbCgpCkBAIC0xMjIsOSArMTI3
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBM
b2NhbChSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgTG9j
YWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIENhcHR1cmVNb2RlIGNh
cHR1cmVNb2RlKQogICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBt
X2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgICAgICwgbV9pc0NhcHR1cmVkKGNhcHR1
cmVNb2RlID09IElzQ2FwdHVyZWQpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsMTAg
KzEzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgeyBy
ZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1f
YXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzQ2FwdHVy
ZWQoKSB7IHJldHVybiBtX2lzQ2FwdHVyZWQ7IH0KKyAgICAgICAgQ2FwdHVyZU1vZGUgY2FwdHVy
ZU1vZGUoKSB7IHJldHVybiBpc0NhcHR1cmVkKCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVyZWQ7
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAgICAgICAg
IHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBUcnlSYW5nZSB7CkBAIC0xNzEsNiArMTgxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlm
aWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRz
KCk7CiAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKTsKKyAgICAgICAgQ2Fw
dHVyZU1vZGUgY2FwdHVyZU1vZGUoaW50IG9wZXJhbmQpIHsgcmV0dXJuIGlzQ2FwdHVyZWQob3Bl
cmFuZCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVyZWQ7IH0KKyAgICAgICAgCiAgICAgICAgIExv
Y2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTG9jYWwgY29uc3RMb2NhbChj
b25zdCBJZGVudGlmaWVyJik7CiAKQEAgLTIzMSw2ICsyNDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRz
dCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3Jh
cnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8
ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKKyAgICAgICAgICAgIC8v
IFNob3VsZCBuZXZlciBzdG9yZSBkaXJlY3RseSBpbnRvIGEgY2FwdHVyZWQgdmFyaWFibGUuCisg
ICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFpc0Nh
cHR1cmVkKGRzdC0+aW5kZXgoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ZtLT5pc1NhZmVUb1Jl
Y3Vyc2UoKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhj
ZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ3LDYgKzI2Miw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0Q29kZSBh
c3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3IgYSByZWZl
cmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25v
cmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50KCkpOwor
ICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHN0b3JlIGRpcmVjdGx5IGludG8gYSBjYXB0dXJl
ZCB2YXJpYWJsZS4KKyAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVz
dWx0KCkgfHwgIWlzQ2FwdHVyZWQoZHN0LT5pbmRleCgpKSk7CiAgICAgICAgICAgICBpZiAoIW1f
dm0tPmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRC
eXRlY29kZSgqdGhpcywgZHN0KTsKQEAgLTMyOSwxMiArMzQ2LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnRO
b2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lvbgogCi0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9u
Qm9keU5vZGUqIGJvZHkpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVn
aXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdp
c3RlcklEKiBkc3QsIENhcHR1cmVNb2RlLCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY0V4cHJOb2RlKiBmdW5jKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCopOwogCisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwgQ2FwdHVyZU1vZGUsIFJlZ2lzdGVySUQq
IHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9OdW1iZXIoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9wX3RvX251
bWJlciwgZHN0LCBzcmMpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3MywxMSArNjczLDIyIEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhOb2RlOjplbWl0
UmVzb2x2ZShCeXQKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50
aWZpZXIoKTsKIAogICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkp
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWxSZWcgPSBsb2NhbC5nZXQoKTsKICAgICAgICAg
aWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFk
T25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICBsb2NhbCA9IExvY2FsKGdlbmVy
YXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgp
KSwgMCk7CisgICAgICAgICAgICBsb2NhbFJlZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnKTsKICAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0
aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX29wZXJhdG9yKTsKKyAgICAgICAgaWYgKGxvY2FsLmlz
Q2FwdHVyZWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKGRzdCk7CisgICAgICAgICAgICBBU1NF
UlQoZHN0ICE9IGxvY2FsUmVnKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1w
RHN0U3JjID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRUb051bWJlcihkc3QsIGxvY2FsUmVnKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
TW92ZSh0ZW1wRHN0U3JjLmdldCgpLCBsb2NhbFJlZyk7CisgICAgICAgICAgICBlbWl0SW5jT3JE
ZWMoZ2VuZXJhdG9yLCB0ZW1wRHN0U3JjLmdldCgpLCBtX29wZXJhdG9yKTsKKyAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbFJlZywgdGVtcERzdFNyYy5nZXQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gZHN0OworICAgICAgICB9CisgICAgICAgIHJldHVybiBlbWl0UG9zdEluY09y
RGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcs
IG1fb3BlcmF0b3IpOwogICAgIH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKQEAgLTgzOCwxMiArODQ5LDIwIEBA
IFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKEJ5dGUKICAgICBjb25zdCBJZGVu
dGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKIAogICAgIGlmIChMb2NhbCBs
b2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9j
YWxSZWcgPSBsb2NhbC5nZXQoKTsKICAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgewog
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0g
ICAgICAgICAgICBsb2NhbCA9IExvY2FsKGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVt
cERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpKSwgMCk7CisgICAgICAgICAgICBsb2NhbFJl
ZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxv
Y2FsUmVnKTsKICAgICAgICAgfQotICAgICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCBsb2Nh
bC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVz
dGluYXRpb25JZk5lZWRlZChkc3QsIGxvY2FsLmdldCgpKTsKKyAgICAgICAgaWYgKGxvY2FsLmlz
Q2FwdHVyZWQoKSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE1vdmUodGVtcERzdC5nZXQoKSwgbG9jYWxSZWcpOworICAgICAgICAgICAgZW1pdEluY09yRGVj
KGdlbmVyYXRvciwgdGVtcERzdC5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE1vdmUobG9jYWxSZWcsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICAgICAgcmV0
dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgdGVtcERzdC5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgbG9jYWxSZWcs
IG1fb3BlcmF0b3IpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9u
SWZOZWVkZWQoZHN0LCBsb2NhbFJlZyk7CiAgICAgfQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0KCksIGRpdm90RW5kKCkpOwpAQCAtMTMyNyw3
ICsxMzQ2LDggQEAgUmVnaXN0ZXJJRCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QgogICAg
ICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJh
dG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVz
dWx0RGVzY3JpcHRvcigpKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChnZW5l
cmF0b3IubGVmdEhhbmRTaWRlTmVlZHNDb3B5KG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdo
dC0+aXNQdXJlKGdlbmVyYXRvcikpKSB7CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkK
KyAgICAgICAgICAgIHx8IGdlbmVyYXRvci5sZWZ0SGFuZFNpZGVOZWVkc0NvcHkobV9yaWdodEhh
c0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSkpIHsKICAgICAgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUocmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7
CiAgICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQu
Z2V0KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJl
c3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwpA
QCAtMTM1Niw2ICsxMzc2LDEyIEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0
Qnl0ZWMKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRl
ZCgpOwogICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQp
OwogICAgICAgICB9CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlv
bihkc3QpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKHRlbXBEc3QuZ2V0KCksIG1f
cmlnaHQpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1w
RHN0LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICB9CiAgICAgICAgIFJlZ2lz
dGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7
CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3Qs
IHJlc3VsdCk7CiAgICAgfQpAQCAtMTQ1MSwxMSArMTQ3NywxNyBAQCBSZWdpc3RlcklEKiBDb21t
YU5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiBSZWdpc3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0
Q29kZVNpbmdsZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgZG9lcyBub3QgbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIGNvbnN0IGluIEZpcmVm
b3guCi0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2FsID0gZ2VuZXJhdG9yLmNvbnN0TG9jYWwobV9p
ZGVudCkuZ2V0KCkpIHsKKyAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IuY29uc3RMb2Nh
bChtX2lkZW50KSkgewogICAgICAgICBpZiAoIW1faW5pdCkKLSAgICAgICAgICAgIHJldHVybiBs
b2NhbDsKKyAgICAgICAgICAgIHJldHVybiBsb2NhbC5nZXQoKTsKIAotICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLCBtX2luaXQpOworICAgICAgICBpZiAobG9jYWwuaXND
YXB0dXJlZCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERzdCA9IGdl
bmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0
ZW1wRHN0LmdldCgpLCBtX2luaXQpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5vZGUobG9jYWwuZ2V0KCksIG1faW5pdCk7CiAg
ICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbV9pbml0ID8gZ2VuZXJhdG9y
LmVtaXROb2RlKG1faW5pdCkgOiBnZW5lcmF0b3IuZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNDEsNyArMjE0MSw4IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQnJlYWtwb2ludCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9kZWJ1Zyk7CiAj
ZW5kaWYKLSAgICAgICAgY2FzZSBvcF9tb3Y6IHsKKyAgICAgICAgY2FzZSBvcF9tb3Y6CisgICAg
ICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OiB7CiAgICAgICAgICAgICBOb2RlKiBvcCA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
KSwgb3ApOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfbW92KTsKQEAgLTMyMjEsNyArMzIy
Miw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgIE5FWFRfT1BDT0RFKG9wX2dldF9hcmd1bWVudF9ieV92YWwpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzogeworICAgICAgICBjYXNlIG9wX25l
d19mdW5jOgorICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOiB7CiAgICAgICAgICAg
ICBpZiAoIWN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpIHsKICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLAog
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0Z1bmN0aW9uTm9DaGVjaywgT3BJbmZv
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVs
KE9wY29kZUlECiAgICAgY2FzZSBvcF9kZWJ1ZzoKICNlbmRpZgogICAgIGNhc2Ugb3BfbW92Ogor
ICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgIGNhc2Ugb3BfY2hlY2tfaGFzX2luc3RhbmNl
OgogICAgIGNhc2Ugb3BfaW5zdGFuY2VvZjoKICAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKQEAg
LTIwMSw2ICsyMDIsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlE
CiAgICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjoKICAgICBjYXNlIG9wX3RlYXJfb2ZmX2Fj
dGl2YXRpb246CiAgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJl
ZF9mdW5jOgogICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgogICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzogLy8gRG9uJ3QgaW5saW5lIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBjb3B5IHN0cmlu
ZyB0YWJsZXMgaW4gdGhlIGNvbmN1cnJlbnQgSklULgogICAgICAgICByZXR1cm4gQ2FuQ29tcGls
ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1OTg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUw
LDYgKzI1MCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAg
REVGSU5FX09QKG9wX2xvb3BfaGludCkKICAgICAgICAgREVGSU5FX09QKG9wX2xzaGlmdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX21vZCkKKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6CiAg
ICAgICAgIERFRklORV9PUChvcF9tb3YpCiAgICAgICAgIERFRklORV9PUChvcF9tdWwpCiAgICAg
ICAgIERFRklORV9PUChvcF9uZWdhdGUpCkBAIC0yNTgsNiArMjU5LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5KQog
ICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5X3dpdGhfc2l6ZSkKICAgICAgICAgREVGSU5F
X09QKG9wX25ld19hcnJheV9idWZmZXIpCisgICAgICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1
bmM6CiAgICAgICAgIERFRklORV9PUChvcF9uZXdfZnVuYykKICAgICAgICAgREVGSU5FX09QKG9w
X25ld19mdW5jX2V4cCkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19vYmplY3QpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTU0
Miw2ICs1NDIsMTYgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKK19sbGlu
dF9vcF9jYXB0dXJlZF9tb3Y6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpIDhbUENd
LCB0MQorICAgIGxvYWRpIDRbUENdLCB0MAorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEs
IHQyLCB0MykKKyAgICBzdG9yZWkgdDIsIFRhZ09mZnNldFtjZnIsIHQwLCA4XQorICAgIHN0b3Jl
aSB0MywgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XQorICAgIGRpc3BhdGNoKDMpCisKKwogX2xs
aW50X29wX25vdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkgOFtQQ10sIHQwCkBA
IC0xNjYyLDYgKzE2NzIsMTcgQEAgX2xsaW50X29wX25ld19mdW5jOgogICAgIGRpc3BhdGNoKDQp
CiAKIAorX2xsaW50X29wX25ld19jYXB0dXJlZF9mdW5jOgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBidGl6IDEyW1BDXSwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCisgICAgbG9hZGkg
NFtQQ10sIHQxCisgICAgYmluZXEgVGFnT2Zmc2V0W2NmciwgdDEsIDhdLCBFbXB0eVZhbHVlVGFn
LCAub3BOZXdDYXB0dXJlZEZ1bmNEb25lCisub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6Cisg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfbmV3X2Z1bmMpCisub3BOZXdDYXB0dXJl
ZEZ1bmNEb25lOgorICAgIGRpc3BhdGNoKDQpCisKKwogbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2Fs
bCgpCiAgICAgaWYgVkFMVUVfUFJPRklMRVIKICAgICAgICAgbG9hZGkgMTZbUENdLCB0MwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNiAr
NDE4LDE1IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCitfbGxpbnRfb3Bf
Y2FwdHVyZWRfbW92OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMiwgdDEpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQorICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDEsIHQyKQorICAgIHN0b3JlcSB0MiwgW2NmciwgdDAsIDhdCisg
ICAgZGlzcGF0Y2goMykKKworCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNlRXhlY3V0aW9uKCkK
ICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCkBAIC0xNTE0LDYgKzE1MjMsMTggQEAg
X2xsaW50X29wX25ld19mdW5jOgogICAgIGRpc3BhdGNoKDQpCiAKIAorX2xsaW50X29wX25ld19j
YXB0dXJlZF9mdW5jOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMywgdDIpCisgICAgYnRpeiB0MiwgLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkCisg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAgIGJ0cW56IFtjZnIsIHQxLCA4XSwg
Lm9wTmV3Q2FwdHVyZWRGdW5jRG9uZQorLm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkOgorICAg
IGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX25ld19mdW5jKQorLm9wTmV3Q2FwdHVyZWRG
dW5jRG9uZToKKyAgICBkaXNwYXRjaCg0KQorCisKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwo
KQogICAgIGlmIFZBTFVFX1BST0ZJTEVSCiAgICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0
LCB0MykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
aAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDYgKzQ1MywxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRDYXB0dXJlRW5kKGludCBjYXB0dXJlRW5kKSB7IG1fY2FwdHVyZUVuZCA9IGNh
cHR1cmVFbmQ7IH0KIAogICAgIGludCBjYXB0dXJlQ291bnQoKSBjb25zdCB7IHJldHVybiAtKG1f
Y2FwdHVyZUVuZCAtIG1fY2FwdHVyZVN0YXJ0KTsgfQorICAgIAorICAgIGJvb2wgaXNDYXB0dXJl
ZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBvcGVyYW5kIDw9IGNhcHR1cmVT
dGFydCgpICYmIG9wZXJhbmQgPiBjYXB0dXJlRW5kKCk7CisgICAgfQogCiAgICAgaW50IHBhcmFt
ZXRlckNvdW50KCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXMgLSAxOyB9
CiAgICAgaW50IHBhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcygpIHsgcmV0dXJuIG1fcGFyYW1l
dGVyQ291bnRJbmNsdWRpbmdUaGlzOyB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTk5MDApCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
My0xMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3Jl
cyB0byBsb2NhbCBjYXB0dXJlZCB2YXJpYWJsZXMgc2hvdWxkIGJlIGludGVyY2VwdGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjQ4ODMKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3Mv
Y2FwdHVyZWQtYXNzaWdubWVudHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmpzOiBBZGRlZC4KKwogMjAx
My0xMS0yOSAgTWljaGHFgiBQYWt1xYJhIHZlbCBSdXRrYSAgPG0ucGFrdWxhQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFVucmV2aWV3ZWQgRUZMIGdhcmRlbmluZwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NhcHR1cmVkLWFzc2ln
bm1lbnRzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvY2FwdHVyZWQtYXNzaWdubWVudHMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY2Fw
dHVyZWQtYXNzaWdubWVudHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
Y2FwdHVyZWQtYXNzaWdubWVudHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY2FwdHVyZWQtYXNzaWdubWVudHMuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY2FwdHVy
ZWQtYXNzaWdubWVudHMuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9jYXB0dXJlZC1hc3NpZ25tZW50cy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHggPSAwOworICAgICsreDsK
KyAgICB4Kys7CisgICAgdmFyIHkgPSB4Kys7CisgICAgdmFyIHogPSB5Kys7CisgICAgeiA9IHgr
KzsKKyAgICB4ICs9IDI7CisgICAgeiAtPSAxOworICAgIHggKj0gMjsKKyAgICB6IDw8PSAxOwor
ICAgIHggfD0gNTsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB4KysgKyB6OyB9Cit9
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBpZiAoZm9vKCkoKSAhPSAx
NykKKyAgICAgICAgdGhyb3cgIkVycm9yIjsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218119</attachid>
            <date>2013-12-01 12:18:14 -0800</date>
            <delta_ts>2013-12-01 13:25:33 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>70393</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5OTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY4IEBA
CisyMDEzLTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RvcmVzIHRvIGxvY2FsIGNhcHR1cmVkIHZhcmlhYmxlcyBzaG91bGQgYmUgaW50ZXJjZXB0ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDg4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
UHJldmlvdXNseSwgaW4gYnl0ZWNvZGUsIHlvdSBjb3VsZCBhc3NpZ24gdG8gYSBjYXB0dXJlZCB2
YXJpYWJsZSBqdXN0IGFzIHlvdSB3b3VsZAorICAgICAgICBhc3NpZ24gdG8gYW55IG90aGVyIGtp
bmQgb2YgdmFyaWFibGUuIFRoaXMgY29tcGxpY2F0ZXMgY2xvc3VyZSB2YXJpYWJsZSBjb25zdGFu
dAorICAgICAgICBpbmZlcmVuY2UgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSBwbGFjZSB3aGVy
ZSB3ZSBjYW4gaW50ZXJjZXB0IHN0b3JlcyB0byBjYXB0dXJlZAorICAgICAgICB2YXJpYWJsZXMg
aW4gdGhlIExMSW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnN0aXR1dGVzIGEg
cG9saWN5IHRoYXQgb25seSBjZXJ0YWluIGluc3RydWN0aW9ucyBjYW4gc3RvcmUgdG8gY2FwdHVy
ZWQKKyAgICAgICAgdmFyaWFibGVzLiBJZiB5b3UgaW50ZXJwcmV0IHRob3NlIGluc3RydWN0aW9u
cyBhbmQgeW91IGFyZSByZXF1aXJlZCB0byBub3RpZnlXcml0ZSgpCisgICAgICAgIHRoZW4geW91
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlbGV2YW50IHZhcmlhYmxlIGlzIGNhcHR1cmVkLiBUaG9z
ZSBpbnN0cnVjdGlvbnMgYXJlCisgICAgICAgIHRyYWNrZWQgaW4gQ29kZUJsb2NrLmNwcCdzIFZl
cmlmeUNhcHR1cmVkRGVmLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwOgorICAgICAgICAoSlNDOjpz
dGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc0NhcHR1cmVkKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgIChKU0M6OnBhZE9wY29kZU5h
bWUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZlQ2FsbGVlKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmlzQ2FwdHVyZWQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bG9j
YWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbCk6CisgICAg
ICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb24pOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVuY3Rpb25JbnRlcm5hbCk6CisgICAgICAg
ICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkxvY2Fs
OjpMb2NhbCk6CisgICAgICAgIChKU0M6OkxvY2FsOjppc0NhcHR1cmVkKToKKyAgICAgICAgKEpT
Qzo6TG9jYWw6OmNhcHR1cmVNb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmNhcHR1cmVNb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2Rl
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcDoKKyAgICAgICAgKEpT
Qzo6UG9zdGZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UHJlZml4Tm9kZTo6
ZW1pdFJlc29sdmUpOgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRC
eXRlY29kZSk6CisgICAgICAgIChKU0M6OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUp
OgorICAgICAgICAoSlNDOjpDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZSk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAg
ICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6aXNDYXB0dXJlZCk6CisKIDIwMTMtMTEt
MjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5hbGx5IHJl
bW92ZSB0aG9zZSBERkdfRU5BQkxFIHRoaW5ncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsMTAgKzEw
MiwxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggXAotCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAorCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNzUxLDYgKzc1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lLmgi
IC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZVVzZURlZi5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJbmZvLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0YXR1cy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4
OSw3IEBACiAJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcCAqLzsg
fTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1
MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAw
NTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5j
aERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExp
bmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3
MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5
OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdE
QkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtMTU4Myw2ICsxNTg0
LDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJv
ZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1
MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg1QTMxRTE2QUI3NkFFMDA3NzU3
MUUgLyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdWYXJpYWRpY0Z1bmN0aW9uLmg7IHBhdGggPSBkZmcvREZHVmFyaWFkaWNGdW5jdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMx
NzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGlu
ay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9
IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNDA1OCw2ICs0MDYwLDcgQEAKIAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3MzUgLyog
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlDMjRFMDAz
NEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZFQkUxODM1
NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAqLywKKwkJ
CQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywKIAkJCQkw
RjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYwQjgzQUUx
NEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgzQUYxNEJD
RjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLApAQCAtNDI2OSw2ICs0MjcyLDcgQEAK
IAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdnZXJDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBE
ZWZlckdDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyog
Qnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3N0MwMDhD
QzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjNFMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJl
dGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lv
biAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1
ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgiCiAjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIKICNp
bmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKQEAgLTY3LDQyNCArNjgsMjYgQEAgc3RhdGlj
IHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZAogICAgICAgICBiaXRzLnNldCh2aXJ0
dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQogCi1zdGF0
aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29kZUJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKLXsKLSAgICBJ
bnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJldGVyOwot
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5zdHJ1Y3Rp
b25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOwotICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgc3dpdGNoIChv
cGNvZGVJRCkgewotICAgIC8vIE5vIHVzZXMuCi0gICAgY2FzZSBvcF9uZXdfcmVnZXhwOgotICAg
IGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJv
cjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKLSAgICBj
YXNlIG9wX3BvcF9zY29wZToKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3BfbmV3
X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfbG9vcF9oaW50OgotICAgIGNhc2Ugb3Bfam1wOgotICAg
IGNhc2Ugb3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6Ci0gICAgY2Fz
ZSBvcF9nZXRfY2FsbGVlOgotICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF9jYXRjaDoK
LSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZpcnN0IGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfbmV3
X2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjogCi0gICAgY2FzZSBvcF9jcmVh
dGVfYXJndW1lbnRzOgotICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICBjYXNlIG9wX3RlYXJfb2Zm
X2FjdGl2YXRpb246Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9w
X3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3B1c2hf
d2l0aF9zY29wZToKLSAgICBjYXNlIG9wX2VuZDoKLSAgICBjYXNlIG9wX3JldDoKLSAgICBjYXNl
IG9wX2p0cnVlOgotICAgIGNhc2Ugb3BfamZhbHNlOgotICAgIGNhc2Ugb3BfamVxX251bGw6Ci0g
ICAgY2FzZSBvcF9qbmVxX251bGw6Ci0gICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBvcF9pbmM6
IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVs
X2J5X2lkOgotICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfamxl
c3NlcToKLSAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKLSAg
ICBjYXNlIG9wX2pubGVzczoKLSAgICBjYXNlIG9wX2pubGVzc2VxOgotICAgIGNhc2Ugb3Bfam5n
cmVhdGVyOgotICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgY2FzZSBvcF9qbGVzczogewot
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0g
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGaXJzdCwgc2Vjb25k
LCBhbmQgdGhpcmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKLSAgICBjYXNl
IG9wX3B1dF9ieV92YWxfZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewotICAgICAg
ICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMs
IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJG
b3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAg
ICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29k
ZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9w
dXRfYnlfaW5kZXg6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9w
X3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25f
ZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9s
aW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ug
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0g
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAg
ICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRmlyc3QsIHRoaXJkLCBhbmQg
Zm91cnRoIGFyZ3VtZW50cy4KLSAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNl
cywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kIGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfaW5pdF9nbG9i
YWxfY29uc3Rfbm9wOgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBv
cF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAgICBjYXNl
IG9wX3RvX3ByaW1pdGl2ZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICBjYXNlIG9wX2dl
dF9ieV9pZF9vdXRfb2ZfbGluZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgotICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWluOgotICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9wcm90bzoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46Ci0gICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKLSAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZW5lcmljOgotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoKLSAgICBj
YXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50c19sZW5n
dGg6Ci0gICAgY2FzZSBvcF90eXBlb2Y6Ci0gICAgY2FzZSBvcF9pc191bmRlZmluZWQ6Ci0gICAg
Y2FzZSBvcF9pc19ib29sZWFuOgotICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgotICAgIGNhc2Ugb3Bf
aXNfc3RyaW5nOgotICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgotICAgIGNhc2Ugb3BfaXNfZnVuY3Rp
b246Ci0gICAgY2FzZSBvcF90b19udW1iZXI6Ci0gICAgY2FzZSBvcF9uZWdhdGU6Ci0gICAgY2Fz
ZSBvcF9uZXFfbnVsbDoKLSAgICBjYXNlIG9wX2VxX251bGw6Ci0gICAgY2FzZSBvcF9ub3Q6Ci0g
ICAgY2FzZSBvcF9tb3Y6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgotICAgIGNh
c2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVu
ZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNl
dEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnRz
LgotICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92
YWw6Ci0gICAgY2FzZSBvcF9pbjoKLSAgICBjYXNlIG9wX2luc3RhbmNlb2Y6Ci0gICAgY2FzZSBv
cF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBvcF9tdWw6
Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAgY2FzZSBvcF9tb2Q6Ci0gICAgY2FzZSBvcF9zdWI6Ci0g
ICAgY2FzZSBvcF9sc2hpZnQ6Ci0gICAgY2FzZSBvcF9yc2hpZnQ6Ci0gICAgY2FzZSBvcF91cnNo
aWZ0OgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNhc2Ugb3BfYml0eG9yOgotICAgIGNhc2Ug
b3BfYml0b3I6Ci0gICAgY2FzZSBvcF9sZXNzOgotICAgIGNhc2Ugb3BfbGVzc2VxOgotICAgIGNh
c2Ugb3BfZ3JlYXRlcjoKLSAgICBjYXNlIG9wX2dyZWF0ZXJlcToKLSAgICBjYXNlIG9wX25zdHJp
Y3RlcToKLSAgICBjYXNlIG9wX3N0cmljdGVxOgotICAgIGNhc2Ugb3BfbmVxOgotICAgIGNhc2Ug
b3BfZXE6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vj
b25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9jYWxsX3ZhcmFy
Z3M6Ci0gICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAo
aXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vj
b25kLCB0aGlyZCwgZm91cnRoLCBhbmQgZmlmdGggYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV4
dF9wbmFtZTogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlm
IChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxp
dmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKLSAgICAgICAgICAg
IHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQp
OwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0
cnVjdGlvbls1XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxv
Y2ssIHVzZXMsIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRoIGFyZ3Vt
ZW50cy4gCi0gICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAg
IGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywg
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51Lm9wZXJh
bmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvbls2XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gVGhpcmQgYXJndW1lbnQuCi0gICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5n
OgotICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6Ci0gICAgY2FzZSBvcF9zd2l0Y2hfaW1tOiB7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICAvLyBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfbmV3X2Fy
cmF5OgotICAgIGNhc2Ugb3Bfc3RyY2F0OiB7Ci0gICAgICAgIGludCBiYXNlID0gaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAg
ICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFzZSAtIGkp
KQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBiYXNlIC0g
aSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDcmF6eSBzdHVm
ZiBmb3IgY2FsbHMuCi0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgY2FzZSBvcF9jYWxsX2V2
YWw6Ci0gICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JM
aXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAgICAgICAg
ICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAg
ICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgbGFzdEFyZyArIGkpKQotICAgICAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBTcGVjaWFsIHN0dWZmIGZvciB0ZWFy
IG9mZiBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKLSAgICAg
ICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2Vz
LCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVy
Rm9yTGl2ZW5lc3MoY29kZUJsb2NrLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVh
bFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVn
aXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgp
KTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJs
b2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KK25hbWVzcGFjZSB7CiAKLXN0YXRpYyB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBkZWZzKQotewotICAgIEludGVycHJldGVy
KiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpblti
eXRlY29kZU9mZnNldF07Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
Ci0gICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3BfaW5pdF9n
bG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6Ci0gICAgY2Fz
ZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6Ci0gICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0gICAgY2FzZSBvcF9wb3Bfc2NvcGU6Ci0gICAgY2FzZSBv
cF9lbmQ6Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9wX3Byb2Zp
bGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRp
Y19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmV0OgotICAgIGNhc2Ug
b3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ugb3BfanRy
dWU6Ci0gICAgY2FzZSBvcF9qZmFsc2U6Ci0gICAgY2FzZSBvcF9qZXFfbnVsbDoKLSAgICBjYXNl
IG9wX2puZXFfbnVsbDoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3Bfamxlc3M6
Ci0gICAgY2FzZSBvcF9qbGVzc2VxOgotICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAgY2FzZSBv
cF9qZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3Bfam5sZXNzOgotICAgIGNhc2Ugb3Bfam5sZXNzZXE6
Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKLSAgICBj
YXNlIG9wX2xvb3BfaGludDoKLSAgICBjYXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgY2FzZSBvcF9z
d2l0Y2hfY2hhcjoKLSAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Ci0gICAgY2FzZSBvcF9wdXRf
YnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2FzZSBvcF9w
dXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9y
bWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2Fz
ZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKLSAgICBjYXNlIG9wX3B1dF9ieV92YWw6Ci0gICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKLSAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKLSAgICBj
YXNlIG9wX2RlbF9ieV9pZDoKLSAgICBjYXNlIG9wX2RlbF9ieV92YWw6Ci0jZGVmaW5lIExMSU5U
X0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICAgICAgRk9S
X0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7Ci0jdW5k
ZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRoZXNlIGFs
bCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQuCi0gICAg
Y2FzZSBvcF9uZXh0X3BuYW1lOgotICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICBjYXNlIG9w
X3Jlc29sdmVfc2NvcGU6Ci0gICAgY2FzZSBvcF9zdHJjYXQ6Ci0gICAgY2FzZSBvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uOgotICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ugb3BfY2F0
Y2g6Ci0gICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKLSAgICBjYXNlIG9wX25ld19hcnJheToKLSAg
ICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9z
aXplOgotICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKLSAgICBjYXNlIG9wX25ld19mdW5jOgotICAg
IGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgIGNhc2Ugb3BfY2Fs
bF9ldmFsOgotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkOgot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlf
aWRfY2hhaW46Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6Ci0gICAgY2FzZSBv
cF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9j
aGFpbjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKLSAgICBjYXNlIG9wX2dl
dF9ieV9pZF9jdXN0b21fcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX2NoYWlu
OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9nZXRfYXJyYXlf
bGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgY2FzZSBvcF9jaGVj
a19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9pbnN0YW5jZW9mOgotICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2FzZSBvcF9n
ZXRfYnlfcG5hbWU6Ci0gICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAgICBjYXNl
IG9wX3R5cGVvZjoKLSAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKLSAgICBjYXNlIG9wX2lzX2Jv
b2xlYW46Ci0gICAgY2FzZSBvcF9pc19udW1iZXI6Ci0gICAgY2FzZSBvcF9pc19zdHJpbmc6Ci0g
ICAgY2FzZSBvcF9pc19vYmplY3Q6Ci0gICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKLSAgICBjYXNl
IG9wX2luOgotICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgotICAgIGNhc2Ugb3BfbmVnYXRlOgotICAg
IGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNhc2Ugb3BfZGl2OgotICAgIGNh
c2Ugb3BfbW9kOgotICAgIGNhc2Ugb3Bfc3ViOgotICAgIGNhc2Ugb3BfbHNoaWZ0OgotICAgIGNh
c2Ugb3BfcnNoaWZ0OgotICAgIGNhc2Ugb3BfdXJzaGlmdDoKLSAgICBjYXNlIG9wX2JpdGFuZDoK
LSAgICBjYXNlIG9wX2JpdHhvcjoKLSAgICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ugb3BfaW5j
OgotICAgIGNhc2Ugb3BfZGVjOgotICAgIGNhc2Ugb3BfZXE6Ci0gICAgY2FzZSBvcF9uZXE6Ci0g
ICAgY2FzZSBvcF9zdHJpY3RlcToKLSAgICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBjYXNlIG9w
X2xlc3M6Ci0gICAgY2FzZSBvcF9sZXNzZXE6Ci0gICAgY2FzZSBvcF9ncmVhdGVyOgotICAgIGNh
c2Ugb3BfZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3BfbmVxX251bGw6Ci0gICAgY2FzZSBvcF9lcV9u
dWxsOgotICAgIGNhc2Ugb3Bfbm90OgotICAgIGNhc2Ugb3BfbW92OgotICAgIGNhc2Ugb3BfbmV3
X29iamVjdDoKLSAgICBjYXNlIG9wX3RvX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfY2FsbGVlOgot
ICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKLSAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9u
OgotICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogewotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQot
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKK2NsYXNzIFNldEJpdCB7CitwdWJsaWM6Cisg
ICAgU2V0Qml0KEZhc3RCaXRWZWN0b3ImIGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJpdHMpCisg
ICAgewogICAgIH0KLSAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAgICAgICBp
bnQgb3BlcmFuZCA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKTsKKyAgICAK
KyAgICB2b2lkIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0aW9uKiwg
T3Bjb2RlSUQsIGludCBvcGVyYW5kKQorICAgIHsKICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVy
YW5kKGNvZGVCbG9jaywgZGVmcywgb3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCBtX2JpdHMsIG9wZXJhbmQpOwogICAgIH0KLSAg
ICBjYXNlIG9wX2VudGVyOiB7Ci0gICAgICAgIGRlZnMuc2V0QWxsKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQorICAgIAor
cHJpdmF0ZToKKyAgICBGYXN0Qml0VmVjdG9yJiBtX2JpdHM7Cit9OworCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAogc3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZvckJhc2ljQmxv
Y2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCiB7CkBAIC01MzUsOCAr
MTM4LDEwIEBAIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MKICAgICB1
c2VzLmNsZWFyQWxsKCk7CiAgICAgZGVmcy5jbGVhckFsbCgpOwogICAgIAotICAgIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNlcyk7Ci0g
ICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCBkZWZzKTsKKyAgICBTZXRCaXQgc2V0VXNlcyh1c2VzKTsKKyAgICBTZXRCaXQgc2V0RGVmcyhk
ZWZzKTsKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIHNldFVzZXMpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgc2V0RGVmcyk7CiAgICAgCiAgICAgb3V0LmV4Y2x1ZGUo
ZGVmcyk7CiAgICAgb3V0Lm1lcmdlKHVzZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVVc2VEZWZfaAor
I2RlZmluZSBCeXRlY29kZVVzZURlZl9oCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVV
c2VzRm9yQnl0ZWNvZGVPZmZzZXQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
OworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRl
Y29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Cisg
ICAgLy8gTm8gdXNlcy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdf
YXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAgIGNhc2Ug
b3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfcG9wX3Nj
b3BlOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19leHA6Cisg
ICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBvcF9uZXdf
b2JqZWN0OgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dldF9jYWxs
ZWU6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5j
OgorICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRpb246IAorICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF90ZWFyX29mZl9hY3Rp
dmF0aW9uOgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2FzZSBvcF9wcm9m
aWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF9wdXNoX3dpdGhf
c2NvcGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2FzZSBvcF9q
dHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgorICAgIGNh
c2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfaW5jOiB7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9y
ZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bfamdy
ZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAg
IGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9q
bmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Cisg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9w
X3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb246Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBvcF9wdXRf
YnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9u
b3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZDoKKyAg
ICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfcHV0X2dldHRl
cl9zZXR0ZXI6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2lu
aXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0OgorICAg
IGNhc2Ugb3BfcHVzaF9uYW1lX3Njb3BlOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Cisg
ICAgY2FzZSBvcF90b19wcmltaXRpdmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoK
KyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jaGFp
bjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICBjYXNlIG9wX2dldF9i
eV9pZF9nZXR0ZXJfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2NoYWluOgor
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
X2N1c3RvbV9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX2dldF9hcnJheV9sZW5ndGg6
CisgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVu
dHNfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVk
OgorICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICBjYXNlIG9wX2lzX251bWJlcjoKKyAgICBj
YXNlIG9wX2lzX3N0cmluZzoKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICBjYXNlIG9wX2lz
X2Z1bmN0aW9uOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRlOgor
ICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNhc2Ugb3Bf
bm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgIGNh
c2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgorICAg
IGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0X2J5X3Zh
bDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9pbjoKKyAg
ICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Cisg
ICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBvcF9kaXY6CisgICAg
Y2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6CisgICAg
Y2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgIGNhc2Ugb3BfYml0YW5k
OgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2FzZSBvcF9s
ZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAgICBjYXNl
IG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9wX3N0cmlj
dGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9kZWxf
YnlfdmFsOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2Rl
SUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKKyAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNv
ZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2dl
dF9ieV9wbmFtZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwor
ICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls2XS51Lm9wZXJh
bmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzoK
KyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTogeworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfbmV3
X2FycmF5OgorICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0gaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGJhc2UgLSBp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoKKyAgICBj
YXNlIG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
ICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAg
ICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlzQXJndW1l
bnRPZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2NvbnN0cnVj
dCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgICAgIGZ1bmN0b3IoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGxhc3RBcmcgKyBpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogeworICAgICAgICBmdW5j
dG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlE
LCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGlu
c3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9yKQorewor
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0
ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0
cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBp
bnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0
Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgorICAg
IGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25z
dF9ub3A6CisgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9wdXNoX3dp
dGhfc2NvcGU6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9wb3Bfc2Nv
cGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKKyAg
ICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6CisgICAgY2FzZSBvcF90aHJvdzoKKyAgICBjYXNl
IG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNhc2Ugb3Bf
cmV0OgorICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bfam1wOgor
ICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBvcF9qZXFf
bnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfcHRyOgorICAg
IGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3BfamdyZWF0
ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgorICAgIGNh
c2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBvcF9qbmdy
ZWF0ZXJlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRjaF9pbW06
CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Cisg
ICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6
CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9ieV9pZF90
cmFuc2l0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgorICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgorICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lk
X3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dl
bmVyaWM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKKyAgICBjYXNlIG9wX3B1dF9i
eV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9i
eV9pbmRleDoKKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKKyNkZWZpbmUgTExJTlRf
SEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ugb3Bjb2RlOgorICAgICAgICBGT1Jf
RUFDSF9MTElOVF9PUENPREVfRVhURU5TSU9OKExMSU5UX0hFTFBFUl9PUENPREVTKTsKKyN1bmRl
ZiBMTElOVF9IRUxQRVJfT1BDT0RFUworICAgICAgICByZXR1cm47CisgICAgLy8gVGhlc2UgYWxs
IGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICBj
YXNlIG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ug
b3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBjYXNlIG9w
X3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY3JlYXRlX3Ro
aXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlfYnVmZmVy
OgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX25ld19yZWdl
eHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5j
OgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgor
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9jYWxsOgorICAgIGNhc2Ug
b3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6CisgICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAgICBjYXNl
IG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9nZXRf
YXJyYXlfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAgY2FzZSBv
cF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2Fz
ZSBvcF9nZXRfYnlfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKKyAg
ICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICBjYXNlIG9w
X2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgY2FzZSBvcF9pc19zdHJp
bmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKKyAg
ICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVnYXRl
OgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3BfZGl2Ogor
ICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNoaWZ0Ogor
ICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNlIG9wX2Jp
dGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAgIGNhc2Ug
b3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBvcF9u
ZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBj
YXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVhdGVyOgor
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBv
cF9lcV9udWxsOgorICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ug
b3BfY2FwdHVyZWRfbW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNlIG9wX3Rv
X3RoaXM6CisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3Jl
ZzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3JlYXRlX2Fy
Z3VtZW50czoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2RlbF9ieV92YWw6
IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2VudGVyOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jay0+bV9udW1W
YXJzOyBpLS07KQorICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBv
cGNvZGVJRCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfSB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQnl0
ZWNvZGVVc2VEZWZfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJDb2RlQmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgi
CisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0YXR1cy5o
IgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgpA
QCAtNzU5LDYgKzc2MCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFByaW50U3Ry
ZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUocjApLmRh
dGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAgIGludCBy
MCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9w
ZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJjYXB0dXJlZF9tb3YiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCAlcyIs
IHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewogICAgICAg
ICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibm90Iik7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTEyMTAsNiArMTIxOCwxNCBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgZiVkLCAl
cyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hvdWxkQ2hlY2sgPyAiPENoZWNrZWQ+
IiA6ICI8VW5jaGVja2VkPiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzogeworICAgICAgICAgICAgaW50IHIwID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsK
KyAgICAgICAgICAgIGludCBzaG91bGRDaGVjayA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAg
ICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibmV3X2Nh
cHR1cmVkX2Z1bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQsICVzIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIGYwLCBzaG91bGRDaGVjayA/ICI8Q2hlY2tlZD4iIDogIjxV
bmNoZWNrZWQ+Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJh
bmQ7CiAgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTI0NjksOCAr
MjQ4NSw3IEBAIGJvb2wgQ29kZUJsb2NrOjppc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3QKICAgICBp
ZiAoIXN5bWJvbFRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBv
cGVyYW5kLm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCi0gICAgICAg
ICYmIG9wZXJhbmQub2Zmc2V0KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7CisgICAg
cmV0dXJuIHN5bWJvbFRhYmxlKCktPmlzQ2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7CiB9CiAK
IGludCBDb2RlQmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJlZ2lzdGVy
cyhpbnQgbWFjaGluZUNhcHR1cmVTdGFydCkKQEAgLTM0MjcsNiArMzQ0Miw0OSBAQCBTdHJpbmcg
Q29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwogfQogCitu
YW1lc3BhY2UgeworCitzdHJ1Y3QgVmVyaWZ5Q2FwdHVyZWREZWYgeworICAgIHZvaWQgb3BlcmF0
b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBPcGNv
ZGVJRCBvcGNvZGVJRCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVy
SW5kZXgob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+YmVnaW5WYWxpZGF0aW9u
RGlkRmFpbCgpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0IGJjIyIsIGJ5dGVjb2RlT2Zm
c2V0LCAiIGVuY291bnRlcmVkIGEgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50LlxuIik7CisgICAg
ICAgICAgICBjb2RlQmxvY2stPmVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAg
IGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgICAgICBj
YXNlIG9wX2luaXRfbGF6eV9yZWc6CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czoK
KyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAgICAgICAg
aWYgKCF2aXJ0dWFsUmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpCisgICAgICAgICAgICAmJiBv
cGVyYW5kIDw9IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNvZGVCbG9j
ay0+Y2FwdHVyZUVuZCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFsaWRhdGlv
bkRpZEZhaWwoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRlY29kZU9m
ZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQgdmFyaWFi
bGUgbG9jIiwgdmlydHVhbFJlZy50b0xvY2FsKCksICIuXG4iKTsKKyAgICAgICAgICAgIGNvZGVC
bG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAgIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJlY3RseSBm
cm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3RwcmludC4KQEAg
LTM0NjQsNiArMzUyMiwxNiBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKTspIHsKKyAg
ICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9ucygpLmJl
Z2luKCkgKyBieXRlY29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3Zt
LT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7
CisgICAgICAgIAorICAgICAgICBWZXJpZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJlZERlZjsK
KyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNl
dCwgdmVyaWZ5Q2FwdHVyZWREZWYpOworICAgICAgICAKKyAgICAgICAgYnl0ZWNvZGVPZmZzZXQg
Kz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCwx
MiBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJrZWQ7IC8v
IEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAogICAgIGJvb2wgbV9kaWRG
YWlsRlRMQ29tcGlsYXRpb247Ci0gICAgCisKKyAgICAvLyBJbnRlcm5hbCBtZXRob2RzIGZvciB1
c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdhc24ndAor
ICAgIC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBuYW1lc3Bh
Y2VzLgorICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIE5PX1JFVFVSTl9E
VUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworCiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBPVkVSUklERTsK
QEAgLTEwMzEsOSArMTAzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0g
YWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBiZWdpblZhbGlk
YXRpb25EaWRGYWlsKCk7Ci0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVuZFZhbGlk
YXRpb25EaWRGYWlsKCk7Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRTdHViSW50
ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgdm9pZCByZXNl
dFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24g
MTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKG9w
X25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9uZXdfcmVnZXhwLCAzKSBcCiAg
ICAgbWFjcm8ob3BfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCAzKSBcCiAg
ICAgXAogICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBcCkBAIC0x
NTMsNiArMTU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3Bfc3dpdGNoX3N0cmlu
ZywgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9uZXdfZnVuYywgNCkgXAorICAgIG1hY3JvKG9w
X25ld19jYXB0dXJlZF9mdW5jLCA0KSBcCiAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhwLCAzKSBc
CiAgICAgbWFjcm8ob3BfY2FsbCwgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAg
bWFjcm8ob3BfY2FsbF9ldmFsLCA4KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzA3LDcgKzMwNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYK
ICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZhdGlvblJl
Z2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9m
dW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdE5ld0Z1bmN0
aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgZW1p
dE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5jdGlvbik7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB2YXJTdGFjay5zaXplKCk7ICsraSkgewpAQCAtMzM1LDcgKzMzNSw3IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIC8vIERvbid0IGxhemls
eSBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50cycKICAg
ICAgICAgICAgIC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRpYXRpb24g
b2YgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3JlYXRlRnVu
Y3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAgICAgICAg
ICAgICAgZW1pdE5ld0Z1bmN0aW9uKHJlZy5nZXQoKSwgZnVuY3Rpb24pOworICAgICAgICAgICAg
ICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIE5vdENhcHR1cmVkLCBmdW5jdGlvbik7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBlbWl0SW5pdExhenlSZWdpc3Rlcihy
ZWcuZ2V0KCkpOwogICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVnLT52aXJ0
dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKQEAgLTQ3Miw3ICs0NzIsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhCiAgICAgICAgIHJldHVybiAm
bV9jYWxsZWVSZWdpc3RlcjsKIAogICAgIC8vIE1vdmUgdGhlIGNhbGxlZSBpbnRvIHRoZSBjYXB0
dXJlZCBzZWN0aW9uIG9mIHRoZSBzdGFjay4KLSAgICByZXR1cm4gZW1pdE1vdmUoYWRkVmFyKCks
ICZtX2NhbGxlZVJlZ2lzdGVyKTsKKyAgICByZXR1cm4gZW1pdE1vdmUoYWRkVmFyKCksIElzQ2Fw
dHVyZWQsICZtX2NhbGxlZVJlZ2lzdGVyKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
YWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIFJlZ2lzdGVySUQq
IGNhbGxlZVJlZ2lzdGVyKQpAQCAtOTk3LDE2ICs5OTcsMjEgQEAgdW5zaWduZWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OmFkZFJlZ0V4cChSZQogICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRkUmVnRXhw
KHIpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdE1vdmUoUmVnaXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSBjYXB0dXJlTW9kZSwgUmVn
aXN0ZXJJRCogc3JjKQogewogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5tb3YoZHN0LT5p
bmRleCgpLCBzcmMtPmluZGV4KCkpOwogCi0gICAgZW1pdE9wY29kZShvcF9tb3YpOworICAgIGVt
aXRPcGNvZGUoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCA/IG9wX2NhcHR1cmVkX21vdiA6IG9w
X21vdik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsKIH0KIAor
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKQoreworICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNhcHR1cmVNb2Rl
KGRzdC0+aW5kZXgoKSksIHNyYyk7Cit9CisKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpCiB7CiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CkBAIC0xMTU3LDExICsxMTYy
LDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEcKICAgICByZXR1
cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKIH0KIAorYm9vbCBCeXRlY29kZUdlbmVyYXRvcjo6
aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gbV9zeW1ib2xUYWJsZSAmJiBt
X3N5bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOworfQorCiBMb2NhbCBCeXRlY29kZUdl
bmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAgaWYgKHBy
b3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAgcmV0dXJu
IExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSk7Ci0KKyAgICAgICAgcmV0dXJuIExvY2Fs
KHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTm90Q2FwdHVyZWQpOworICAgIAogICAgIGlmIChw
cm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQogICAgICAgICBjcmVhdGVBcmd1
bWVudHNJZk5lY2Vzc2FyeSgpOwogCkBAIC0xMTczLDcgKzExODMsNyBAQCBMb2NhbCBCeXRlY29k
ZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAg
ICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVn
aXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50
cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0
dHJpYnV0ZXMoKSwgY2FwdHVyZU1vZGUobG9jYWwtPmluZGV4KCkpKTsKIH0KIAogTG9jYWwgQnl0
ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCkBA
IC0xMTg2LDcgKzExOTYsNyBAQCBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RMb2NhbChj
b25zCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBj
cmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgo
KSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAg
ICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgY2FwdHVyZU1vZGUo
bG9jYWwtPmluZGV4KCkpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENoZWNr
SGFzSW5zdGFuY2UoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVnaXN0ZXJJ
RCogYmFzZSwgTGFiZWwqIHRhcmdldCkKQEAgLTE1NDcsOSArMTU1Nyw5IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXIKICAgICByZXR1cm4gZHN0OwogfQogCi1SZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRz
dCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgQ2FwdHVyZU1vZGUgY2FwdHVy
ZU1vZGUsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBlbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1
bmN0aW9uKGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1cm4gZW1pdE5ld0Z1bmN0aW9uSW50
ZXJuYWwoZHN0LCBjYXB0dXJlTW9kZSwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVjbChtYWtl
RnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9uQm9k
eU5vZGUqIGZ1bmN0aW9uKQpAQCAtMTU1NywxMyArMTU2NywxMyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExhenlOCiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFkZFJlc3Vs
dCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlmIChwdHIu
aXNOZXdFbnRyeSkKICAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJsb2NrLT5h
ZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJuIGVtaXRO
ZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7CisgICAg
cmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgTm90Q2FwdHVyZWQsIHB0ci5pdGVy
YXRvci0+dmFsdWUsIHRydWUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwg
Ym9vbCBkb051bGxDaGVjaykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3
RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIENhcHR1cmVNb2RlIGNhcHR1cmVNb2Rl
LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKIHsKICAgICBjcmVhdGVBY3RpdmF0
aW9uSWZOZWNlc3NhcnkoKTsKLSAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKKyAgICBlbWl0
T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRfZnVuYyA6
IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChkb051bGxDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTk4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAorICAgIGVudW0gQ2FwdHVyZU1vZGUgewor
ICAgICAgICBOb3RDYXB0dXJlZCwKKyAgICAgICAgSXNDYXB0dXJlZAorICAgIH07CisKICAgICBj
bGFzcyBMb2NhbCB7CiAgICAgcHVibGljOgogICAgICAgICBMb2NhbCgpCkBAIC0xMjIsOSArMTI3
LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBM
b2NhbChSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAgICAgTG9j
YWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIENhcHR1cmVNb2RlIGNh
cHR1cmVNb2RlKQogICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAgICAgLCBt
X2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgICAgICwgbV9pc0NhcHR1cmVkKGNhcHR1
cmVNb2RlID09IElzQ2FwdHVyZWQpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0xMzMsMTAg
KzEzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZ2V0KCkgeyBy
ZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0dXJuIG1f
YXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9CisgICAgICAgIAorICAgICAgICBib29sIGlzQ2FwdHVy
ZWQoKSB7IHJldHVybiBtX2lzQ2FwdHVyZWQ7IH0KKyAgICAgICAgQ2FwdHVyZU1vZGUgY2FwdHVy
ZU1vZGUoKSB7IHJldHVybiBpc0NhcHR1cmVkKCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVyZWQ7
IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAgICAgICAg
IHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7CiAgICAg
fTsKIAogICAgIHN0cnVjdCBUcnlSYW5nZSB7CkBAIC0xNzEsNiArMTgxLDkgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJZGVudGlm
aWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJndW1lbnRz
KCk7CiAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKTsKKyAgICAgICAgQ2Fw
dHVyZU1vZGUgY2FwdHVyZU1vZGUoaW50IG9wZXJhbmQpIHsgcmV0dXJuIGlzQ2FwdHVyZWQob3Bl
cmFuZCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVyZWQ7IH0KKyAgICAgICAgCiAgICAgICAgIExv
Y2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTG9jYWwgY29uc3RMb2NhbChj
b25zdCBJZGVudGlmaWVyJik7CiAKQEAgLTIzMSw2ICsyNDQsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0aGF0IGRz
dCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0ZW1wb3Jh
cnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8
ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKKyAgICAgICAgICAgIC8v
IFNob3VsZCBuZXZlciBzdG9yZSBkaXJlY3RseSBpbnRvIGEgY2FwdHVyZWQgdmFyaWFibGUuCisg
ICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8ICFpc0Nh
cHR1cmVkKGRzdC0+aW5kZXgoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ZtLT5pc1NhZmVUb1Jl
Y3Vyc2UoKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29EZWVwRXhj
ZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ3LDYgKzI2Miw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0Q29kZSBh
c3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3IgYSByZWZl
cmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25v
cmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50KCkpOwor
ICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHN0b3JlIGRpcmVjdGx5IGludG8gYSBjYXB0dXJl
ZCB2YXJpYWJsZS4KKyAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25vcmVkUmVz
dWx0KCkgfHwgIWlzQ2FwdHVyZWQoZHN0LT5pbmRleCgpKSk7CiAgICAgICAgICAgICBpZiAoIW1f
dm0tPmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0VGhyb3dF
eHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIG4tPmVtaXRC
eXRlY29kZSgqdGhpcywgZHN0KTsKQEAgLTMyOSwxMiArMzQ2LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVsZW1lbnRO
b2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lvbgogCi0gICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0aW9u
Qm9keU5vZGUqIGJvZHkpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb24oUmVn
aXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSwgRnVuY3Rpb25Cb2R5Tm9kZSogYm9keSk7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRMYXp5TmV3RnVuY3Rpb24oUmVnaXN0ZXJJRCogZHN0LCBGdW5j
dGlvbkJvZHlOb2RlKiBib2R5KTsKLSAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9u
SW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdp
c3RlcklEKiBkc3QsIENhcHR1cmVNb2RlLCB1bnNpZ25lZCBpbmRleCwgYm9vbCBzaG91bGROdWxs
Q2hlY2spOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rpb25FeHByZXNzaW9uKFJl
Z2lzdGVySUQqIGRzdCwgRnVuY0V4cHJOb2RlKiBmdW5jKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdE5ld1JlZ0V4cChSZWdpc3RlcklEKiBkc3QsIFJlZ0V4cCopOwogCisgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwgQ2FwdHVyZU1vZGUsIFJlZ2lzdGVySUQq
IHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRNb3ZlKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogc3JjKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9OdW1iZXIoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9wX3RvX251
bWJlciwgZHN0LCBzcmMpOyB9CkBAIC00MjAsOSArNDM4LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHZvaWQgcHVzaEZpbmFsbHlDb250ZXh0KFN0YXRlbWVudE5vZGUqIGZpbmFsbHlCbG9j
ayk7CiAgICAgICAgIHZvaWQgcG9wRmluYWxseUNvbnRleHQoKTsKIAotICAgICAgICB2b2lkIHB1
c2hPcHRpbWlzZWRGb3JJbihSZWdpc3RlcklEKiBleHBlY3RlZEJhc2UsIFJlZ2lzdGVySUQqIGl0
ZXIsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9wZXJ0eVJlZ2lzdGVyKQorICAg
ICAgICB2b2lkIHB1c2hPcHRpbWlzZWRGb3JJbihSZWdpc3RlcklEKiBleHBlY3RlZFN1YnNjcmlw
dCwgUmVnaXN0ZXJJRCogaXRlciwgUmVnaXN0ZXJJRCogaW5kZXgsIFJlZ2lzdGVySUQqIHByb3Bl
cnR5UmVnaXN0ZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEZvckluQ29udGV4dCBjb250ZXh0
ID0geyBleHBlY3RlZEJhc2UsIGl0ZXIsIGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07CisgICAg
ICAgICAgICBGb3JJbkNvbnRleHQgY29udGV4dCA9IHsgZXhwZWN0ZWRTdWJzY3JpcHQsIGl0ZXIs
IGluZGV4LCBwcm9wZXJ0eVJlZ2lzdGVyIH07CiAgICAgICAgICAgICBtX2ZvckluQ29udGV4dFN0
YWNrLmFwcGVuZChjb250ZXh0KTsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAx
NTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3MywxMSArNjczLDIyIEBAIFJlZ2lzdGVySUQqIFBv
c3RmaXhOb2RlOjplbWl0UmVzb2x2ZShCeXQKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9
IHJlc29sdmUtPmlkZW50aWZpZXIoKTsKIAogICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRv
ci5sb2NhbChpZGVudCkpIHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWxSZWcgPSBsb2NhbC5n
ZXQoKTsKICAgICAgICAgaWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICBsb2Nh
bCA9IExvY2FsKGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGxvY2FsLmdldCgpKSwgMCk7CisgICAgICAgICAgICBsb2NhbFJlZyA9IGdlbmVyYXRvci5l
bWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnKTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCBtX29wZXJhdG9yKTsKKyAgICAg
ICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgICAgICAg
ICAgQVNTRVJUKGRzdCAhPSBsb2NhbFJlZyk7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gdGVtcERzdFNyYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0VG9OdW1iZXIodGVtcERzdC5nZXQoKSwgbG9jYWxSZWcpOworICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHRlbXBEc3RTcmMuZ2V0KCksIGxvY2FsUmVnKTsKKyAgICAg
ICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHRlbXBEc3RTcmMuZ2V0KCksIG1fb3BlcmF0
b3IpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsUmVnLCB0ZW1wRHN0U3Jj
LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0ZW1wRHN0LmdldCgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBlbWl0UG9zdEluY09yRGVjKGdlbmVyYXRvciwgZ2VuZXJhdG9yLmZpbmFs
RGVzdGluYXRpb24oZHN0KSwgbG9jYWxSZWcsIG1fb3BlcmF0b3IpOwogICAgIH0KIAogICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydCgpLCBkaXZvdEVu
ZCgpKTsKQEAgLTgzOCwxMiArODQ5LDIwIEBAIFJlZ2lzdGVySUQqIFByZWZpeE5vZGU6OmVtaXRS
ZXNvbHZlKEJ5dGUKICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHJlc29sdmUtPmlkZW50
aWZpZXIoKTsKIAogICAgIGlmIChMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5sb2NhbChpZGVudCkp
IHsKKyAgICAgICAgUmVnaXN0ZXJJRCogbG9jYWxSZWcgPSBsb2NhbC5nZXQoKTsKICAgICAgICAg
aWYgKGxvY2FsLmlzUmVhZE9ubHkoKSkgewogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZWFk
T25seUV4Y2VwdGlvbklmTmVlZGVkKCk7Ci0gICAgICAgICAgICBsb2NhbCA9IExvY2FsKGdlbmVy
YXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgp
KSwgMCk7CisgICAgICAgICAgICBsb2NhbFJlZyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0
b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnKTsKICAgICAgICAgfQotICAgICAgICBl
bWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCBsb2NhbC5nZXQoKSwgbV9vcGVyYXRvcik7Ci0gICAgICAg
IHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIGxvY2FsLmdl
dCgpKTsKKyAgICAgICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7
CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUodGVtcERzdC5nZXQoKSwgbG9jYWxSZWcp
OworICAgICAgICAgICAgZW1pdEluY09yRGVjKGdlbmVyYXRvciwgdGVtcERzdC5nZXQoKSwgbV9v
cGVyYXRvcik7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWxSZWcsIHRlbXBE
c3QuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlv
bklmTmVlZGVkKGRzdCwgdGVtcERzdC5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZW1pdElu
Y09yRGVjKGdlbmVyYXRvciwgbG9jYWxSZWcsIG1fb3BlcmF0b3IpOworICAgICAgICByZXR1cm4g
Z2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbFJlZyk7CiAgICAg
fQogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0
KCksIGRpdm90RW5kKCkpOwpAQCAtMTMyNyw3ICsxMzQ2LDggQEAgUmVnaXN0ZXJJRCogUmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0QgogICAgICAgICAgICAgcmV0dXJuIGVtaXRSZWFkTW9kaWZ5
QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxv
Y2FsLmdldCgpLCBtX3JpZ2h0LCBtX29wZXJhdG9yLCBPcGVyYW5kVHlwZXMoUmVzdWx0VHlwZTo6
dW5rbm93blR5cGUoKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIGlmIChnZW5lcmF0b3IubGVmdEhhbmRTaWRlTmVlZHNDb3B5KG1f
cmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpKSB7CisgICAg
ICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkKKyAgICAgICAgICAgIHx8IGdlbmVyYXRvci5sZWZ0
SGFuZFNpZGVOZWVkc0NvcHkobV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3JpZ2h0LT5pc1B1cmUo
Z2VuZXJhdG9yKSkpIHsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXN1bHQgPSBn
ZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUo
cmVzdWx0LmdldCgpLCBsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBlbWl0UmVhZE1vZGlmeUFz
c2lnbm1lbnQoZ2VuZXJhdG9yLCByZXN1bHQuZ2V0KCksIHJlc3VsdC5nZXQoKSwgbV9yaWdodCwg
bV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd25UeXBlKCksIG1fcmln
aHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwpAQCAtMTM1Niw2ICsxMzc2LDEyIEBAIFJlZ2lzdGVy
SUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogICAgICAgICAgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Tm9kZShkc3QsIG1fcmlnaHQpOwogICAgICAgICB9CisgICAgICAgIGlmIChsb2Nh
bC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0
ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOworICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKHRlbXBEc3QuZ2V0KCksIG1fcmlnaHQpOworICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRNb3ZlKGxvY2FsLmdldCgpLCB0ZW1wRHN0LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVy
biBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkp
OworICAgICAgICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0
Tm9kZShsb2NhbC5nZXQoKSwgbV9yaWdodCk7CiAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92
ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHJlc3VsdCk7CiAgICAgfQpAQCAtMTQ1MSwxMSAr
MTQ3NywxNyBAQCBSZWdpc3RlcklEKiBDb21tYU5vZGU6OmVtaXRCeXRlY29kZShCeXRlCiBSZWdp
c3RlcklEKiBDb25zdERlY2xOb2RlOjplbWl0Q29kZVNpbmdsZShCeXRlY29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yKQogewogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgZG9lcyBub3QgbWF0Y2ggdGhl
IGJlaGF2aW9yIG9mIGNvbnN0IGluIEZpcmVmb3guCi0gICAgaWYgKFJlZ2lzdGVySUQqIGxvY2Fs
ID0gZ2VuZXJhdG9yLmNvbnN0TG9jYWwobV9pZGVudCkuZ2V0KCkpIHsKKyAgICBpZiAoTG9jYWwg
bG9jYWwgPSBnZW5lcmF0b3IuY29uc3RMb2NhbChtX2lkZW50KSkgewogICAgICAgICBpZiAoIW1f
aW5pdCkKLSAgICAgICAgICAgIHJldHVybiBsb2NhbDsKKyAgICAgICAgICAgIHJldHVybiBsb2Nh
bC5nZXQoKTsKIAotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXROb2RlKGxvY2FsLCBtX2lu
aXQpOworICAgICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdGVtcERzdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX2luaXQpOworICAgICAg
ICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE5v
ZGUobG9jYWwuZ2V0KCksIG1faW5pdCk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHZhbHVlID0gbV9pbml0ID8gZ2VuZXJhdG9yLmVtaXROb2RlKG1faW5pdCkgOiBnZW5lcmF0b3Iu
ZW1pdExvYWQoMCwganNVbmRlZmluZWQoKSk7CkBAIC0xNzMwLDggKzE3NjIsNyBAQCB2b2lkIEZv
ckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuCiAgICAgaWYgKG1fbGV4cHItPmlzUmVz
b2x2ZU5vZGUoKSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBpZGVudCA9IHN0YXRpY19j
YXN0PFJlc29sdmVOb2RlKj4obV9sZXhwciktPmlkZW50aWZpZXIoKTsKICAgICAgICAgTG9jYWwg
bG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQpOwotICAgICAgICBwcm9wZXJ0eU5hbWUgPSBs
b2NhbC5nZXQoKTsKLSAgICAgICAgaWYgKCFwcm9wZXJ0eU5hbWUpIHsKKyAgICAgICAgaWYgKCFs
b2NhbC5nZXQoKSkgewogICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1Rl
bXBvcmFyeSgpOwogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9w
ZXJ0eU5hbWU7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpKQpAQCAt
MTc0MCw4ICsxNzcxLDEwIEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVH
ZW4KICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2
b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UHV0VG9T
Y29wZShzY29wZSwgaWRlbnQsIHByb3BlcnR5TmFtZSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgp
ID8gVGhyb3dJZk5vdEZvdW5kIDogRG9Ob3RUaHJvd0lmTm90Rm91bmQpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1vdmUo
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICAgICAgZ2Vu
ZXJhdG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5n
ZXQoKSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIGV4cGVjdGVkU3Vic2Ny
aXB0ID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOworICAgICAgICAgICAgcHJvcGVydHlOYW1l
ID0gZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0KCk7CisgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE1v
dmUobG9jYWwuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBnZW5lcmF0b3IucHVz
aE9wdGltaXNlZEZvckluKGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVyLmdldCgpLCBpLmdl
dCgpLCBsb2NhbC5nZXQoKSk7CiAgICAgICAgICAgICBvcHRpbWl6ZWRGb3JpbkFjY2VzcyA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKG1fbGV4cHItPmlzRG90QWNjZXNzb3JOb2Rl
KCkpIHsKQEAgLTE3NzEsNyArMTgwNCw3IEBAIHZvaWQgRm9ySW5Ob2RlOjplbWl0Qnl0ZWNvZGUo
Qnl0ZWNvZGVHZW4KICAgICAgICAgICAgIElkZW50aWZpZXIgaWRlbnQgPSBzaW1wbGVCaW5kaW5n
LT5ib3VuZFByb3BlcnR5KCk7CiAgICAgICAgICAgICBMb2NhbCBsb2NhbCA9IGdlbmVyYXRvci5s
b2NhbChpZGVudCk7CiAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBsb2NhbC5nZXQoKTsKLSAg
ICAgICAgICAgIGlmICghcHJvcGVydHlOYW1lKQorICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eU5h
bWUgfHwgbG9jYWwuaXNDYXB0dXJlZCgpKQogICAgICAgICAgICAgICAgIGdvdG8gZ2VuZXJpY0Jp
bmRpbmc7CiAgICAgICAgICAgICBleHBlY3RlZFN1YnNjcmlwdCA9IGdlbmVyYXRvci5lbWl0TW92
ZShnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBn
ZW5lcmF0b3IucHVzaE9wdGltaXNlZEZvckluKGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpLCBpdGVy
LmdldCgpLCBpLmdldCgpLCBwcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1OTg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTQxLDcgKzIxNDEsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKEJyZWFrcG9pbnQpOwogICAgICAg
ICAgICAgTkVYVF9PUENPREUob3BfZGVidWcpOwogI2VuZGlmCi0gICAgICAgIGNhc2Ugb3BfbW92
OiB7CisgICAgICAgIGNhc2Ugb3BfbW92OgorICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjog
ewogICAgICAgICAgICAgTm9kZSogb3AgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG9wKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX21vdik7CkBAIC0zMjIxLDcgKzMyMjIsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9nZXRfYXJn
dW1lbnRfYnlfdmFsKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3Bf
bmV3X2Z1bmM6IHsKKyAgICAgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICAgICAgY2FzZSBvcF9u
ZXdfY2FwdHVyZWRfZnVuYzogewogICAgICAgICAgICAgaWYgKCFjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kKSB7CiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKICAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChOZXdGdW5jdGlvbk5vQ2hlY2ssIE9wSW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDcgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfZGVi
dWc6CiAjZW5kaWYKICAgICBjYXNlIG9wX21vdjoKKyAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoK
ICAgICBjYXNlIG9wX2NoZWNrX2hhc19pbnN0YW5jZToKICAgICBjYXNlIG9wX2luc3RhbmNlb2Y6
CiAgICAgY2FzZSBvcF9pc191bmRlZmluZWQ6CkBAIC0yMDEsNiArMjAyLDcgQEAgQ2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2
YXRpb246CiAgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOgogICAgIGNhc2Ugb3BfbmV3
X2Z1bmM6CisgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICBjYXNlIG9wX25ld19m
dW5jX2V4cDoKICAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6IC8vIERvbid0IGlubGluZSBiZWNh
dXNlIHdlIGRvbid0IHdhbnQgdG8gY29weSBzdHJpbmcgdGFibGVzIGluIHRoZSBjb25jdXJyZW50
IEpJVC4KICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MCw2ICsyNTAsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9sb29wX2hpbnQpCiAg
ICAgICAgIERFRklORV9PUChvcF9sc2hpZnQpCiAgICAgICAgIERFRklORV9PUChvcF9tb2QpCisg
ICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgogICAgICAgICBERUZJTkVfT1Aob3BfbW92KQog
ICAgICAgICBERUZJTkVfT1Aob3BfbXVsKQogICAgICAgICBERUZJTkVfT1Aob3BfbmVnYXRlKQpA
QCAtMjU4LDYgKzI1OSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAg
ICAgICAgREVGSU5FX09QKG9wX25ld19hcnJheSkKICAgICAgICAgREVGSU5FX09QKG9wX25ld19h
cnJheV93aXRoX3NpemUpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfYXJyYXlfYnVmZmVyKQor
ICAgICAgICBjYXNlIG9wX25ld19jYXB0dXJlZF9mdW5jOgogICAgICAgICBERUZJTkVfT1Aob3Bf
bmV3X2Z1bmMpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdfZnVuY19leHApCiAgICAgICAgIERF
RklORV9PUChvcF9uZXdfb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1
OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
MzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01NDIsNiArNTQyLDE2IEBAIF9sbGludF9vcF9t
b3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCitfbGxpbnRfb3BfY2FwdHVyZWRfbW92OgorICAgIHRy
YWNlRXhlY3V0aW9uKCkKKyAgICBsb2FkaSA4W1BDXSwgdDEKKyAgICBsb2FkaSA0W1BDXSwgdDAK
KyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCisgICAgc3RvcmVpIHQyLCBU
YWdPZmZzZXRbY2ZyLCB0MCwgOF0KKyAgICBzdG9yZWkgdDMsIFBheWxvYWRPZmZzZXRbY2ZyLCB0
MCwgOF0KKyAgICBkaXNwYXRjaCgzKQorCisKIF9sbGludF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVj
dXRpb24oKQogICAgIGxvYWRpIDhbUENdLCB0MApAQCAtMTY2Miw2ICsxNjcyLDE3IEBAIF9sbGlu
dF9vcF9uZXdfZnVuYzoKICAgICBkaXNwYXRjaCg0KQogCiAKK19sbGludF9vcF9uZXdfY2FwdHVy
ZWRfZnVuYzoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgYnRpeiAxMltQQ10sIC5vcE5ld0Nh
cHR1cmVkRnVuY1VuY2hlY2tlZAorICAgIGxvYWRpIDRbUENdLCB0MQorICAgIGJpbmVxIFRhZ09m
ZnNldFtjZnIsIHQxLCA4XSwgRW1wdHlWYWx1ZVRhZywgLm9wTmV3Q2FwdHVyZWRGdW5jRG9uZQor
Lm9wTmV3Q2FwdHVyZWRGdW5jVW5jaGVja2VkOgorICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xv
d19wYXRoX25ld19mdW5jKQorLm9wTmV3Q2FwdHVyZWRGdW5jRG9uZToKKyAgICBkaXNwYXRjaCg0
KQorCisKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwoKQogICAgIGlmIFZBTFVFX1BST0ZJTEVS
CiAgICAgICAgIGxvYWRpIDE2W1BDXSwgdDMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxNTk4
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0
LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNDE4LDYgKzQxOCwxNSBAQCBfbGxpbnRfb3BfbW92Ogog
ICAgIGRpc3BhdGNoKDMpCiAKIAorX2xsaW50X29wX2NhcHR1cmVkX21vdjoKKyAgICB0cmFjZUV4
ZWN1dGlvbigpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQorICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigxLCB0MCkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikK
KyAgICBzdG9yZXEgdDIsIFtjZnIsIHQwLCA4XQorICAgIGRpc3BhdGNoKDMpCisKKwogX2xsaW50
X29wX25vdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDIsIHQwKQpAQCAtMTUxNCw2ICsxNTIzLDE4IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKICAgICBk
aXNwYXRjaCg0KQogCiAKK19sbGludF9vcF9uZXdfY2FwdHVyZWRfZnVuYzoKKyAgICB0cmFjZUV4
ZWN1dGlvbigpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQyKQorICAgIGJ0aXogdDIs
IC5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigx
LCB0MSkKKyAgICBidHFueiBbY2ZyLCB0MSwgOF0sIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUKKy5v
cE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3df
cGF0aF9uZXdfZnVuYykKKy5vcE5ld0NhcHR1cmVkRnVuY0RvbmU6CisgICAgZGlzcGF0Y2goNCkK
KworCiBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKCkKICAgICBpZiBWQUxVRV9QUk9GSUxFUgog
ICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1Myw2ICs0NTMsMTEgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q2FwdHVyZUVuZChpbnQg
Y2FwdHVyZUVuZCkgeyBtX2NhcHR1cmVFbmQgPSBjYXB0dXJlRW5kOyB9CiAKICAgICBpbnQgY2Fw
dHVyZUNvdW50KCkgY29uc3QgeyByZXR1cm4gLShtX2NhcHR1cmVFbmQgLSBtX2NhcHR1cmVTdGFy
dCk7IH0KKyAgICAKKyAgICBib29sIGlzQ2FwdHVyZWQoaW50IG9wZXJhbmQpCisgICAgeworICAg
ICAgICByZXR1cm4gb3BlcmFuZCA8PSBjYXB0dXJlU3RhcnQoKSAmJiBvcGVyYW5kID4gY2FwdHVy
ZUVuZCgpOworICAgIH0KIAogICAgIGludCBwYXJhbWV0ZXJDb3VudCgpIHsgcmV0dXJuIG1fcGFy
YW1ldGVyQ291bnRJbmNsdWRpbmdUaGlzIC0gMTsgfQogICAgIGludCBwYXJhbWV0ZXJDb3VudElu
Y2x1ZGluZ1RoaXMoKSB7IHJldHVybiBtX3BhcmFtZXRlckNvdW50SW5jbHVkaW5nVGhpczsgfQpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gMTU5OTAwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTMtMTItMDEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9yZXMgdG8gbG9jYWwgY2FwdHVyZWQgdmFyaWFi
bGVzIHNob3VsZCBiZSBpbnRlcmNlcHRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI0ODgzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50
cy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jYXB0dXJl
ZC1hc3NpZ25tZW50cy5qczogQWRkZWQuCisKIDIwMTMtMTEtMjkgIE1pY2hhxYIgUGFrdcWCYSB2
ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIEVG
TCBnYXJkZW5pbmcKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY2FwdHVyZWQtYXNzaWdu
bWVudHMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Y2FwdHVyZWQtYXNzaWdubWVudHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy1leHBlY3RlZC50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRz
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jYXB0dXJlZC1hc3Np
Z25tZW50cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NhcHR1cmVkLWFzc2lnbm1lbnRzLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY2FwdHVyZWQtYXNz
aWdubWVudHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9v
KCkgeworICAgIHZhciB4ID0gMDsKKyAgICArK3g7CisgICAgZm9yICh2YXIgeCBpbiBbMSwgMiwg
M10pIHsKKyAgICB9CisgICAgeCA9IDE7CisgICAgeCsrOworICAgIHZhciB5ID0geCsrOworICAg
IHZhciB6ID0geSsrOworICAgIHogPSB4Kys7CisgICAgeCArPSAyOworICAgIHogLT0gMTsKKyAg
ICB4ICo9IDI7CisgICAgeiA8PD0gMTsKKyAgICB4IHw9IDU7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KCkgeyByZXR1cm4geCsrICsgejsgfQorfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KSB7CisgICAgaWYgKGZvbygpKCkgIT0gMTcpCisgICAgICAgIHRocm93ICJFcnJvciI7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218121</attachid>
            <date>2013-12-01 13:25:33 -0800</date>
            <delta_ts>2013-12-02 11:16:46 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>71705</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTU5OTAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDEzLTEyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U3RvcmVzIHRvIGxvY2FsIGNhcHR1cmVkIHZhcmlhYmxlcyBzaG91bGQgYmUgaW50ZXJjZXB0ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNDg4Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
UHJldmlvdXNseSwgaW4gYnl0ZWNvZGUsIHlvdSBjb3VsZCBhc3NpZ24gdG8gYSBjYXB0dXJlZCB2
YXJpYWJsZSBqdXN0IGFzIHlvdSB3b3VsZAorICAgICAgICBhc3NpZ24gdG8gYW55IG90aGVyIGtp
bmQgb2YgdmFyaWFibGUuIFRoaXMgY29tcGxpY2F0ZXMgY2xvc3VyZSB2YXJpYWJsZSBjb25zdGFu
dAorICAgICAgICBpbmZlcmVuY2UgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGFueSBwbGFjZSB3aGVy
ZSB3ZSBjYW4gaW50ZXJjZXB0IHN0b3JlcyB0byBjYXB0dXJlZAorICAgICAgICB2YXJpYWJsZXMg
aW4gdGhlIExMSW50LgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBpbnN0aXR1dGVzIGEg
cG9saWN5IHRoYXQgb25seSBjZXJ0YWluIGluc3RydWN0aW9ucyBjYW4gc3RvcmUgdG8gY2FwdHVy
ZWQKKyAgICAgICAgdmFyaWFibGVzLiBJZiB5b3UgaW50ZXJwcmV0IHRob3NlIGluc3RydWN0aW9u
cyBhbmQgeW91IGFyZSByZXF1aXJlZCB0byBub3RpZnlXcml0ZSgpCisgICAgICAgIHRoZW4geW91
IG5lZWQgdG8gY2hlY2sgaWYgdGhlIHJlbGV2YW50IHZhcmlhYmxlIGlzIGNhcHR1cmVkLiBUaG9z
ZSBpbnN0cnVjdGlvbnMgYXJlCisgICAgICAgIHRyYWNrZWQgaW4gQ29kZUJsb2NrLmNwcCdzIFZl
cmlmeUNhcHR1cmVkRGVmLiBUaGUgbWFpbiBvbmUgaXMgc2ltcGx5IG9wX2NhcHR1cmVkX21vdi4K
KyAgICAgICAgSW4gdGhlIGZ1dHVyZSwgd2UnbGwgcHJvYmFibHkgbW9kaWZ5IHRob3NlIGluc3Ry
dWN0aW9ucyB0byBoYXZlIGEgcG9pbnRlciBkaXJlY3RseSB0bworICAgICAgICB0aGUgVmFyaWFi
bGVXYXRjaHBvaW50U2V0OyBidXQgZm9yIG5vdyB3ZSBqdXN0IGludHJvZHVjZSB0aGUgY2FwdHVy
ZWQgaW5zdHJ1Y3Rpb25zIGFzCisgICAgICAgIHBsYWNlaG9sZGVycy4KKyAgICAgICAgCisgICAg
ICAgIEluIG9yZGVyIHRvIHZhbGlkYXRlIHRoYXQgdGhlIHBsYWNlaG9sZGVycyBhcmUgaW5zZXJ0
ZWQgY29ycmVjdGx5LCB0aGlzIHBhdGNoIGltcHJvdmVzCisgICAgICAgIHRoZSBDb2RlQmxvY2sg
dmFsaWRhdGlvbiB0byBiZSBhYmxlIHRvIGluc3BlY3QgZXZlcnkgZGVmIGluIHRoZSBieXRlY29k
ZS4gVG8gZG8gdGhhdCwKKyAgICAgICAgdGhpcyBwYXRjaCByZWZhY3RvcnMgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzJyB1c2UvZGVmIGNhbGN1bGF0b3IgdG8gYmUgcmV1c2FibGU7IGl0IG5vdworICAg
ICAgICB0YWtlcyBhIGZ1bmN0b3IgZm9yIGVhY2ggdXNlIG9yIGRlZi4KKyAgICAgICAgCisgICAg
ICAgIEluIHRoZSBwcm9jZXNzIG9mIHJlZmFjdG9yaW5nIHRoZSBsaXZlbmVzcyBhbmFseXNpcywg
SSBub3RpY2VkIHRoYXQgb3BfZW50ZXIgd2FzCisgICAgICAgIGNsYWltaW5nIHRvIGRlZiBhbGwg
Y2FsbGVlIHJlZ2lzdGVycy4gVGhhdCdzIHdyb25nOyBpdCBvbmx5IGRlZnMgdGhlIG5vbi10ZW1w
b3JhcnkKKyAgICAgICAgdmFyaWFibGVzLiBNYWtpbmcgdGhhdCBjaGFuZ2UgcmV2ZWFsZWQgcHJl
ZXhpc3RpbmcgYnVncyBpbiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMsIHNpbmNlCisgICAgICAgIG5v
dyB0aGUgdmFsaWRhdG9yIHdvdWxkIHBpY2sgdXAgY2FzZXMgd2hlcmUgdGhlIGJ5dGVjb2RlIGNs
YWltZWQgdG8gdXNlIGEgdGVtcG9yYXJ5IGFuZAorICAgICAgICB0aGUgZGVmIGNhbGN1bGF0b3Ig
bmV2ZXIgbm90aWNlZCB0aGUgZGVmaW5pdGlvbiAob3IgdGhlIGNvbnZlcnNlIC0gd2hlcmUgdGhl
IGJ5dGVjb2RlCisgICAgICAgIHdhcyBhY3R1YWxseSBub3QgdXNpbmcgYSB0ZW1wb3JhcnkgYnV0
IHRoZSBsaXZlbmVzcyBhbmFseXNpcyB0aG91Z2h0IHRoYXQgaXQgd2FzIGEKKyAgICAgICAgdXNl
KS4gVGhpcyBwYXRjaCBmaXhlcyBhIGZldyBvZiB0aG9zZSBidWdzLgorCisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuY3BwOgorICAgICAgICAoSlNDOjpzdGVwT3Zlckluc3RydWN0aW9uKToKKyAgICAgICAgKiBi
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVz
ZXNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpp
c0NhcHR1cmVkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAg
ICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6Cisg
ICAgICAgIChKU0M6OnBhZE9wY29kZU5hbWUpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRl
Y29kZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpyZXNvbHZl
Q2FsbGVlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmlzQ2FwdHVyZWQpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcjo6bG9jYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6Y29uc3RMb2NhbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
TmV3RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlO
ZXdGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3RnVu
Y3Rpb25JbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
Lmg6CisgICAgICAgIChKU0M6OkxvY2FsOjpMb2NhbCk6CisgICAgICAgIChKU0M6OkxvY2FsOjpp
c0NhcHR1cmVkKToKKyAgICAgICAgKEpTQzo6TG9jYWw6OmNhcHR1cmVNb2RlKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmNhcHR1cmVNb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXROb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OnB1c2hPcHRpbWlzZWRGb3JJbik6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHA6CisgICAgICAgIChKU0M6OlBvc3RmaXhOb2RlOjplbWl0UmVzb2x2ZSk6CisgICAg
ICAgIChKU0M6OlByZWZpeE5vZGU6OmVtaXRSZXNvbHZlKToKKyAgICAgICAgKEpTQzo6UmVhZE1v
ZGlmeVJlc29sdmVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBc3NpZ25SZXNv
bHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29uc3REZWNsTm9kZTo6ZW1p
dENvZGVTaW5nbGUpOgorICAgICAgICAoSlNDOjpGb3JJbk5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBq
aXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToK
KyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9TeW1i
b2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6aXNDYXB0dXJlZCk6CisKIDIw
MTMtMTEtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaW5h
bGx5IHJlbW92ZSB0aG9zZSBERkdfRU5BQkxFIHRoaW5ncwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
MTAgKzEwMiwxMSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnlWYWxJbmZvLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUJhc2ljQmxvY2suY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVCYXNpY0Jsb2NrLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggXAot
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUNvbnZlbnRpb25zLmggXAor
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rSW5mby5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzUxLDYgKzc1MSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxCeXRlY29kZUJhc2ljQmxvY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxCeXRlY29kZVVz
ZURlZi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbExpbmtJ
bmZvLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxDYWxsTGlua1N0
YXR1cy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcQ2FsbFJldHVy
bk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjg5
LDYgKzI4OSw3IEBACiAJCTBGODMzNUI3MTYzOUMxRTYwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRp
b25Qcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGODMzNUI0MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNw
cCAqLzsgfTsKIAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRC
MEMxMTAwNTMzMjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERG
R0JyYW5jaERpcmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAx
ODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8q
IEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhG
MkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0
RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtMTU4Myw2
ICsxNTg0LDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIw
QzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg1QTMxRTE2QUI3NkFF
MDA3NzU3MUUgLyogREZHVmFyaWFkaWNGdW5jdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdWYXJpYWRpY0Z1bmN0aW9uLmg7IHBhdGggPSBkZmcvREZHVmFyaWFkaWNG
dW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjg4NUUxMDE4NDlBM0JF
MDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRp
ZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsg
cGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDA1OCw2ICs0MDYwLDcgQEAKIAkJCQlDMkZDQUUwRTE3QTlDMjRFMDAzNEM3
MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcCAqLywKIAkJCQlDMkZDQUUwRjE3QTlD
MjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggKi8sCiAJCQkJMEY2NjZF
QkUxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCAq
LywKKwkJCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLywK
IAkJCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggKi8sCiAJCQkJMEYw
QjgzQUUxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgKi8sCiAJCQkJMEYwQjgz
QUYxNEJDRjcxNDAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oICovLApAQCAtNDI2OSw2ICs0Mjcy
LDcgQEAKIAkJCQlCQzMxMzU2NDBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdnZXJBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGQjBFMTZGNUNEMDBCMzQ0NjAgLyogRGVidWdn
ZXJDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1
NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUz
RkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkRGMTdDRDg3
N0MwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3N0E0MjNFMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdElu
dGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShy
ZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIgogCiAjaW5jbHVkZSAiQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlVXNlRGVmLmgi
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mu
aCIKICNpbmNsdWRlICJQcmVjaXNlSnVtcFRhcmdldHMuaCIKQEAgLTY3LDQyNCArNjgsMjYgQEAg
c3RhdGljIHZvaWQgc2V0Rm9yT3BlcmFuZChDb2RlQmxvY2sqIGNvZAogICAgICAgICBiaXRzLnNl
dCh2aXJ0dWFsUmVnLnRvTG9jYWwoKSAtIGNvZGVCbG9jay0+Y2FwdHVyZUNvdW50KCkpOwogfQog
Ci1zdGF0aWMgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayogY29k
ZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgdXNlcykKLXsK
LSAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBjb2RlQmxvY2stPnZtKCktPmludGVycHJl
dGVyOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKTsKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmaW5z
dHJ1Y3Rpb25zQmVnaW5bYnl0ZWNvZGVPZmZzZXRdOwotICAgIE9wY29kZUlEIG9wY29kZUlEID0g
aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7Ci0gICAgc3dp
dGNoIChvcGNvZGVJRCkgewotICAgIC8vIE5vIHVzZXMuCi0gICAgY2FzZSBvcF9uZXdfcmVnZXhw
OgotICAgIGNhc2Ugb3BfbmV3X2FycmF5X2J1ZmZlcjoKLSAgICBjYXNlIG9wX3Rocm93X3N0YXRp
Y19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToK
LSAgICBjYXNlIG9wX3BvcF9zY29wZToKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ug
b3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfbG9vcF9oaW50OgotICAgIGNhc2Ugb3Bfam1w
OgotICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6Ci0g
ICAgY2FzZSBvcF9nZXRfY2FsbGVlOgotICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF9j
YXRjaDoKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEZpcnN0IGFyZ3VtZW50LgotICAgIGNhc2Ug
b3BfbmV3X2Z1bmM6Ci0gICAgY2FzZSBvcF9jcmVhdGVfYWN0aXZhdGlvbjogCi0gICAgY2FzZSBv
cF9jcmVhdGVfYXJndW1lbnRzOgotICAgIGNhc2Ugb3BfdG9fdGhpczoKLSAgICBjYXNlIG9wX3Rl
YXJfb2ZmX2FjdGl2YXRpb246Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBj
YXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9w
X3B1c2hfd2l0aF9zY29wZToKLSAgICBjYXNlIG9wX2VuZDoKLSAgICBjYXNlIG9wX3JldDoKLSAg
ICBjYXNlIG9wX2p0cnVlOgotICAgIGNhc2Ugb3BfamZhbHNlOgotICAgIGNhc2Ugb3BfamVxX251
bGw6Ci0gICAgY2FzZSBvcF9qbmVxX251bGw6Ci0gICAgY2FzZSBvcF9kZWM6Ci0gICAgY2FzZSBv
cF9pbmM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCBzZWNvbmQgYXJndW1lbnRzLgotICAgIGNhc2Ug
b3BfZGVsX2J5X2lkOgotICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ug
b3Bfamxlc3NlcToKLSAgICBjYXNlIG9wX2pncmVhdGVyOgotICAgIGNhc2Ugb3BfamdyZWF0ZXJl
cToKLSAgICBjYXNlIG9wX2pubGVzczoKLSAgICBjYXNlIG9wX2pubGVzc2VxOgotICAgIGNhc2Ug
b3Bfam5ncmVhdGVyOgotICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6Ci0gICAgY2FzZSBvcF9qbGVz
czogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBp
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2Rl
QmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1Zh
bGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGaXJzdCwg
c2Vjb25kLCBhbmQgdGhpcmQgYXJndW1lbnRzLgotICAgIGNhc2Ugb3BfZGVsX2J5X3ZhbDoKLSAg
ICBjYXNlIG9wX3B1dF9ieV92YWxfZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbDogewot
ICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ss
IHVzZXMsIGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVn
aXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0g
ICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJh
bmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIEZpcnN0IGFuZCB0aGlyZCBhcmd1bWVudHMuCi0gICAgY2Fz
ZSBvcF9wdXRfYnlfaW5kZXg6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBj
YXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9uOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5z
aXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291
dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAg
IGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNh
c2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xp
bmU6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsK
LSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQot
ICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRmlyc3QsIHRoaXJk
LCBhbmQgZm91cnRoIGFyZ3VtZW50cy4KLSAgICBjYXNlIG9wX3B1dF9nZXR0ZXJfc2V0dGVyOiB7
Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9j
aywgdXNlcywgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkK
LSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3Bl
cmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kIGFyZ3VtZW50LgotICAgIGNhc2Ugb3BfaW5p
dF9nbG9iYWxfY29uc3Rfbm9wOgotICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAg
Y2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKLSAg
ICBjYXNlIG9wX3RvX3ByaW1pdGl2ZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICBjYXNl
IG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9zZWxmOgot
ICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2NoYWlu
OgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dldHRlcl9zZWxmOgotICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2dldHRlcl9wcm90bzoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfY2hhaW46Ci0g
ICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9tX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRf
Y3VzdG9tX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9jaGFpbjoKLSAgICBj
YXNlIG9wX2dldF9ieV9pZF9nZW5lcmljOgotICAgIGNhc2Ugb3BfZ2V0X2FycmF5X2xlbmd0aDoK
LSAgICBjYXNlIG9wX2dldF9zdHJpbmdfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X2FyZ3VtZW50
c19sZW5ndGg6Ci0gICAgY2FzZSBvcF90eXBlb2Y6Ci0gICAgY2FzZSBvcF9pc191bmRlZmluZWQ6
Ci0gICAgY2FzZSBvcF9pc19ib29sZWFuOgotICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgotICAgIGNh
c2Ugb3BfaXNfc3RyaW5nOgotICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgotICAgIGNhc2Ugb3BfaXNf
ZnVuY3Rpb246Ci0gICAgY2FzZSBvcF90b19udW1iZXI6Ci0gICAgY2FzZSBvcF9uZWdhdGU6Ci0g
ICAgY2FzZSBvcF9uZXFfbnVsbDoKLSAgICBjYXNlIG9wX2VxX251bGw6Ci0gICAgY2FzZSBvcF9u
b3Q6Ci0gICAgY2FzZSBvcF9tb3Y6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgot
ICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZv
ckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAg
ICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFNlY29uZCBhbmQgdGhpcmQgYXJn
dW1lbnRzLgotICAgIGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVu
dF9ieV92YWw6Ci0gICAgY2FzZSBvcF9pbjoKLSAgICBjYXNlIG9wX2luc3RhbmNlb2Y6Ci0gICAg
Y2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9hZGQ6Ci0gICAgY2FzZSBv
cF9tdWw6Ci0gICAgY2FzZSBvcF9kaXY6Ci0gICAgY2FzZSBvcF9tb2Q6Ci0gICAgY2FzZSBvcF9z
dWI6Ci0gICAgY2FzZSBvcF9sc2hpZnQ6Ci0gICAgY2FzZSBvcF9yc2hpZnQ6Ci0gICAgY2FzZSBv
cF91cnNoaWZ0OgotICAgIGNhc2Ugb3BfYml0YW5kOgotICAgIGNhc2Ugb3BfYml0eG9yOgotICAg
IGNhc2Ugb3BfYml0b3I6Ci0gICAgY2FzZSBvcF9sZXNzOgotICAgIGNhc2Ugb3BfbGVzc2VxOgot
ICAgIGNhc2Ugb3BfZ3JlYXRlcjoKLSAgICBjYXNlIG9wX2dyZWF0ZXJlcToKLSAgICBjYXNlIG9w
X25zdHJpY3RlcToKLSAgICBjYXNlIG9wX3N0cmljdGVxOgotICAgIGNhc2Ugb3BfbmVxOgotICAg
IGNhc2Ugb3BfZXE6IHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9w
ZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAg
ICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMs
IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gU2Vjb25kLCB0aGlyZCwgYW5kIGZvdXJ0aCBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3M6Ci0gICAgY2FzZSBvcF9nZXRfcG5hbWVzOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlk
UmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
Ci0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9w
ZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOwotICAgICAg
ICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMs
IGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Ly8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBhbmQgZmlmdGggYXJndW1lbnRzLgotICAgIGNhc2Ug
b3BfbmV4dF9wbmFtZTogewotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mo
Y29kZUJsb2NrLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9y
T3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7Ci0gICAg
ICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNl
cywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKSkKLSAgICAg
ICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls0XS51Lm9w
ZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChj
b2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzVdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gU2Vjb25kLCB0aGlyZCwgZm91cnRoLCBmaWZ0aCwgYW5kIHNpeHRo
IGFyZ3VtZW50cy4gCi0gICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6IHsKLSAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5l
c3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0
Rm9yT3BlcmFuZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7Ci0g
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywg
dXNlcywgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kKSkKLSAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvbls1XS51
Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJs
b2NrLCBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFu
ZChjb2RlQmxvY2ssIHVzZXMsIGluc3RydWN0aW9uWzZdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gVGhpcmQgYXJndW1lbnQuCi0gICAgY2FzZSBvcF9zd2l0Y2hf
c3RyaW5nOgotICAgIGNhc2Ugb3Bfc3dpdGNoX2NoYXI6Ci0gICAgY2FzZSBvcF9zd2l0Y2hfaW1t
OiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGlu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVC
bG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBWYXJpYWJsZSBudW1iZXIgb2YgYXJndW1lbnRzLgotICAgIGNhc2Ugb3Bf
bmV3X2FycmF5OgotICAgIGNhc2Ugb3Bfc3RyY2F0OiB7Ci0gICAgICAgIGludCBiYXNlID0gaW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewot
ICAgICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgYmFz
ZSAtIGkpKQotICAgICAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBi
YXNlIC0gaSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDcmF6
eSBzdHVmZiBmb3IgY2FsbHMuCi0gICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgY2FzZSBvcF9j
YWxsX2V2YWw6Ci0gICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0
ZXJGb3JMaXZlbmVzcyhjb2RlQmxvY2ssIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpCi0gICAg
ICAgICAgICBzZXRGb3JPcGVyYW5kKGNvZGVCbG9jaywgdXNlcywgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OwotICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykgewotICAgICAgICAgICAgaWYgKGlz
VmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgbGFzdEFyZyArIGkpKQotICAgICAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCBsYXN0QXJnICsgaSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBTcGVjaWFsIHN0dWZmIGZv
ciB0ZWFyIG9mZiBhcmd1bWVudHMuCi0gICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsK
LSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2Nr
LCB1c2VzLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwotICAgICAgICBpZiAoaXNWYWxpZFJl
Z2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIo
VmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKSkKLSAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCB1c2VzLCB1bm1vZGlmaWVkQXJndW1l
bnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpLm9m
ZnNldCgpKTsKLSAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkKLSAgICAgICAgICAgIHNldEZvck9wZXJhbmQo
Y29kZUJsb2NrLCB1c2VzLCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLX0KK25hbWVzcGFjZSB7CiAKLXN0YXRpYyB2
b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBkZWZzKQotewotICAgIEludGVy
cHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7Ci0gICAg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpOwotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNC
ZWdpbltieXRlY29kZU9mZnNldF07Ci0gICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKLSAgICBzd2l0Y2ggKG9wY29k
ZUlEKSB7Ci0gICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5nLgotICAgIGNhc2Ugb3Bf
aW5pdF9nbG9iYWxfY29uc3Q6Ci0gICAgY2FzZSBvcF9pbml0X2dsb2JhbF9jb25zdF9ub3A6Ci0g
ICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6Ci0gICAgY2FzZSBvcF9wdXNoX3dpdGhfc2NvcGU6
Ci0gICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6Ci0gICAgY2FzZSBvcF9wb3Bfc2NvcGU6Ci0gICAg
Y2FzZSBvcF9lbmQ6Ci0gICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2FsbDoKLSAgICBjYXNlIG9w
X3Byb2ZpbGVfZGlkX2NhbGw6Ci0gICAgY2FzZSBvcF90aHJvdzoKLSAgICBjYXNlIG9wX3Rocm93
X3N0YXRpY19lcnJvcjoKLSAgICBjYXNlIG9wX2RlYnVnOgotICAgIGNhc2Ugb3BfcmV0OgotICAg
IGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgotICAgIGNhc2Ugb3Bfam1wOgotICAgIGNhc2Ug
b3BfanRydWU6Ci0gICAgY2FzZSBvcF9qZmFsc2U6Ci0gICAgY2FzZSBvcF9qZXFfbnVsbDoKLSAg
ICBjYXNlIG9wX2puZXFfbnVsbDoKLSAgICBjYXNlIG9wX2puZXFfcHRyOgotICAgIGNhc2Ugb3Bf
amxlc3M6Ci0gICAgY2FzZSBvcF9qbGVzc2VxOgotICAgIGNhc2Ugb3BfamdyZWF0ZXI6Ci0gICAg
Y2FzZSBvcF9qZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3Bfam5sZXNzOgotICAgIGNhc2Ugb3Bfam5s
ZXNzZXE6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXI6Ci0gICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToK
LSAgICBjYXNlIG9wX2xvb3BfaGludDoKLSAgICBjYXNlIG9wX3N3aXRjaF9pbW06Ci0gICAgY2Fz
ZSBvcF9zd2l0Y2hfY2hhcjoKLSAgICBjYXNlIG9wX3N3aXRjaF9zdHJpbmc6Ci0gICAgY2FzZSBv
cF9wdXRfYnlfaWQ6Ci0gICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29mX2xpbmU6Ci0gICAgY2Fz
ZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKLSAgICBjYXNlIG9wX3B1dF9ieV9pZF90cmFuc2l0aW9u
OgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0OgotICAgIGNhc2Ugb3Bf
cHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRp
b25fbm9ybWFsX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfcHV0X2J5X2lkX2dlbmVyaWM6Ci0g
ICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKLSAgICBjYXNlIG9wX3B1dF9ieV92YWw6Ci0g
ICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKLSAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoK
LSAgICBjYXNlIG9wX2RlbF9ieV9pZDoKLSAgICBjYXNlIG9wX2RlbF9ieV92YWw6Ci0jZGVmaW5l
IExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKLSAgICAg
ICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7
Ci0jdW5kZWYgTExJTlRfSEVMUEVSX09QQ09ERVMKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIFRo
ZXNlIGFsbCBoYXZlIGEgc2luZ2xlIGRlc3RpbmF0aW9uIGZvciB0aGUgZmlyc3QgYXJndW1lbnQu
Ci0gICAgY2FzZSBvcF9uZXh0X3BuYW1lOgotICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKLSAgICBj
YXNlIG9wX3Jlc29sdmVfc2NvcGU6Ci0gICAgY2FzZSBvcF9zdHJjYXQ6Ci0gICAgY2FzZSBvcF90
ZWFyX29mZl9hY3RpdmF0aW9uOgotICAgIGNhc2Ugb3BfdG9fcHJpbWl0aXZlOgotICAgIGNhc2Ug
b3BfY2F0Y2g6Ci0gICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKLSAgICBjYXNlIG9wX25ld19hcnJh
eToKLSAgICBjYXNlIG9wX25ld19hcnJheV9idWZmZXI6Ci0gICAgY2FzZSBvcF9uZXdfYXJyYXlf
d2l0aF9zaXplOgotICAgIGNhc2Ugb3BfbmV3X3JlZ2V4cDoKLSAgICBjYXNlIG9wX25ld19mdW5j
OgotICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgotICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgot
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6Ci0gICAgY2FzZSBvcF9jYWxsOgotICAgIGNhc2Ug
b3BfY2FsbF9ldmFsOgotICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgotICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX3NlbGY6Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86Ci0gICAgY2FzZSBvcF9n
ZXRfYnlfaWRfY2hhaW46Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6Ci0gICAg
Y2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dl
dHRlcl9jaGFpbjoKLSAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKLSAgICBjYXNl
IG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86Ci0gICAgY2FzZSBvcF9nZXRfYnlfaWRfY3VzdG9t
X2NoYWluOgotICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6Ci0gICAgY2FzZSBvcF9nZXRf
YXJyYXlfbGVuZ3RoOgotICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6Ci0gICAgY2FzZSBv
cF9jaGVja19oYXNfaW5zdGFuY2U6Ci0gICAgY2FzZSBvcF9pbnN0YW5jZW9mOgotICAgIGNhc2Ug
b3BfZ2V0X2J5X3ZhbDoKLSAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Ci0gICAgY2Fz
ZSBvcF9nZXRfYnlfcG5hbWU6Ci0gICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0aDoKLSAg
ICBjYXNlIG9wX3R5cGVvZjoKLSAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKLSAgICBjYXNlIG9w
X2lzX2Jvb2xlYW46Ci0gICAgY2FzZSBvcF9pc19udW1iZXI6Ci0gICAgY2FzZSBvcF9pc19zdHJp
bmc6Ci0gICAgY2FzZSBvcF9pc19vYmplY3Q6Ci0gICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKLSAg
ICBjYXNlIG9wX2luOgotICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgotICAgIGNhc2Ugb3BfbmVnYXRl
OgotICAgIGNhc2Ugb3BfYWRkOgotICAgIGNhc2Ugb3BfbXVsOgotICAgIGNhc2Ugb3BfZGl2Ogot
ICAgIGNhc2Ugb3BfbW9kOgotICAgIGNhc2Ugb3Bfc3ViOgotICAgIGNhc2Ugb3BfbHNoaWZ0Ogot
ICAgIGNhc2Ugb3BfcnNoaWZ0OgotICAgIGNhc2Ugb3BfdXJzaGlmdDoKLSAgICBjYXNlIG9wX2Jp
dGFuZDoKLSAgICBjYXNlIG9wX2JpdHhvcjoKLSAgICBjYXNlIG9wX2JpdG9yOgotICAgIGNhc2Ug
b3BfaW5jOgotICAgIGNhc2Ugb3BfZGVjOgotICAgIGNhc2Ugb3BfZXE6Ci0gICAgY2FzZSBvcF9u
ZXE6Ci0gICAgY2FzZSBvcF9zdHJpY3RlcToKLSAgICBjYXNlIG9wX25zdHJpY3RlcToKLSAgICBj
YXNlIG9wX2xlc3M6Ci0gICAgY2FzZSBvcF9sZXNzZXE6Ci0gICAgY2FzZSBvcF9ncmVhdGVyOgot
ICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgotICAgIGNhc2Ugb3BfbmVxX251bGw6Ci0gICAgY2FzZSBv
cF9lcV9udWxsOgotICAgIGNhc2Ugb3Bfbm90OgotICAgIGNhc2Ugb3BfbW92OgotICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKLSAgICBjYXNlIG9wX3RvX3RoaXM6Ci0gICAgY2FzZSBvcF9nZXRfY2Fs
bGVlOgotICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKLSAgICBjYXNlIG9wX2NyZWF0ZV9hY3Rp
dmF0aW9uOgotICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3VtZW50czogewotICAgICAgICBpZiAoaXNW
YWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3MoY29kZUJsb2NrLCBpbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpKQotICAgICAgICAgICAgc2V0Rm9yT3BlcmFuZChjb2RlQmxvY2ssIGRlZnMsIGluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKK2NsYXNzIFNldEJpdCB7CitwdWJs
aWM6CisgICAgU2V0Qml0KEZhc3RCaXRWZWN0b3ImIGJpdHMpCisgICAgICAgIDogbV9iaXRzKGJp
dHMpCisgICAgewogICAgIH0KLSAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogewotICAg
ICAgICBpbnQgb3BlcmFuZCA9IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3RlcigKLSAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKS5vZmZzZXQoKTsK
KyAgICAKKyAgICB2b2lkIG9wZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEluc3RydWN0
aW9uKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKQorICAgIHsKICAgICAgICAgaWYgKGlzVmFsaWRS
ZWdpc3RlckZvckxpdmVuZXNzKGNvZGVCbG9jaywgb3BlcmFuZCkpCi0gICAgICAgICAgICBzZXRG
b3JPcGVyYW5kKGNvZGVCbG9jaywgZGVmcywgb3BlcmFuZCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHNldEZvck9wZXJhbmQoY29kZUJsb2NrLCBtX2JpdHMsIG9wZXJhbmQpOwogICAg
IH0KLSAgICBjYXNlIG9wX2VudGVyOiB7Ci0gICAgICAgIGRlZnMuc2V0QWxsKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9IH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQor
ICAgIAorcHJpdmF0ZToKKyAgICBGYXN0Qml0VmVjdG9yJiBtX2JpdHM7Cit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKIAogc3RhdGljIHVuc2lnbmVkIGdldExlYWRlck9mZnNldEZvckJh
c2ljQmxvY2soUmVmUHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4qIGJhc2ljQmxvY2spCiB7CkBAIC01
MzUsOCArMTM4LDEwIEBAIHN0YXRpYyB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2MK
ICAgICB1c2VzLmNsZWFyQWxsKCk7CiAgICAgZGVmcy5jbGVhckFsbCgpOwogICAgIAotICAgIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgdXNl
cyk7Ci0gICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2Rl
T2Zmc2V0LCBkZWZzKTsKKyAgICBTZXRCaXQgc2V0VXNlcyh1c2VzKTsKKyAgICBTZXRCaXQgc2V0
RGVmcyhkZWZzKTsKKyAgICBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Ynl0ZWNvZGVPZmZzZXQsIHNldFVzZXMpOworICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQoY29kZUJsb2NrLCBieXRlY29kZU9mZnNldCwgc2V0RGVmcyk7CiAgICAgCiAgICAgb3V0LmV4
Y2x1ZGUoZGVmcyk7CiAgICAgb3V0Lm1lcmdlKHVzZXMpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQnl0ZWNvZGVVc2VE
ZWZfaAorI2RlZmluZSBCeXRlY29kZVVzZURlZl9oCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNv
bXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEludGVycHJl
dGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50ZXJwcmV0ZXI7CisgICAgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdp
bltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAgICBzd2l0Y2ggKG9wY29kZUlE
KSB7CisgICAgLy8gTm8gdXNlcy4KKyAgICBjYXNlIG9wX25ld19yZWdleHA6CisgICAgY2FzZSBv
cF9uZXdfYXJyYXlfYnVmZmVyOgorICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgorICAg
IGNhc2Ugb3BfZGVidWc6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3Bf
cG9wX3Njb3BlOgorICAgIGNhc2Ugb3Bfam5lcV9wdHI6CisgICAgY2FzZSBvcF9uZXdfZnVuY19l
eHA6CisgICAgY2FzZSBvcF9sb29wX2hpbnQ6CisgICAgY2FzZSBvcF9qbXA6CisgICAgY2FzZSBv
cF9uZXdfb2JqZWN0OgorICAgIGNhc2Ugb3BfaW5pdF9sYXp5X3JlZzoKKyAgICBjYXNlIG9wX2dl
dF9jYWxsZWU6CisgICAgY2FzZSBvcF9lbnRlcjoKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJl
ZF9mdW5jOgorICAgIGNhc2Ugb3BfY3JlYXRlX2FjdGl2YXRpb246IAorICAgIGNhc2Ugb3BfY3Jl
YXRlX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6CisgICAgY2FzZSBv
cF9wcm9maWxlX2RpZF9jYWxsOgorICAgIGNhc2Ugb3BfdGhyb3c6CisgICAgY2FzZSBvcF9wdXNo
X3dpdGhfc2NvcGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9yZXQ6CisgICAgY2Fz
ZSBvcF9qdHJ1ZToKKyAgICBjYXNlIG9wX2pmYWxzZToKKyAgICBjYXNlIG9wX2plcV9udWxsOgor
ICAgIGNhc2Ugb3Bfam5lcV9udWxsOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfaW5j
OiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBvcF9yZXRfb2JqZWN0X29yX3RoaXM6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ug
b3BfamdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNz
OgorICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2Fz
ZSBvcF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2psZXNzOiB7CisgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCk7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGlu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2Fz
ZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKKyAgICAg
ICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBv
cGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2Rl
QmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKKyAgICBj
YXNlIG9wX3B1dF9ieV9pZF9yZXBsYWNlOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRp
b246CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Q6CisgICAgY2FzZSBv
cF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9kaXJlY3Rfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9ub3JtYWw6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbl9ub3JtYWxfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfZ2VuZXJpYzoK
KyAgICBjYXNlIG9wX3B1dF9ieV9pZF9vdXRfb2ZfbGluZToKKyAgICBjYXNlIG9wX3B1dF9ieV9p
ZDoKKyAgICBjYXNlIG9wX3B1dF90b19zY29wZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9j
aywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfcHV0
X2dldHRlcl9zZXR0ZXI6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
KTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2luaXRfZ2xvYmFsX2NvbnN0X25vcDoKKyAgICBjYXNlIG9wX2luaXRfZ2xvYmFsX2NvbnN0
OgorICAgIGNhc2Ugb3BfcHVzaF9uYW1lX3Njb3BlOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CisgICAgY2FzZSBvcF90b19wcmltaXRpdmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWQ6Cisg
ICAgY2FzZSBvcF9nZXRfYnlfaWRfb3V0X29mX2xpbmU6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
c2VsZjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9p
ZF9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9nZXR0ZXJfc2VsZjoKKyAgICBjYXNlIG9w
X2dldF9ieV9pZF9nZXR0ZXJfcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX2No
YWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2N1c3RvbV9zZWxmOgorICAgIGNhc2Ugb3BfZ2V0
X2J5X2lkX2N1c3RvbV9wcm90bzoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fY2hhaW46
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2VuZXJpYzoKKyAgICBjYXNlIG9wX2dldF9hcnJheV9s
ZW5ndGg6CisgICAgY2FzZSBvcF9nZXRfc3RyaW5nX2xlbmd0aDoKKyAgICBjYXNlIG9wX2dldF9h
cmd1bWVudHNfbGVuZ3RoOgorICAgIGNhc2Ugb3BfdHlwZW9mOgorICAgIGNhc2Ugb3BfaXNfdW5k
ZWZpbmVkOgorICAgIGNhc2Ugb3BfaXNfYm9vbGVhbjoKKyAgICBjYXNlIG9wX2lzX251bWJlcjoK
KyAgICBjYXNlIG9wX2lzX3N0cmluZzoKKyAgICBjYXNlIG9wX2lzX29iamVjdDoKKyAgICBjYXNl
IG9wX2lzX2Z1bmN0aW9uOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3BfbmVn
YXRlOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAgY2FzZSBvcF9lcV9udWxsOgorICAgIGNh
c2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92Ogor
ICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX2NyZWF0ZV90aGlz
OgorICAgIGNhc2Ugb3BfZ2V0X3BuYW1lczoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDogeworICAg
ICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3BfZ2V0
X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6CisgICAgY2FzZSBvcF9p
bjoKKyAgICBjYXNlIG9wX2luc3RhbmNlb2Y6CisgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFu
Y2U6CisgICAgY2FzZSBvcF9hZGQ6CisgICAgY2FzZSBvcF9tdWw6CisgICAgY2FzZSBvcF9kaXY6
CisgICAgY2FzZSBvcF9tb2Q6CisgICAgY2FzZSBvcF9zdWI6CisgICAgY2FzZSBvcF9sc2hpZnQ6
CisgICAgY2FzZSBvcF9yc2hpZnQ6CisgICAgY2FzZSBvcF91cnNoaWZ0OgorICAgIGNhc2Ugb3Bf
Yml0YW5kOgorICAgIGNhc2Ugb3BfYml0eG9yOgorICAgIGNhc2Ugb3BfYml0b3I6CisgICAgY2Fz
ZSBvcF9sZXNzOgorICAgIGNhc2Ugb3BfbGVzc2VxOgorICAgIGNhc2Ugb3BfZ3JlYXRlcjoKKyAg
ICBjYXNlIG9wX2dyZWF0ZXJlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToKKyAgICBjYXNlIG9w
X3N0cmljdGVxOgorICAgIGNhc2Ugb3BfbmVxOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2FzZSBv
cF9kZWxfYnlfdmFsOiB7CisgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwg
b3Bjb2RlSUQsIGluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CisgICAgICAgIGZ1bmN0b3IoY29k
ZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX25leHRfcG5hbWU6IHsKKyAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9u
LCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihj
b2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5z
dHJ1Y3Rpb25bNV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IG9wX2dldF9ieV9wbmFtZTogeworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9y
KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBp
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQpOworICAgICAgICBm
dW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvbls2XS51
Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ugb3Bfc3dpdGNoX3N0
cmluZzoKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgorICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbTog
eworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2Ug
b3BfbmV3X2FycmF5OgorICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CisgICAgICAgIGludCBiYXNlID0g
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBpbnQgY291bnQgPSBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
KyAgICAgICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGJh
c2UgLSBpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX2NvbnN0cnVjdDoK
KyAgICBjYXNlIG9wX2NhbGxfZXZhbDoKKyAgICBjYXNlIG9wX2NhbGw6IHsKKyAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kKTsKKyAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
OworICAgICAgICBpbnQgbGFzdEFyZyA9IHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjp0aGlz
QXJndW1lbnRPZmZzZXQoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IG9wY29kZUlEID09IG9wX2Nv
bnN0cnVjdCA/IDEgOiAwOyBpIDwgYXJnQ291bnQ7IGkrKykKKyAgICAgICAgICAgIGZ1bmN0b3Io
Y29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGxhc3RBcmcgKyBpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czogeworICAgICAg
ICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb24sIG9w
Y29kZUlELCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIoVmlydHVhbFJlZ2lzdGVyKGluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpLm9mZnNldCgpKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxv
Y2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGdW5jdG9yJiBmdW5jdG9y
KQoreworICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IGNvZGVCbG9jay0+dm0oKS0+aW50
ZXJwcmV0ZXI7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CisgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKyAg
ICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgLy8gVGhlc2UgZG9uJ3QgZGVmaW5lIGFueXRoaW5n
LgorICAgIGNhc2Ugb3BfaW5pdF9nbG9iYWxfY29uc3Q6CisgICAgY2FzZSBvcF9pbml0X2dsb2Jh
bF9jb25zdF9ub3A6CisgICAgY2FzZSBvcF9wdXNoX25hbWVfc2NvcGU6CisgICAgY2FzZSBvcF9w
dXNoX3dpdGhfc2NvcGU6CisgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CisgICAgY2FzZSBvcF9w
b3Bfc2NvcGU6CisgICAgY2FzZSBvcF9lbmQ6CisgICAgY2FzZSBvcF9wcm9maWxlX3dpbGxfY2Fs
bDoKKyAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6CisgICAgY2FzZSBvcF90aHJvdzoKKyAg
ICBjYXNlIG9wX3Rocm93X3N0YXRpY19lcnJvcjoKKyAgICBjYXNlIG9wX2RlYnVnOgorICAgIGNh
c2Ugb3BfcmV0OgorICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90aGlzOgorICAgIGNhc2Ugb3Bf
am1wOgorICAgIGNhc2Ugb3BfanRydWU6CisgICAgY2FzZSBvcF9qZmFsc2U6CisgICAgY2FzZSBv
cF9qZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfbnVsbDoKKyAgICBjYXNlIG9wX2puZXFfcHRy
OgorICAgIGNhc2Ugb3Bfamxlc3M6CisgICAgY2FzZSBvcF9qbGVzc2VxOgorICAgIGNhc2Ugb3Bf
amdyZWF0ZXI6CisgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3Bfam5sZXNzOgor
ICAgIGNhc2Ugb3Bfam5sZXNzZXE6CisgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CisgICAgY2FzZSBv
cF9qbmdyZWF0ZXJlcToKKyAgICBjYXNlIG9wX2xvb3BfaGludDoKKyAgICBjYXNlIG9wX3N3aXRj
aF9pbW06CisgICAgY2FzZSBvcF9zd2l0Y2hfY2hhcjoKKyAgICBjYXNlIG9wX3N3aXRjaF9zdHJp
bmc6CisgICAgY2FzZSBvcF9wdXRfYnlfaWQ6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfb3V0X29m
X2xpbmU6CisgICAgY2FzZSBvcF9wdXRfYnlfaWRfcmVwbGFjZToKKyAgICBjYXNlIG9wX3B1dF9i
eV9pZF90cmFuc2l0aW9uOgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0
OgorICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fZGlyZWN0X291dF9vZl9saW5lOgor
ICAgIGNhc2Ugb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsOgorICAgIGNhc2Ugb3BfcHV0
X2J5X2lkX3RyYW5zaXRpb25fbm9ybWFsX291dF9vZl9saW5lOgorICAgIGNhc2Ugb3BfcHV0X2J5
X2lkX2dlbmVyaWM6CisgICAgY2FzZSBvcF9wdXRfZ2V0dGVyX3NldHRlcjoKKyAgICBjYXNlIG9w
X3B1dF9ieV92YWw6CisgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKKyAgICBjYXNlIG9w
X3B1dF9ieV9pbmRleDoKKyAgICBjYXNlIG9wX3RlYXJfb2ZmX2FyZ3VtZW50czoKKyNkZWZpbmUg
TExJTlRfSEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ugb3Bjb2RlOgorICAgICAg
ICBGT1JfRUFDSF9MTElOVF9PUENPREVfRVhURU5TSU9OKExMSU5UX0hFTFBFUl9PUENPREVTKTsK
KyN1bmRlZiBMTElOVF9IRUxQRVJfT1BDT0RFUworICAgICAgICByZXR1cm47CisgICAgLy8gVGhl
c2UgYWxsIGhhdmUgYSBzaW5nbGUgZGVzdGluYXRpb24gZm9yIHRoZSBmaXJzdCBhcmd1bWVudC4K
KyAgICBjYXNlIG9wX25leHRfcG5hbWU6CisgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOgorICAg
IGNhc2Ugb3Bfc3RyY2F0OgorICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKKyAgICBj
YXNlIG9wX3RvX3ByaW1pdGl2ZToKKyAgICBjYXNlIG9wX2NhdGNoOgorICAgIGNhc2Ugb3BfY3Jl
YXRlX3RoaXM6CisgICAgY2FzZSBvcF9uZXdfYXJyYXk6CisgICAgY2FzZSBvcF9uZXdfYXJyYXlf
YnVmZmVyOgorICAgIGNhc2Ugb3BfbmV3X2FycmF5X3dpdGhfc2l6ZToKKyAgICBjYXNlIG9wX25l
d19yZWdleHA6CisgICAgY2FzZSBvcF9uZXdfZnVuYzoKKyAgICBjYXNlIG9wX25ld19jYXB0dXJl
ZF9mdW5jOgorICAgIGNhc2Ugb3BfbmV3X2Z1bmNfZXhwOgorICAgIGNhc2Ugb3BfY2FsbF92YXJh
cmdzOgorICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CisgICAgY2FzZSBvcF9jYWxsOgorICAg
IGNhc2Ugb3BfY2FsbF9ldmFsOgorICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgIGNhc2Ugb3Bf
Z2V0X2J5X2lkOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgorICAgIGNhc2Ug
b3BfZ2V0X2J5X2lkX3NlbGY6CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfcHJvdG86CisgICAgY2Fz
ZSBvcF9nZXRfYnlfaWRfY2hhaW46CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3NlbGY6
CisgICAgY2FzZSBvcF9nZXRfYnlfaWRfZ2V0dGVyX3Byb3RvOgorICAgIGNhc2Ugb3BfZ2V0X2J5
X2lkX2dldHRlcl9jaGFpbjoKKyAgICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fc2VsZjoKKyAg
ICBjYXNlIG9wX2dldF9ieV9pZF9jdXN0b21fcHJvdG86CisgICAgY2FzZSBvcF9nZXRfYnlfaWRf
Y3VzdG9tX2NoYWluOgorICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX2dlbmVyaWM6CisgICAgY2FzZSBv
cF9nZXRfYXJyYXlfbGVuZ3RoOgorICAgIGNhc2Ugb3BfZ2V0X3N0cmluZ19sZW5ndGg6CisgICAg
Y2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CisgICAgY2FzZSBvcF9pbnN0YW5jZW9mOgorICAg
IGNhc2Ugb3BfZ2V0X2J5X3ZhbDoKKyAgICBjYXNlIG9wX2dldF9hcmd1bWVudF9ieV92YWw6Cisg
ICAgY2FzZSBvcF9nZXRfYnlfcG5hbWU6CisgICAgY2FzZSBvcF9nZXRfYXJndW1lbnRzX2xlbmd0
aDoKKyAgICBjYXNlIG9wX3R5cGVvZjoKKyAgICBjYXNlIG9wX2lzX3VuZGVmaW5lZDoKKyAgICBj
YXNlIG9wX2lzX2Jvb2xlYW46CisgICAgY2FzZSBvcF9pc19udW1iZXI6CisgICAgY2FzZSBvcF9p
c19zdHJpbmc6CisgICAgY2FzZSBvcF9pc19vYmplY3Q6CisgICAgY2FzZSBvcF9pc19mdW5jdGlv
bjoKKyAgICBjYXNlIG9wX2luOgorICAgIGNhc2Ugb3BfdG9fbnVtYmVyOgorICAgIGNhc2Ugb3Bf
bmVnYXRlOgorICAgIGNhc2Ugb3BfYWRkOgorICAgIGNhc2Ugb3BfbXVsOgorICAgIGNhc2Ugb3Bf
ZGl2OgorICAgIGNhc2Ugb3BfbW9kOgorICAgIGNhc2Ugb3Bfc3ViOgorICAgIGNhc2Ugb3BfbHNo
aWZ0OgorICAgIGNhc2Ugb3BfcnNoaWZ0OgorICAgIGNhc2Ugb3BfdXJzaGlmdDoKKyAgICBjYXNl
IG9wX2JpdGFuZDoKKyAgICBjYXNlIG9wX2JpdHhvcjoKKyAgICBjYXNlIG9wX2JpdG9yOgorICAg
IGNhc2Ugb3BfaW5jOgorICAgIGNhc2Ugb3BfZGVjOgorICAgIGNhc2Ugb3BfZXE6CisgICAgY2Fz
ZSBvcF9uZXE6CisgICAgY2FzZSBvcF9zdHJpY3RlcToKKyAgICBjYXNlIG9wX25zdHJpY3RlcToK
KyAgICBjYXNlIG9wX2xlc3M6CisgICAgY2FzZSBvcF9sZXNzZXE6CisgICAgY2FzZSBvcF9ncmVh
dGVyOgorICAgIGNhc2Ugb3BfZ3JlYXRlcmVxOgorICAgIGNhc2Ugb3BfbmVxX251bGw6CisgICAg
Y2FzZSBvcF9lcV9udWxsOgorICAgIGNhc2Ugb3Bfbm90OgorICAgIGNhc2Ugb3BfbW92OgorICAg
IGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKKyAgICBjYXNl
IG9wX3RvX3RoaXM6CisgICAgY2FzZSBvcF9nZXRfY2FsbGVlOgorICAgIGNhc2Ugb3BfaW5pdF9s
YXp5X3JlZzoKKyAgICBjYXNlIG9wX2NyZWF0ZV9hY3RpdmF0aW9uOgorICAgIGNhc2Ugb3BfY3Jl
YXRlX2FyZ3VtZW50czoKKyAgICBjYXNlIG9wX2RlbF9ieV9pZDoKKyAgICBjYXNlIG9wX2RlbF9i
eV92YWw6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIG9wX2dldF9wbmFtZXM6IHsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICAgICAgZnVu
Y3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kKTsKKyAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJ
RCwgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIG9wX2VudGVyOiB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jay0+
bV9udW1WYXJzOyBpLS07KQorICAgICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0
aW9uLCBvcGNvZGVJRCwgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCkpOworICAg
ICAgICByZXR1cm47CisgICAgfSB9Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYg
Ly8gQnl0ZWNvZGVVc2VEZWZfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKIAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJh
dG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVVc2VEZWYuaCIKICNpbmNsdWRlICJDYWxsTGlua1N0
YXR1cy5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgIkRGR0NvbW1v
bi5oIgpAQCAtNzU5LDYgKzc2MCwxMyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKFBy
aW50U3RyZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMiLCByZWdpc3Rlck5hbWUo
cjApLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHIxKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6IHsKKyAgICAgICAgICAg
IGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOworICAgICAgICAgICAgaW50IHIxID0gKCsraXQp
LT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJjYXB0dXJlZF9tb3YiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVz
LCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUocjEpLmRhdGEoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX25vdDogewog
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAibm90Iik7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTAsNiArMTIxOCwxNCBAQCB2b2lkIENvZGVCbG9j
azo6ZHVtcEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywg
ZiVkLCAlcyIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCBmMCwgc2hvdWxkQ2hlY2sgPyAiPENo
ZWNrZWQ+IiA6ICI8VW5jaGVja2VkPiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzogeworICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CisgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3Bl
cmFuZDsKKyAgICAgICAgICAgIGludCBzaG91bGRDaGVjayA9ICgrK2l0KS0+dS5vcGVyYW5kOwor
ICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
bmV3X2NhcHR1cmVkX2Z1bmMiKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIiVzLCBmJWQsICVz
IiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIGYwLCBzaG91bGRDaGVjayA/ICI8Q2hlY2tlZD4i
IDogIjxVbmNoZWNrZWQ+Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAg
ICBjYXNlIG9wX25ld19mdW5jX2V4cDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgZjAgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTI0
NjksOCArMjQ4NSw3IEBAIGJvb2wgQ29kZUJsb2NrOjppc0NhcHR1cmVkKFZpcnR1YWxSZWdpc3QK
ICAgICBpZiAoIXN5bWJvbFRhYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJl
dHVybiBvcGVyYW5kLm9mZnNldCgpIDw9IHN5bWJvbFRhYmxlKCktPmNhcHR1cmVTdGFydCgpCi0g
ICAgICAgICYmIG9wZXJhbmQub2Zmc2V0KCkgPiBzeW1ib2xUYWJsZSgpLT5jYXB0dXJlRW5kKCk7
CisgICAgcmV0dXJuIHN5bWJvbFRhYmxlKCktPmlzQ2FwdHVyZWQob3BlcmFuZC5vZmZzZXQoKSk7
CiB9CiAKIGludCBDb2RlQmxvY2s6OmZyYW1lUG9pbnRlck9mZnNldFRvR2V0QWN0aXZhdGlvblJl
Z2lzdGVycyhpbnQgbWFjaGluZUNhcHR1cmVTdGFydCkKQEAgLTM0MjcsNiArMzQ0Miw0OSBAQCBT
dHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwog
fQogCituYW1lc3BhY2UgeworCitzdHJ1Y3QgVmVyaWZ5Q2FwdHVyZWREZWYgeworICAgIHZvaWQg
b3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBPcGNvZGVJRCBvcGNvZGVJRCwgaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCA9IGluc3RydWN0aW9uIC0gY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aXNDb25zdGFudFJl
Z2lzdGVySW5kZXgob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGNvZGVCbG9jay0+YmVnaW5WYWxp
ZGF0aW9uRGlkRmFpbCgpOworICAgICAgICAgICAgZGF0YUxvZygiICAgIEF0IGJjIyIsIGJ5dGVj
b2RlT2Zmc2V0LCAiIGVuY291bnRlcmVkIGEgZGVmaW5pdGlvbiBvZiBhIGNvbnN0YW50LlxuIik7
CisgICAgICAgICAgICBjb2RlQmxvY2stPmVuZFZhbGlkYXRpb25EaWRGYWlsKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7Cisg
ICAgICAgIGNhc2Ugb3BfZW50ZXI6CisgICAgICAgIGNhc2Ugb3BfY2FwdHVyZWRfbW92OgorICAg
ICAgICBjYXNlIG9wX2luaXRfbGF6eV9yZWc6CisgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2FyZ3Vt
ZW50czoKKyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZyhvcGVyYW5kKTsKKyAg
ICAgICAgaWYgKCF2aXJ0dWFsUmVnLmlzTG9jYWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGlmIChjb2RlQmxvY2stPmNhcHR1cmVDb3VudCgpCisgICAgICAgICAg
ICAmJiBvcGVyYW5kIDw9IGNvZGVCbG9jay0+Y2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNv
ZGVCbG9jay0+Y2FwdHVyZUVuZCgpKSB7CisgICAgICAgICAgICBjb2RlQmxvY2stPmJlZ2luVmFs
aWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBBdCBiYyMiLCBieXRl
Y29kZU9mZnNldCwgIiBlbmNvdW50ZXJlZCBpbnZhbGlkIGFzc2lnbm1lbnQgdG8gY2FwdHVyZWQg
dmFyaWFibGUgbG9jIiwgdmlydHVhbFJlZy50b0xvY2FsKCksICIuXG4iKTsKKyAgICAgICAgICAg
IGNvZGVCbG9jay0+ZW5kVmFsaWRhdGlvbkRpZEZhaWwoKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK307CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAg
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJl
Y3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rwcmlu
dC4KQEAgLTM0NjQsNiArMzUyMiwxNiBAQCB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGZvciAodW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQgPSAwOyBieXRlY29kZU9mZnNldCA8IGluc3RydWN0aW9ucygpLnNpemUoKTsp
IHsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IGluc3RydWN0aW9u
cygpLmJlZ2luKCkgKyBieXRlY29kZU9mZnNldDsKKyAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9w
Y29kZSk7CisgICAgICAgIAorICAgICAgICBWZXJpZnlDYXB0dXJlZERlZiB2ZXJpZnlDYXB0dXJl
ZERlZjsKKyAgICAgICAgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29k
ZU9mZnNldCwgdmVyaWZ5Q2FwdHVyZWREZWYpOworICAgICAgICAKKyAgICAgICAgYnl0ZWNvZGVP
ZmZzZXQgKz0gb3Bjb2RlTGVuZ3RoKG9wY29kZUlEKTsKKyAgICB9CiB9CiAKIHZvaWQgQ29kZUJs
b2NrOjpiZWdpblZhbGlkYXRpb25EaWRGYWlsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcg
KzkzMCwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5NYXJr
ZWQ7IC8vIEluaXRpYWxpemVkIGFuZCB1c2VkIG9uIGV2ZXJ5IEdDLgogICAgIAogICAgIGJvb2wg
bV9kaWRGYWlsRlRMQ29tcGlsYXRpb247Ci0gICAgCisKKyAgICAvLyBJbnRlcm5hbCBtZXRob2Rz
IGZvciB1c2UgYnkgdmFsaWRhdGlvbiBjb2RlLiBJdCB3b3VsZCBiZSBwcml2YXRlIGlmIGl0IHdh
c24ndAorICAgIC8vIGZvciB0aGUgZmFjdCB0aGF0IHdlIHVzZSBpdCBmcm9tIGFub255bW91cyBu
YW1lc3BhY2VzLgorICAgIHZvaWQgYmVnaW5WYWxpZGF0aW9uRGlkRmFpbCgpOworICAgIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBlbmRWYWxpZGF0aW9uRGlkRmFpbCgpOworCiBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZpc2l0b3ImKSBP
VkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBPVkVS
UklERTsKQEAgLTEwMzEsOSArMTAzNiw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVE
YXRhID0gYWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBiZWdp
blZhbGlkYXRpb25EaWRGYWlsKCk7Ci0gICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGVu
ZFZhbGlkYXRpb25EaWRGYWlsKCk7Ci0KICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRT
dHViSW50ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CiAgICAgdm9p
ZCByZXNldFN0dWJEdXJpbmdHQ0ludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHVi
SW5mbyYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2
aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1h
Y3JvKG9wX25ld19hcnJheV9idWZmZXIsIDUpIFwKICAgICBtYWNybyhvcF9uZXdfcmVnZXhwLCAz
KSBcCiAgICAgbWFjcm8ob3BfbW92LCAzKSBcCisgICAgbWFjcm8ob3BfY2FwdHVyZWRfbW92LCAz
KSBcCiAgICAgXAogICAgIG1hY3JvKG9wX25vdCwgMykgXAogICAgIG1hY3JvKG9wX2VxLCA0KSBc
CkBAIC0xNTMsNiArMTU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ob3Bfc3dpdGNo
X3N0cmluZywgNCkgXAogICAgIFwKICAgICBtYWNybyhvcF9uZXdfZnVuYywgNCkgXAorICAgIG1h
Y3JvKG9wX25ld19jYXB0dXJlZF9mdW5jLCA0KSBcCiAgICAgbWFjcm8ob3BfbmV3X2Z1bmNfZXhw
LCAzKSBcCiAgICAgbWFjcm8ob3BfY2FsbCwgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBc
CiAgICAgbWFjcm8ob3BfY2FsbF9ldmFsLCA4KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzA3LDcgKzMwNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fYWN0aXZh
dGlvblJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgbV9mdW5jdGlvbnMuYWRkKGlkZW50LmltcGwoKSk7Ci0gICAgICAgICAgICAgICAgZW1pdE5l
d0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBmdW5jdGlvbik7CisgICAgICAgICAgICAg
ICAgZW1pdE5ld0Z1bmN0aW9uKGFkZFZhcihpZGVudCwgZmFsc2UpLCBJc0NhcHR1cmVkLCBmdW5j
dGlvbik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCB2YXJTdGFjay5zaXplKCk7ICsraSkgewpAQCAtMzM1LDcgKzMzNSw3IEBAIEJ5dGVj
b2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgICAgIC8vIERvbid0
IGxhemlseSBjcmVhdGUgZnVuY3Rpb25zIHRoYXQgb3ZlcnJpZGUgdGhlIG5hbWUgJ2FyZ3VtZW50
cycKICAgICAgICAgICAgIC8vIGFzIHRoaXMgd291bGQgY29tcGxpY2F0ZSBsYXp5IGluc3RhbnRp
YXRpb24gb2YgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgICAgICAgIGlmICghY2FuTGF6aWx5Q3Jl
YXRlRnVuY3Rpb25zIHx8IGlkZW50ID09IHByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMpCi0gICAg
ICAgICAgICAgICAgZW1pdE5ld0Z1bmN0aW9uKHJlZy5nZXQoKSwgZnVuY3Rpb24pOworICAgICAg
ICAgICAgICAgIGVtaXROZXdGdW5jdGlvbihyZWcuZ2V0KCksIE5vdENhcHR1cmVkLCBmdW5jdGlv
bik7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBlbWl0SW5pdExhenlSZWdp
c3RlcihyZWcuZ2V0KCkpOwogICAgICAgICAgICAgICAgIG1fbGF6eUZ1bmN0aW9ucy5zZXQocmVn
LT52aXJ0dWFsUmVnaXN0ZXIoKS50b0xvY2FsKCksIGZ1bmN0aW9uKTsKQEAgLTQ3Miw3ICs0NzIs
NyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6cmVzb2x2ZUNhCiAgICAgICAgIHJl
dHVybiAmbV9jYWxsZWVSZWdpc3RlcjsKIAogICAgIC8vIE1vdmUgdGhlIGNhbGxlZSBpbnRvIHRo
ZSBjYXB0dXJlZCBzZWN0aW9uIG9mIHRoZSBzdGFjay4KLSAgICByZXR1cm4gZW1pdE1vdmUoYWRk
VmFyKCksICZtX2NhbGxlZVJlZ2lzdGVyKTsKKyAgICByZXR1cm4gZW1pdE1vdmUoYWRkVmFyKCks
IElzQ2FwdHVyZWQsICZtX2NhbGxlZVJlZ2lzdGVyKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6YWRkQ2FsbGVlKEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uQm9keU5vZGUsIFJlZ2lz
dGVySUQqIGNhbGxlZVJlZ2lzdGVyKQpAQCAtOTk3LDE2ICs5OTcsMjEgQEAgdW5zaWduZWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmFkZFJlZ0V4cChSZQogICAgIHJldHVybiBtX2NvZGVCbG9jay0+YWRk
UmVnRXhwKHIpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE1vdmUo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCitSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdE1vdmUoUmVnaXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSBjYXB0dXJlTW9k
ZSwgUmVnaXN0ZXJJRCogc3JjKQogewogICAgIG1fc3RhdGljUHJvcGVydHlBbmFseXplci5tb3Yo
ZHN0LT5pbmRleCgpLCBzcmMtPmluZGV4KCkpOwogCi0gICAgZW1pdE9wY29kZShvcF9tb3YpOwor
ICAgIGVtaXRPcGNvZGUoY2FwdHVyZU1vZGUgPT0gSXNDYXB0dXJlZCA/IG9wX2NhcHR1cmVkX21v
diA6IG9wX21vdik7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CiAgICAgcmV0dXJuIGRzdDsK
IH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRNb3ZlKFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjKQoreworICAgIHJldHVybiBlbWl0TW92ZShkc3QsIGNhcHR1
cmVNb2RlKGRzdC0+aW5kZXgoKSksIHNyYyk7Cit9CisKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0VW5hcnlPcChPcGNvZGVJRCBvcGNvZGVJRCwgUmVnaXN0ZXJJRCogZHN0LCBS
ZWdpc3RlcklEKiBzcmMpCiB7CiAgICAgZW1pdE9wY29kZShvcGNvZGVJRCk7CkBAIC0xMTU3LDEx
ICsxMTYyLDE2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TG9hZEcKICAg
ICByZXR1cm4gbV9nbG9iYWxPYmplY3RSZWdpc3RlcjsKIH0KIAorYm9vbCBCeXRlY29kZUdlbmVy
YXRvcjo6aXNDYXB0dXJlZChpbnQgb3BlcmFuZCkKK3sKKyAgICByZXR1cm4gbV9zeW1ib2xUYWJs
ZSAmJiBtX3N5bWJvbFRhYmxlLT5pc0NhcHR1cmVkKG9wZXJhbmQpOworfQorCiBMb2NhbCBCeXRl
Y29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHkpCiB7CiAgICAg
aWYgKHByb3BlcnR5ID09IHByb3BlcnR5TmFtZXMoKS50aGlzSWRlbnRpZmllcikKLSAgICAgICAg
cmV0dXJuIExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSk7Ci0KKyAgICAgICAgcmV0dXJu
IExvY2FsKHRoaXNSZWdpc3RlcigpLCBSZWFkT25seSwgTm90Q2FwdHVyZWQpOworICAgIAogICAg
IGlmIChwcm9wZXJ0eSA9PSBwcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKQogICAgICAgICBjcmVh
dGVBcmd1bWVudHNJZk5lY2Vzc2FyeSgpOwogCkBAIC0xMTczLDcgKzExODMsNyBAQCBMb2NhbCBC
eXRlY29kZUdlbmVyYXRvcjo6bG9jYWwoY29uc3QgSWRlCiAgICAgICAgIHJldHVybiBMb2NhbCgp
OwogCiAgICAgUmVnaXN0ZXJJRCogbG9jYWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2Fy
eSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0SW5kZXgoKSkpOwotICAgIHJldHVybiBMb2NhbChsb2Nh
bCwgZW50cnkuZ2V0QXR0cmlidXRlcygpKTsKKyAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5
LmdldEF0dHJpYnV0ZXMoKSwgY2FwdHVyZU1vZGUobG9jYWwtPmluZGV4KCkpKTsKIH0KIAogTG9j
YWwgQnl0ZWNvZGVHZW5lcmF0b3I6OmNvbnN0TG9jYWwoY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHkpCkBAIC0xMTg2LDcgKzExOTYsNyBAQCBMb2NhbCBCeXRlY29kZUdlbmVyYXRvcjo6Y29uc3RM
b2NhbChjb25zCiAgICAgICAgIHJldHVybiBMb2NhbCgpOwogCiAgICAgUmVnaXN0ZXJJRCogbG9j
YWwgPSBjcmVhdGVMYXp5UmVnaXN0ZXJJZk5lY2Vzc2FyeSgmcmVnaXN0ZXJGb3IoZW50cnkuZ2V0
SW5kZXgoKSkpOwotICAgIHJldHVybiBMb2NhbChsb2NhbCwgZW50cnkuZ2V0QXR0cmlidXRlcygp
KTsKKyAgICByZXR1cm4gTG9jYWwobG9jYWwsIGVudHJ5LmdldEF0dHJpYnV0ZXMoKSwgY2FwdHVy
ZU1vZGUobG9jYWwtPmluZGV4KCkpKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dENoZWNrSGFzSW5zdGFuY2UoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiB2YWx1ZSwgUmVn
aXN0ZXJJRCogYmFzZSwgTGFiZWwqIHRhcmdldCkKQEAgLTE1NDcsOSArMTU1Nyw5IEBAIFJlZ2lz
dGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0TmV3QXIKICAgICByZXR1cm4gZHN0OwogfQog
Ci1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVy
SUQqIGRzdCwgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rpb24pCitSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdE5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgQ2FwdHVyZU1vZGUg
Y2FwdHVyZU1vZGUsIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQogewotICAgIHJldHVybiBl
bWl0TmV3RnVuY3Rpb25JbnRlcm5hbChkc3QsIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvbkRlY2wo
bWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSksIGZhbHNlKTsKKyAgICByZXR1cm4gZW1pdE5ld0Z1bmN0
aW9uSW50ZXJuYWwoZHN0LCBjYXB0dXJlTW9kZSwgbV9jb2RlQmxvY2stPmFkZEZ1bmN0aW9uRGVj
bChtYWtlRnVuY3Rpb24oZnVuY3Rpb24pKSwgZmFsc2UpOwogfQogCiBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdExhenlOZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1bmN0
aW9uQm9keU5vZGUqIGZ1bmN0aW9uKQpAQCAtMTU1NywxMyArMTU2NywxMyBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdExhenlOCiAgICAgRnVuY3Rpb25PZmZzZXRNYXA6OkFk
ZFJlc3VsdCBwdHIgPSBtX2Z1bmN0aW9uT2Zmc2V0cy5hZGQoZnVuY3Rpb24sIDApOwogICAgIGlm
IChwdHIuaXNOZXdFbnRyeSkKICAgICAgICAgcHRyLml0ZXJhdG9yLT52YWx1ZSA9IG1fY29kZUJs
b2NrLT5hZGRGdW5jdGlvbkRlY2wobWFrZUZ1bmN0aW9uKGZ1bmN0aW9uKSk7Ci0gICAgcmV0dXJu
IGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgcHRyLml0ZXJhdG9yLT52YWx1ZSwgdHJ1ZSk7
CisgICAgcmV0dXJuIGVtaXROZXdGdW5jdGlvbkludGVybmFsKGRzdCwgTm90Q2FwdHVyZWQsIHB0
ci5pdGVyYXRvci0+dmFsdWUsIHRydWUpOwogfQogCi1SZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVnaXN0ZXJJRCogZHN0LCB1bnNpZ25lZCBp
bmRleCwgYm9vbCBkb051bGxDaGVjaykKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0TmV3RnVuY3Rpb25JbnRlcm5hbChSZWdpc3RlcklEKiBkc3QsIENhcHR1cmVNb2RlIGNhcHR1
cmVNb2RlLCB1bnNpZ25lZCBpbmRleCwgYm9vbCBkb051bGxDaGVjaykKIHsKICAgICBjcmVhdGVB
Y3RpdmF0aW9uSWZOZWNlc3NhcnkoKTsKLSAgICBlbWl0T3Bjb2RlKG9wX25ld19mdW5jKTsKKyAg
ICBlbWl0T3Bjb2RlKGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQgPyBvcF9uZXdfY2FwdHVyZWRf
ZnVuYyA6IG9wX25ld19mdW5jKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaW5kZXgpOwogICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChkb051bGxDaGVjayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNTk4
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsMTEgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFRyeURhdGEqIHRyeURhdGE7CiAgICAgfTsKIAorICAgIGVudW0gQ2FwdHVyZU1v
ZGUgeworICAgICAgICBOb3RDYXB0dXJlZCwKKyAgICAgICAgSXNDYXB0dXJlZAorICAgIH07CisK
ICAgICBjbGFzcyBMb2NhbCB7CiAgICAgcHVibGljOgogICAgICAgICBMb2NhbCgpCkBAIC0xMjIs
OSArMTI3LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAg
ICAgICBMb2NhbChSZWdpc3RlcklEKiBsb2NhbCwgdW5zaWduZWQgYXR0cmlidXRlcykKKyAgICAg
ICAgTG9jYWwoUmVnaXN0ZXJJRCogbG9jYWwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIENhcHR1cmVN
b2RlIGNhcHR1cmVNb2RlKQogICAgICAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQogICAgICAgICAg
ICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKKyAgICAgICAgICAgICwgbV9pc0NhcHR1cmVk
KGNhcHR1cmVNb2RlID09IElzQ2FwdHVyZWQpCiAgICAgICAgIHsKICAgICAgICAgfQogCkBAIC0x
MzMsMTAgKzEzOSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZ2V0
KCkgeyByZXR1cm4gbV9sb2NhbDsgfQogCiAgICAgICAgIGJvb2wgaXNSZWFkT25seSgpIHsgcmV0
dXJuIG1fYXR0cmlidXRlcyAmIFJlYWRPbmx5OyB9CisgICAgICAgIAorICAgICAgICBib29sIGlz
Q2FwdHVyZWQoKSB7IHJldHVybiBtX2lzQ2FwdHVyZWQ7IH0KKyAgICAgICAgQ2FwdHVyZU1vZGUg
Y2FwdHVyZU1vZGUoKSB7IHJldHVybiBpc0NhcHR1cmVkKCkgPyBJc0NhcHR1cmVkIDogTm90Q2Fw
dHVyZWQ7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVySUQqIG1fbG9jYWw7CiAg
ICAgICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlczsKKyAgICAgICAgYm9vbCBtX2lzQ2FwdHVyZWQ7
CiAgICAgfTsKIAogICAgIHN0cnVjdCBUcnlSYW5nZSB7CkBAIC0xNzEsNiArMTgxLDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgd2lsbFJlc29sdmVUb0FyZ3VtZW50cyhjb25zdCBJ
ZGVudGlmaWVyJik7CiAgICAgICAgIFJlZ2lzdGVySUQqIHVuY2hlY2tlZFJlZ2lzdGVyRm9yQXJn
dW1lbnRzKCk7CiAKKyAgICAgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKTsKKyAgICAg
ICAgQ2FwdHVyZU1vZGUgY2FwdHVyZU1vZGUoaW50IG9wZXJhbmQpIHsgcmV0dXJuIGlzQ2FwdHVy
ZWQob3BlcmFuZCkgPyBJc0NhcHR1cmVkIDogTm90Q2FwdHVyZWQ7IH0KKyAgICAgICAgCiAgICAg
ICAgIExvY2FsIGxvY2FsKGNvbnN0IElkZW50aWZpZXImKTsKICAgICAgICAgTG9jYWwgY29uc3RM
b2NhbChjb25zdCBJZGVudGlmaWVyJik7CiAKQEAgLTIzMSw2ICsyNDQsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgLy8gTm9kZTo6ZW1pdENvZGUgYXNzdW1lcyB0
aGF0IGRzdCwgaWYgcHJvdmlkZWQsIGlzIGVpdGhlciBhIGxvY2FsIG9yIGEgcmVmZXJlbmNlZCB0
ZW1wb3JhcnkuCiAgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3Vs
dCgpIHx8ICFkc3QtPmlzVGVtcG9yYXJ5KCkgfHwgZHN0LT5yZWZDb3VudCgpKTsKKyAgICAgICAg
ICAgIC8vIFNob3VsZCBuZXZlciBzdG9yZSBkaXJlY3RseSBpbnRvIGEgY2FwdHVyZWQgdmFyaWFi
bGUuCisgICAgICAgICAgICBBU1NFUlQoIWRzdCB8fCBkc3QgPT0gaWdub3JlZFJlc3VsdCgpIHx8
ICFpc0NhcHR1cmVkKGRzdC0+aW5kZXgoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ZtLT5pc1Nh
ZmVUb1JlY3Vyc2UoKSkgewogICAgICAgICAgICAgICAgIGVtaXRUaHJvd0V4cHJlc3Npb25Ub29E
ZWVwRXhjZXB0aW9uKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjQ3LDYgKzI2Miw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICAvLyBOb2RlOjplbWl0
Q29kZSBhc3N1bWVzIHRoYXQgZHN0LCBpZiBwcm92aWRlZCwgaXMgZWl0aGVyIGEgbG9jYWwgb3Ig
YSByZWZlcmVuY2VkIHRlbXBvcmFyeS4KICAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9
PSBpZ25vcmVkUmVzdWx0KCkgfHwgIWRzdC0+aXNUZW1wb3JhcnkoKSB8fCBkc3QtPnJlZkNvdW50
KCkpOworICAgICAgICAgICAgLy8gU2hvdWxkIG5ldmVyIHN0b3JlIGRpcmVjdGx5IGludG8gYSBj
YXB0dXJlZCB2YXJpYWJsZS4KKyAgICAgICAgICAgIEFTU0VSVCghZHN0IHx8IGRzdCA9PSBpZ25v
cmVkUmVzdWx0KCkgfHwgIWlzQ2FwdHVyZWQoZHN0LT5pbmRleCgpKSk7CiAgICAgICAgICAgICBp
ZiAoIW1fdm0tPmlzU2FmZVRvUmVjdXJzZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBlbWl0
VGhyb3dFeHByZXNzaW9uVG9vRGVlcEV4Y2VwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJuIG4t
PmVtaXRCeXRlY29kZSgqdGhpcywgZHN0KTsKQEAgLTMyOSwxMiArMzQ2LDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3T2JqZWN0KFJlZ2lzdGVySUQqIGRz
dCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdBcnJheShSZWdpc3RlcklEKiBkc3QsIEVs
ZW1lbnROb2RlKiwgdW5zaWduZWQgbGVuZ3RoKTsgLy8gc3RvcHMgYXQgZmlyc3QgZWxpc2lvbgog
Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlvbihSZWdpc3RlcklEKiBkc3QsIEZ1
bmN0aW9uQm9keU5vZGUqIGJvZHkpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV3RnVuY3Rp
b24oUmVnaXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSwgRnVuY3Rpb25Cb2R5Tm9kZSopOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0TGF6eU5ld0Z1bmN0aW9uKFJlZ2lzdGVySUQqIGRzdCwgRnVu
Y3Rpb25Cb2R5Tm9kZSogYm9keSk7Ci0gICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXdGdW5jdGlv
bkludGVybmFsKFJlZ2lzdGVySUQqIGRzdCwgdW5zaWduZWQgaW5kZXgsIGJvb2wgc2hvdWxkTnVs
bENoZWNrKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uSW50ZXJuYWwoUmVn
aXN0ZXJJRCogZHN0LCBDYXB0dXJlTW9kZSwgdW5zaWduZWQgaW5kZXgsIGJvb2wgc2hvdWxkTnVs
bENoZWNrKTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5ld0Z1bmN0aW9uRXhwcmVzc2lvbihS
ZWdpc3RlcklEKiBkc3QsIEZ1bmNFeHByTm9kZSogZnVuYyk7CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXROZXdSZWdFeHAoUmVnaXN0ZXJJRCogZHN0LCBSZWdFeHAqKTsKIAorICAgICAgICBSZWdp
c3RlcklEKiBlbWl0TW92ZShSZWdpc3RlcklEKiBkc3QsIENhcHR1cmVNb2RlLCBSZWdpc3RlcklE
KiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TW92ZShSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIHNyYyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvTnVtYmVyKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcChvcF90b19u
dW1iZXIsIGRzdCwgc3JjKTsgfQpAQCAtNDIwLDkgKzQzOCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB2b2lkIHB1c2hGaW5hbGx5Q29udGV4dChTdGF0ZW1lbnROb2RlKiBmaW5hbGx5Qmxv
Y2spOwogICAgICAgICB2b2lkIHBvcEZpbmFsbHlDb250ZXh0KCk7CiAKLSAgICAgICAgdm9pZCBw
dXNoT3B0aW1pc2VkRm9ySW4oUmVnaXN0ZXJJRCogZXhwZWN0ZWRCYXNlLCBSZWdpc3RlcklEKiBp
dGVyLCBSZWdpc3RlcklEKiBpbmRleCwgUmVnaXN0ZXJJRCogcHJvcGVydHlSZWdpc3RlcikKKyAg
ICAgICAgdm9pZCBwdXNoT3B0aW1pc2VkRm9ySW4oUmVnaXN0ZXJJRCogZXhwZWN0ZWRTdWJzY3Jp
cHQsIFJlZ2lzdGVySUQqIGl0ZXIsIFJlZ2lzdGVySUQqIGluZGV4LCBSZWdpc3RlcklEKiBwcm9w
ZXJ0eVJlZ2lzdGVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBGb3JJbkNvbnRleHQgY29udGV4
dCA9IHsgZXhwZWN0ZWRCYXNlLCBpdGVyLCBpbmRleCwgcHJvcGVydHlSZWdpc3RlciB9OworICAg
ICAgICAgICAgRm9ySW5Db250ZXh0IGNvbnRleHQgPSB7IGV4cGVjdGVkU3Vic2NyaXB0LCBpdGVy
LCBpbmRleCwgcHJvcGVydHlSZWdpc3RlciB9OwogICAgICAgICAgICAgbV9mb3JJbkNvbnRleHRT
dGFjay5hcHBlbmQoY29udGV4dCk7CiAgICAgICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24g
MTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NzMsMTEgKzY3MywyMiBAQCBSZWdpc3RlcklEKiBQ
b3N0Zml4Tm9kZTo6ZW1pdFJlc29sdmUoQnl0CiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQg
PSByZXNvbHZlLT5pZGVudGlmaWVyKCk7CiAKICAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0
b3IubG9jYWwoaWRlbnQpKSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsUmVnID0gbG9jYWwu
Z2V0KCk7CiAgICAgICAgIGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgbG9j
YWwgPSBMb2NhbChnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBsb2NhbC5nZXQoKSksIDApOworICAgICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3Iu
ZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbFJlZyk7CiAgICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIGVtaXRQb3N0SW5jT3JEZWMoZ2VuZXJhdG9yLCBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQoKSwgbV9vcGVyYXRvcik7CisgICAg
ICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICAgICAg
ICAgIEFTU0VSVChkc3QgIT0gbG9jYWxSZWcpOworICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IHRlbXBEc3RTcmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdFRvTnVtYmVyKHRlbXBEc3QuZ2V0KCksIGxvY2FsUmVnKTsKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0TW92ZSh0ZW1wRHN0U3JjLmdldCgpLCBsb2NhbFJlZyk7CisgICAg
ICAgICAgICBlbWl0SW5jT3JEZWMoZ2VuZXJhdG9yLCB0ZW1wRHN0U3JjLmdldCgpLCBtX29wZXJh
dG9yKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbFJlZywgdGVtcERzdFNy
Yy5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm4gdGVtcERzdC5nZXQoKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gZW1pdFBvc3RJbmNPckRlYyhnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCksIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKICAgICB9CiAKICAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CkBAIC04MzgsMTIgKzg0OSwyMCBAQCBSZWdpc3RlcklEKiBQcmVmaXhOb2RlOjplbWl0
UmVzb2x2ZShCeXRlCiAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSByZXNvbHZlLT5pZGVu
dGlmaWVyKCk7CiAKICAgICBpZiAoTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3IubG9jYWwoaWRlbnQp
KSB7CisgICAgICAgIFJlZ2lzdGVySUQqIGxvY2FsUmVnID0gbG9jYWwuZ2V0KCk7CiAgICAgICAg
IGlmIChsb2NhbC5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0UmVh
ZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwotICAgICAgICAgICAgbG9jYWwgPSBMb2NhbChnZW5l
cmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbC5nZXQo
KSksIDApOworICAgICAgICAgICAgbG9jYWxSZWcgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbFJlZyk7CiAgICAgICAgIH0KLSAgICAgICAg
ZW1pdEluY09yRGVjKGdlbmVyYXRvciwgbG9jYWwuZ2V0KCksIG1fb3BlcmF0b3IpOwotICAgICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBsb2NhbC5n
ZXQoKSk7CisgICAgICAgIGlmIChsb2NhbC5pc0NhcHR1cmVkKCkpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiB0ZW1wRHN0ID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKHRlbXBEc3QuZ2V0KCksIGxvY2FsUmVn
KTsKKyAgICAgICAgICAgIGVtaXRJbmNPckRlYyhnZW5lcmF0b3IsIHRlbXBEc3QuZ2V0KCksIG1f
b3BlcmF0b3IpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGxvY2FsUmVnLCB0ZW1w
RHN0LmdldCgpKTsKKyAgICAgICAgICAgIHJldHVybiBnZW5lcmF0b3IubW92ZVRvRGVzdGluYXRp
b25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGVtaXRJ
bmNPckRlYyhnZW5lcmF0b3IsIGxvY2FsUmVnLCBtX29wZXJhdG9yKTsKKyAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgbG9jYWxSZWcpOwogICAg
IH0KIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFy
dCgpLCBkaXZvdEVuZCgpKTsKQEAgLTEzMjcsNyArMTM0Niw4IEBAIFJlZ2lzdGVySUQqIFJlYWRN
b2RpZnlSZXNvbHZlTm9kZTo6ZW1pdEIKICAgICAgICAgICAgIHJldHVybiBlbWl0UmVhZE1vZGlm
eUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBs
b2NhbC5nZXQoKSwgbV9yaWdodCwgbV9vcGVyYXRvciwgT3BlcmFuZFR5cGVzKFJlc3VsdFR5cGU6
OnVua25vd25UeXBlKCksIG1fcmlnaHQtPnJlc3VsdERlc2NyaXB0b3IoKSkpOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBpZiAoZ2VuZXJhdG9yLmxlZnRIYW5kU2lkZU5lZWRzQ29weSht
X3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fcmlnaHQtPmlzUHVyZShnZW5lcmF0b3IpKSkgeworICAg
ICAgICBpZiAobG9jYWwuaXNDYXB0dXJlZCgpCisgICAgICAgICAgICB8fCBnZW5lcmF0b3IubGVm
dEhhbmRTaWRlTmVlZHNDb3B5KG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+aXNQdXJl
KGdlbmVyYXRvcikpKSB7CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KHJlc3VsdC5nZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgZW1pdFJlYWRNb2RpZnlB
c3NpZ25tZW50KGdlbmVyYXRvciwgcmVzdWx0LmdldCgpLCByZXN1bHQuZ2V0KCksIG1fcmlnaHQs
IG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duVHlwZSgpLCBtX3Jp
Z2h0LT5yZXN1bHREZXNjcmlwdG9yKCkpKTsKQEAgLTEzNTYsNiArMTM3NiwxMiBAQCBSZWdpc3Rl
cklEKiBBc3NpZ25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjCiAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKICAgICAgICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdE5vZGUoZHN0LCBtX3JpZ2h0KTsKICAgICAgICAgfQorICAgICAgICBpZiAobG9j
YWwuaXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdGVtcERz
dCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX3JpZ2h0KTsKKyAgICAgICAgICAgIGdlbmVyYXRv
ci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQoKSk7CisgICAgICAgICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCB0ZW1wRHN0LmdldCgp
KTsKKyAgICAgICAgfQogICAgICAgICBSZWdpc3RlcklEKiByZXN1bHQgPSBnZW5lcmF0b3IuZW1p
dE5vZGUobG9jYWwuZ2V0KCksIG1fcmlnaHQpOwogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCByZXN1bHQpOwogICAgIH0KQEAgLTE0NTEsMTEg
KzE0NzcsMTcgQEAgUmVnaXN0ZXJJRCogQ29tbWFOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZQogUmVn
aXN0ZXJJRCogQ29uc3REZWNsTm9kZTo6ZW1pdENvZGVTaW5nbGUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvcikKIHsKICAgICAvLyBGSVhNRTogVGhpcyBjb2RlIGRvZXMgbm90IG1hdGNoIHRo
ZSBiZWhhdmlvciBvZiBjb25zdCBpbiBGaXJlZm94LgotICAgIGlmIChSZWdpc3RlcklEKiBsb2Nh
bCA9IGdlbmVyYXRvci5jb25zdExvY2FsKG1faWRlbnQpLmdldCgpKSB7CisgICAgaWYgKExvY2Fs
IGxvY2FsID0gZ2VuZXJhdG9yLmNvbnN0TG9jYWwobV9pZGVudCkpIHsKICAgICAgICAgaWYgKCFt
X2luaXQpCi0gICAgICAgICAgICByZXR1cm4gbG9jYWw7CisgICAgICAgICAgICByZXR1cm4gbG9j
YWwuZ2V0KCk7CiAKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Tm9kZShsb2NhbCwgbV9p
bml0KTsKKyAgICAgICAgaWYgKGxvY2FsLmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHRlbXBEc3QgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
ICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUodGVtcERzdC5nZXQoKSwgbV9pbml0KTsKKyAgICAg
ICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdE1vdmUobG9jYWwuZ2V0KCksIHRlbXBEc3QuZ2V0
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRO
b2RlKGxvY2FsLmdldCgpLCBtX2luaXQpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IG1faW5pdCA/IGdlbmVyYXRvci5lbWl0Tm9kZShtX2luaXQpIDogZ2VuZXJhdG9y
LmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOwpAQCAtMTczMCw4ICsxNzYyLDcgQEAgdm9pZCBG
b3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogICAgIGlmIChtX2xleHByLT5pc1Jl
c29sdmVOb2RlKCkpIHsKICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRlbnQgPSBzdGF0aWNf
Y2FzdDxSZXNvbHZlTm9kZSo+KG1fbGV4cHIpLT5pZGVudGlmaWVyKCk7CiAgICAgICAgIExvY2Fs
IGxvY2FsID0gZ2VuZXJhdG9yLmxvY2FsKGlkZW50KTsKLSAgICAgICAgcHJvcGVydHlOYW1lID0g
bG9jYWwuZ2V0KCk7Ci0gICAgICAgIGlmICghcHJvcGVydHlOYW1lKSB7CisgICAgICAgIGlmICgh
bG9jYWwuZ2V0KCkpIHsKICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm90ZWN0ID0gcHJv
cGVydHlOYW1lOwogICAgICAgICAgICAgaWYgKGdlbmVyYXRvci5pc1N0cmljdE1vZGUoKSkKQEAg
LTE3NDAsOCArMTc3MSwxMCBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2Rl
R2VuCiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIGRp
dm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdFB1dFRv
U2NvcGUoc2NvcGUsIGlkZW50LCBwcm9wZXJ0eU5hbWUsIGdlbmVyYXRvci5pc1N0cmljdE1vZGUo
KSA/IFRocm93SWZOb3RGb3VuZCA6IERvTm90VGhyb3dJZk5vdEZvdW5kKTsKICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGV4cGVjdGVkU3Vic2NyaXB0ID0gZ2VuZXJhdG9yLmVtaXRNb3Zl
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgICAgIGdl
bmVyYXRvci5wdXNoT3B0aW1pc2VkRm9ySW4oZXhwZWN0ZWRTdWJzY3JpcHQuZ2V0KCksIGl0ZXIu
Z2V0KCksIGkuZ2V0KCksIHByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICBleHBlY3RlZFN1YnNj
cmlwdCA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgICAgIHByb3BlcnR5TmFt
ZSA9IGV4cGVjdGVkU3Vic2NyaXB0LmdldCgpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRN
b3ZlKGxvY2FsLmdldCgpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgZ2VuZXJhdG9yLnB1
c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRlci5nZXQoKSwgaS5n
ZXQoKSwgbG9jYWwuZ2V0KCkpOwogICAgICAgICAgICAgb3B0aW1pemVkRm9yaW5BY2Nlc3MgPSB0
cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9k
ZSgpKSB7CkBAIC0xNzcxLDcgKzE4MDQsNyBAQCB2b2lkIEZvckluTm9kZTo6ZW1pdEJ5dGVjb2Rl
KEJ5dGVjb2RlR2VuCiAgICAgICAgICAgICBJZGVudGlmaWVyIGlkZW50ID0gc2ltcGxlQmluZGlu
Zy0+Ym91bmRQcm9wZXJ0eSgpOwogICAgICAgICAgICAgTG9jYWwgbG9jYWwgPSBnZW5lcmF0b3Iu
bG9jYWwoaWRlbnQpOwogICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gbG9jYWwuZ2V0KCk7Ci0g
ICAgICAgICAgICBpZiAoIXByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIGlmICghcHJvcGVydHlO
YW1lIHx8IGxvY2FsLmlzQ2FwdHVyZWQoKSkKICAgICAgICAgICAgICAgICBnb3RvIGdlbmVyaWNC
aW5kaW5nOwogICAgICAgICAgICAgZXhwZWN0ZWRTdWJzY3JpcHQgPSBnZW5lcmF0b3IuZW1pdE1v
dmUoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
Z2VuZXJhdG9yLnB1c2hPcHRpbWlzZWRGb3JJbihleHBlY3RlZFN1YnNjcmlwdC5nZXQoKSwgaXRl
ci5nZXQoKSwgaS5nZXQoKSwgcHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNTk4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjE0MSw3ICsyMTQxLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYWRkVG9HcmFwaChCcmVha3BvaW50KTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2RlYnVnKTsKICNlbmRpZgotICAgICAgICBjYXNlIG9wX21v
djogeworICAgICAgICBjYXNlIG9wX21vdjoKKyAgICAgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6
IHsKICAgICAgICAgICAgIE5vZGUqIG9wID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBvcCk7CiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9tb3YpOwpAQCAtMzIyMSw3ICszMjIyLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZ2V0X2Fy
Z3VtZW50X2J5X3ZhbCk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9w
X25ld19mdW5jOiB7CisgICAgICAgIGNhc2Ugb3BfbmV3X2Z1bmM6CisgICAgICAgIGNhc2Ugb3Bf
bmV3X2NhcHR1cmVkX2Z1bmM6IHsKICAgICAgICAgICAgIGlmICghY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkgewogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCiAgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoTmV3RnVuY3Rpb25Ob0NoZWNrLCBPcEluZm8oY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDE1OTg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBA
IENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2Rl
YnVnOgogI2VuZGlmCiAgICAgY2FzZSBvcF9tb3Y6CisgICAgY2FzZSBvcF9jYXB0dXJlZF9tb3Y6
CiAgICAgY2FzZSBvcF9jaGVja19oYXNfaW5zdGFuY2U6CiAgICAgY2FzZSBvcF9pbnN0YW5jZW9m
OgogICAgIGNhc2Ugb3BfaXNfdW5kZWZpbmVkOgpAQCAtMjAxLDYgKzIwMiw3IEBAIENhcGFiaWxp
dHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2NyZWF0ZV9hY3Rp
dmF0aW9uOgogICAgIGNhc2Ugb3BfdGVhcl9vZmZfYWN0aXZhdGlvbjoKICAgICBjYXNlIG9wX25l
d19mdW5jOgorICAgIGNhc2Ugb3BfbmV3X2NhcHR1cmVkX2Z1bmM6CiAgICAgY2FzZSBvcF9uZXdf
ZnVuY19leHA6CiAgICAgY2FzZSBvcF9zd2l0Y2hfc3RyaW5nOiAvLyBEb24ndCBpbmxpbmUgYmVj
YXVzZSB3ZSBkb24ndCB3YW50IHRvIGNvcHkgc3RyaW5nIHRhYmxlcyBpbiB0aGUgY29uY3VycmVu
dCBKSVQuCiAgICAgICAgIHJldHVybiBDYW5Db21waWxlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAkocmV2aXNpb24gMTU5ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTAsNiArMjUwLDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9vcF9oaW50KQog
ICAgICAgICBERUZJTkVfT1Aob3BfbHNoaWZ0KQogICAgICAgICBERUZJTkVfT1Aob3BfbW9kKQor
ICAgICAgICBjYXNlIG9wX2NhcHR1cmVkX21vdjoKICAgICAgICAgREVGSU5FX09QKG9wX21vdikK
ICAgICAgICAgREVGSU5FX09QKG9wX211bCkKICAgICAgICAgREVGSU5FX09QKG9wX25lZ2F0ZSkK
QEAgLTI1OCw2ICsyNTksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgIERFRklORV9PUChvcF9uZXdfYXJyYXkpCiAgICAgICAgIERFRklORV9PUChvcF9uZXdf
YXJyYXlfd2l0aF9zaXplKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2FycmF5X2J1ZmZlcikK
KyAgICAgICAgY2FzZSBvcF9uZXdfY2FwdHVyZWRfZnVuYzoKICAgICAgICAgREVGSU5FX09QKG9w
X25ld19mdW5jKQogICAgICAgICBERUZJTkVfT1Aob3BfbmV3X2Z1bmNfZXhwKQogICAgICAgICBE
RUZJTkVfT1Aob3BfbmV3X29iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
NTk4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTQyLDYgKzU0MiwxNiBAQCBfbGxpbnRfb3Bf
bW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAorX2xsaW50X29wX2NhcHR1cmVkX21vdjoKKyAgICB0
cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGkgOFtQQ10sIHQxCisgICAgbG9hZGkgNFtQQ10sIHQw
CisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQzKQorICAgIHN0b3JlaSB0Miwg
VGFnT2Zmc2V0W2NmciwgdDAsIDhdCisgICAgc3RvcmVpIHQzLCBQYXlsb2FkT2Zmc2V0W2Nmciwg
dDAsIDhdCisgICAgZGlzcGF0Y2goMykKKworCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNlRXhl
Y3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKQEAgLTE2NjIsNiArMTY3MiwxNyBAQCBfbGxp
bnRfb3BfbmV3X2Z1bmM6CiAgICAgZGlzcGF0Y2goNCkKIAogCitfbGxpbnRfb3BfbmV3X2NhcHR1
cmVkX2Z1bmM6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGJ0aXogMTJbUENdLCAub3BOZXdD
YXB0dXJlZEZ1bmNVbmNoZWNrZWQKKyAgICBsb2FkaSA0W1BDXSwgdDEKKyAgICBiaW5lcSBUYWdP
ZmZzZXRbY2ZyLCB0MSwgOF0sIEVtcHR5VmFsdWVUYWcsIC5vcE5ld0NhcHR1cmVkRnVuY0RvbmUK
Ky5vcE5ld0NhcHR1cmVkRnVuY1VuY2hlY2tlZDoKKyAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9uZXdfZnVuYykKKy5vcE5ld0NhcHR1cmVkRnVuY0RvbmU6CisgICAgZGlzcGF0Y2go
NCkKKworCiBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKCkKICAgICBpZiBWQUxVRV9QUk9GSUxF
UgogICAgICAgICBsb2FkaSAxNltQQ10sIHQzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTU5
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2
NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQxOCw2ICs0MTgsMTUgQEAgX2xsaW50X29wX21vdjoK
ICAgICBkaXNwYXRjaCgzKQogCiAKK19sbGludF9vcF9jYXB0dXJlZF9tb3Y6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKKyAgICBsb2FkaXNG
cm9tSW5zdHJ1Y3Rpb24oMSwgdDApCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIp
CisgICAgc3RvcmVxIHQyLCBbY2ZyLCB0MCwgOF0KKyAgICBkaXNwYXRjaCgzKQorCisKIF9sbGlu
dF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigyLCB0MCkKQEAgLTE1MTQsNiArMTUyMywxOCBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAgICAg
ZGlzcGF0Y2goNCkKIAogCitfbGxpbnRfb3BfbmV3X2NhcHR1cmVkX2Z1bmM6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKKyAgICBidGl6IHQy
LCAub3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDEpCisgICAgYnRxbnogW2NmciwgdDEsIDhdLCAub3BOZXdDYXB0dXJlZEZ1bmNEb25lCisu
b3BOZXdDYXB0dXJlZEZ1bmNVbmNoZWNrZWQ6CisgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfbmV3X2Z1bmMpCisub3BOZXdDYXB0dXJlZEZ1bmNEb25lOgorICAgIGRpc3BhdGNoKDQp
CisKKwogbWFjcm8gYXJyYXlQcm9maWxlRm9yQ2FsbCgpCiAgICAgaWYgVkFMVUVfUFJPRklMRVIK
ICAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQsIHQzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNTk4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NTMsNiArNDUzLDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENhcHR1cmVFbmQoaW50
IGNhcHR1cmVFbmQpIHsgbV9jYXB0dXJlRW5kID0gY2FwdHVyZUVuZDsgfQogCiAgICAgaW50IGNh
cHR1cmVDb3VudCgpIGNvbnN0IHsgcmV0dXJuIC0obV9jYXB0dXJlRW5kIC0gbV9jYXB0dXJlU3Rh
cnQpOyB9CisgICAgCisgICAgYm9vbCBpc0NhcHR1cmVkKGludCBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG9wZXJhbmQgPD0gY2FwdHVyZVN0YXJ0KCkgJiYgb3BlcmFuZCA+IGNhcHR1
cmVFbmQoKTsKKyAgICB9CiAKICAgICBpbnQgcGFyYW1ldGVyQ291bnQoKSB7IHJldHVybiBtX3Bh
cmFtZXRlckNvdW50SW5jbHVkaW5nVGhpcyAtIDE7IH0KICAgICBpbnQgcGFyYW1ldGVyQ291bnRJ
bmNsdWRpbmdUaGlzKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXJDb3VudEluY2x1ZGluZ1RoaXM7IH0K
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE1OTkwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEzLTEyLTAxICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcmVzIHRvIGxvY2FsIGNhcHR1cmVkIHZhcmlh
YmxlcyBzaG91bGQgYmUgaW50ZXJjZXB0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNDg4MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvY2FwdHVyZWQtYXNzaWdubWVu
dHMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY2FwdHVy
ZWQtYXNzaWdubWVudHMuanM6IEFkZGVkLgorCiAyMDEzLTExLTI5ICBNaWNoYcWCIFBha3XFgmEg
dmVsIFJ1dGthICA8bS5wYWt1bGFAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBF
RkwgZ2FyZGVuaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NhcHR1cmVkLWFzc2ln
bm1lbnRzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2NhcHR1cmVkLWFzc2lnbm1lbnRzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvY2FwdHVyZWQtYXNzaWdubWVudHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50
cworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhy
b3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jYXB0dXJlZC1hc3NpZ25tZW50cy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY2FwdHVyZWQtYXNzaWdubWVudHMu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY2FwdHVyZWQtYXNz
aWdubWVudHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jYXB0dXJlZC1hc3NpZ25tZW50cy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9jYXB0dXJlZC1hc3NpZ25tZW50cy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jYXB0dXJlZC1hc3NpZ25tZW50cy5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NhcHR1cmVkLWFz
c2lnbm1lbnRzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK2Z1bmN0aW9uIGZv
bygpIHsKKyAgICB2YXIgeCA9IDA7CisgICAgKyt4OworICAgIGZvciAodmFyIHggaW4gWzEsIDIs
IDNdKSB7CisgICAgfQorICAgIHggPSAxOworICAgIHgrKzsKKyAgICB2YXIgeSA9IHgrKzsKKyAg
ICB2YXIgeiA9IHkrKzsKKyAgICB6ID0geCsrOworICAgIHggKz0gMjsKKyAgICB6IC09IDE7Cisg
ICAgeCAqPSAyOworICAgIHogPDw9IDE7CisgICAgeCB8PSA1OworICAgIHJldHVybiBmdW5jdGlv
bigpIHsgcmV0dXJuIHgrKyArIHo7IH0KK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgeworICAgIGlmIChmb28oKSgpICE9IDE3KQorICAgICAgICB0aHJvdyAiRXJyb3IiOworfQo=
</data>
<flag name="review"
          id="241444"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>