<?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>213191</bug_id>
          
          <creation_ts>2020-06-15 07:17:23 -0700</creation_ts>
          <short_desc>Add DFG/FTL fast path for GetPrototypeOf based on OverridesGetPrototype flag</short_desc>
          <delta_ts>2020-06-25 12:34:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=157972</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1662624</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-15 07:17:23 -0700</bug_when>
    <thetext>Also consider extracting AssemblyHelpers::emitLoadPrototype() and vet InstanceOfGeneric case of AccessCase::generateWithGuard().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664837</commentid>
    <comment_count>1</comment_count>
      <attachid>402418</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-21 05:47:48 -0700</bug_when>
    <thetext>Created attachment 402418
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1664843</commentid>
    <comment_count>2</comment_count>
      <attachid>402422</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-21 06:58:29 -0700</bug_when>
    <thetext>Created attachment 402422
Patch

Attempt to fix 32-bit builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665630</commentid>
    <comment_count>3</comment_count>
      <attachid>402422</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-06-23 20:04:28 -0700</bug_when>
    <thetext>Comment on attachment 402422
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/AccessCase.cpp:1287
&gt; +        jit.emitLoadPrototype(vm, valueGPR, scratch2GPR, scratchGPR, failAndIgnore);

#if USE(JSVALUE64)
JSValueRegs resultRegs(scratch2GPR);
#else
JSValueRegs resultRegs(scratchGPR, scratch2GPR);
#endif

jit.emitLoadPrototype(vm, valueGPR, resultRegs, scratchGPR, failAndIgnore);

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13952
&gt; +        m_jit.emitLoadPrototype(vm(), objectGPR, tempGPR, temp2GPR, slowCases);

m_jit.emitLoadPrototype(vm(), objectGPR, resultRegs, temp2GPR, slowCases);

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:13969
&gt; +        m_jit.emitLoadPrototype(vm(), valueGPR, tempGPR, temp2GPR, slowCases);

m_jit.emitLoadPrototype(vm(), valueGPR, resultRegs, temp2GPR, slowCases);

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4450
&gt; +            m_out.appendTo(slowPath, continuation);

m_out.appendTo(slowPath, fastPath);

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4470
&gt; +            m_out.appendTo(isObjectPath, continuation);

m_out.appendTo(isObjectPath, slowPath);

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:4478
&gt; +            m_out.appendTo(slowPath, continuation);

m_out.appendTo(slowPath, fastPath);

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:395
&gt; +void AssemblyHelpers::emitLoadPrototype(VM&amp; vm, RegisterID source, RegisterID dest, RegisterID scratch, JumpList&amp; slowPath)

Let&apos;s accept `GPRReg objectGPR, JSValueRegs resultRegs, GPRReg scratchGPR` instead.
Changing the meaning of scratch to part of resultRegs inside function looks weird. We should get JSValueRegs resultRegs in this function&apos;s parameter.
And let&apos;s note that scratch can be a resultRegs.tagGPR().
You can insert,

ASSERT(resultRegs.payloadGPR() != objectGPR);
ASSERT(resultRegs.payloadGPR() != scratchGPR);
ASSERT(objectGPR != scratchGPR);

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:397
&gt; +    emitLoadStructure(vm, source, dest, scratch);

emitLoadStructure(vm, objectGPR, resultRegs.payloadGPR(), scratchGPR);

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:408
&gt; +#if USE(JSVALUE64)
&gt; +    JSValueRegs resultRegs(dest);
&gt; +#else
&gt; +    JSValueRegs resultRegs(scratch, dest);
&gt; +#endif

This is not necessary.

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:410
&gt; +    loadValue(MacroAssembler::Address(dest, Structure::prototypeOffset()), resultRegs);

loadValue(MacroAssembler::Address(resultRegs.payloadGPR(), Structure::prototypeOffset()), resultRegs);

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:412
&gt; +    loadValue(MacroAssembler::Address(source, offsetRelativeToBase(knownPolyProtoOffset)), resultRegs);

loadValue(MacroAssembler::Address(objectGPR, offsetRelativeToBase(knownPolyProtoOffset)), resultRegs);

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1753
&gt; +    JSValueRegs resultRegs(regT2);

Add
GPRReg scratchGPR = regT3;

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1756
&gt; +    JSValueRegs resultRegs(regT3, regT2);

Add
GPRReg scratchGPR = regT1;
ASSERT(valueRegs.tagGPR() == scratchGPR);

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1762
&gt; +    slowCases.append(branchIfNotObject(regT0));

Let&apos;s use valueRegs.payloadGPR().

&gt; Source/JavaScriptCore/jit/JITOpcodes.cpp:1764
&gt; +    emitLoadPrototype(vm(), regT0, regT2, regT3, slowCases);

Let&apos;s use it to something like this.

`
emitLoadPrototype(vm(), valueRegs.payloadGPR(), resultRegs, scratchGPR, slowCases);
`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665737</commentid>
    <comment_count>4</comment_count>
      <attachid>402651</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-06-24 08:09:22 -0700</bug_when>
    <thetext>Created attachment 402651
Patch

Accept JSValueRegs in emitLoadPrototype, add ASSERTs, fix FTL blocks linking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665831</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-06-24 12:51:53 -0700</bug_when>
    <thetext>Committed r263470: &lt;https://trac.webkit.org/changeset/263470&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 402651.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665832</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-24 12:52:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/64716119&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1666166</commentid>
    <comment_count>7</comment_count>
      <attachid>402651</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-25 12:34:01 -0700</bug_when>
    <thetext>Comment on attachment 402651
Patch

lgtm too</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402418</attachid>
            <date>2020-06-21 05:47:48 -0700</date>
            <delta_ts>2020-06-21 06:58:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213191-20200621154746.patch</filename>
            <type>text/plain</type>
            <size>44816</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjMzMjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA2LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBBZGQgREZHL0ZUTCBmYXN0IHBhdGggZm9yIEdldFByb3Rv
dHlwZU9mIGJhc2VkIG9uIE92ZXJyaWRlc0dldFByb3RvdHlwZSBmbGFnCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxOTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3QtZ2V0LXByb3RvdHlwZS1vZi1vYmplY3QtcmFyZS5qczogQWRkZWQuCisgICAgICAgICogc3Ry
ZXNzL2RmZy1vYmplY3QtcHJvdG90eXBlLW9mLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHN0cmVz
cy9kZmctcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHN0
cmVzcy9mdGwtb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9mdGwtcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzOiBBZGRlZC4KKwogMjAyMC0wNi0x
OSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIENo
ZWNrIEdpZ2FjYWdlIHVzYWdlIGJlZm9yZSBsYXVuY2hpbmcgVk0KSW5kZXg6IEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLW9iamVjdC1yYXJlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1nZXQtcHJvdG90eXBlLW9m
LW9iamVjdC1yYXJlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L29iamVjdC1nZXQtcHJvdG90eXBlLW9mLW9iamVjdC1yYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzMgQEAKK3ZhciByZWdFeHAgPSAvKD86KS87Cit2YXIgZGF0ZSA9IG5ldyBEYXRl
KCk7Cit2YXIgbWFwID0gbmV3IE1hcCgpOwordmFyIHdlYWtTZXQgPSBuZXcgV2Vha1NldCgpOwor
dmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7CisKK2Z1bmN0aW9uIHRlc3RPYmplY3RV
c2Uob2JqZWN0KSB7CisgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsK
K30KK25vSW5saW5lKHRlc3RPYmplY3RVc2UpOworCitmdW5jdGlvbiB0ZXN0RGVmYXVsdENhc2Uo
dmFsdWUpIHsKKyAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKK30KK25v
SW5saW5lKHRlc3REZWZhdWx0Q2FzZSk7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdGVzdE9i
amVjdFVzZShyZWdFeHApOworICAgIHRlc3RPYmplY3RVc2UoZGF0ZSk7CisgICAgdGVzdE9iamVj
dFVzZShtYXApOworICAgIHRlc3RPYmplY3RVc2Uod2Vha1NldCk7CisgICAgdGVzdE9iamVjdFVz
ZShwcm9taXNlKTsKKworICAgIHRlc3REZWZhdWx0Q2FzZShyZWdFeHApOworICAgIHRlc3REZWZh
dWx0Q2FzZShkYXRlKTsKKyAgICB0ZXN0RGVmYXVsdENhc2UobWFwKTsKKyAgICB0ZXN0RGVmYXVs
dENhc2Uod2Vha1NldCk7CisgICAgdGVzdERlZmF1bHRDYXNlKHByb21pc2UpOworfQorbm9Jbmxp
bmUodGVzdCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyArK2kpCisgICAgdGVzdCgpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvZGZnLW9iamVjdC1wcm90b3R5cGUtb2YuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvZGZnLW9iamVjdC1wcm90b3R5cGUtb2YuanMJKHJldmlzaW9u
IDI2MzI3MykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1vYmplY3QtcHJvdG90eXBlLW9mLmpzCShu
b25leGlzdGVudCkKQEAgLTEsMTE1ICswLDAgQEAKLWZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpCi17Ci0gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxk
VGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7Ci0gICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7
Ci0gICAgdmFyIGVycm9yID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgICBmdW5jKCk7Ci0gICAg
fSBjYXRjaCAoZSkgewotICAgICAgICBlcnJvclRocm93biA9IHRydWU7Ci0gICAgICAgIGVycm9y
ID0gZTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvclRocm93bikKLSAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdub3QgdGhyb3duJyk7Ci0gICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2Fn
ZSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1g
KTsKLX0KLQotKGZ1bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0K
LSAgICBub0lubGluZSh0YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsr
aSkKLSAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHt9KSwgT2JqZWN0LnByb3RvdHlwZSk7Ci19KCkp
OwotCi0oZnVuY3Rpb24gKCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAg
IG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKSB7
Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJvcjogbnVs
bCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
ZWN0KScpYCk7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQpLCBg
VHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iamVjdCknKWApOwotICAgIH0KLX0oKSk7Ci0KLShmdW5jdGlvbiAo
KSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBP
YmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0
KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJl
KHRhcmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7Ci19KCkpOwotCi0oZnVuY3Rpb24g
KCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
T2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAgIG5vSW5saW5lKHRhcmdl
dCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKQotICAgICAgICBzaG91bGRC
ZSh0YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKLX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7
Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJlKHRh
cmdldCg0Mi4xOTUpLCBOdW1iZXIucHJvdG90eXBlKTsKLX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7
Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJlKHRh
cmdldCh0cnVlKSwgQm9vbGVhbi5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1bmN0aW9uICgpIHsK
LSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9iamVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0YXJnZXQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkKLSAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KFN5bWJvbCgiQ29jb2EiKSksIFN5bWJvbC5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1bmN0
aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0
YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkgewotICAgICAgICBz
aG91bGRCZSh0YXJnZXQoIkNvY29hIiksIFN0cmluZy5wcm90b3R5cGUpOwotICAgICAgICBzaG91
bGRCZSh0YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKLSAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KDQyLjE5NSksIE51bWJlci5wcm90b3R5cGUpOwotICAgICAgICBzaG91bGRCZSh0YXJnZXQo
dHJ1ZSksIEJvb2xlYW4ucHJvdG90eXBlKTsKLSAgICAgICAgc2hvdWxkQmUodGFyZ2V0KFN5bWJv
bCgiQ29jb2EiKSksIFN5bWJvbC5wcm90b3R5cGUpOwotICAgIH0KLX0oKSk7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9kZmctcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanMJKHJldmlzaW9u
IDI2MzI3MykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2Yu
anMJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi1mdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKQotewotICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Ci19Ci0KLWZ1bmN0aW9uIHNo
b3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewotICAgIHZhciBlcnJvclRocm93biA9IGZh
bHNlOwotICAgIHZhciBlcnJvciA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgICAgZnVuYygpOwot
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOwotICAgICAgICBl
cnJvciA9IGU7Ci0gICAgfQotICAgIGlmICghZXJyb3JUaHJvd24pCi0gICAgICAgIHRocm93IG5l
dyBFcnJvcignbm90IHRocm93bicpOwotICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJv
cil9YCk7Ci19Ci0KLShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0g
ICAgfQotICAgIG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
MzsgKytpKQotICAgICAgICBzaG91bGRCZSh0YXJnZXQoe30pLCBPYmplY3QucHJvdG90eXBlKTsK
LX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAg
fQotICAgIG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsg
KytpKSB7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJv
cjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUg
YW4gb2JqZWN0YCk7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQp
LCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3RgKTsKLSAgICB9Ci19KCkpOwotCi0oZnVuY3Rpb24gKCkgewot
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0YXJnZXQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkgewotICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiB0YXJnZXQoIkNvY29hIiksIGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBl
T2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOwotICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3Rv
dHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKLSAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KHRydWUpLCBgVHlwZUVycm9yOiBSZWZsZWN0Lmdl
dFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsK
LSAgICB9Ci19KCkpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvZnRsLW9iamVjdC1nZXQtcHJvdG90
eXBlLW9mLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Z0bC1vYmplY3QtZ2V0LXBy
b3RvdHlwZS1vZi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9mdGwtb2JqZWN0
LWdldC1wcm90b3R5cGUtb2YuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDUgQEAKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0g
ZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFs
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAg
dmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkg
eworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93
biA9IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93
bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmlu
ZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQg
ZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKK30KKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90
b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoe30p
LCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KChmdW5jdGlvbigp
IHt9KS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KChjbGFzcyB7fSkucHJvdG90eXBlKSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSgp
KTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAg
ICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIEYgPSBmdW5jdGlvbigpIHt9OworICAgIHZh
ciBDID0gY2xhc3Mge307CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgRigpKSwgRi5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQobmV3IEMoKSksIEMucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCiso
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5s
aW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAg
ICAgIHNob3VsZEJlKHRhcmdldChBcnJheS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KFtdKSwgQXJyYXkucHJvdG90eXBlKTsKKyAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KEFycmF5KDMpKSwgQXJyYXkucHJvdG90eXBlKTsKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KG5ldyBBcnJheSgxLCAyLCAzKSksIEFycmF5LnByb3RvdHlwZSk7CisgICAg
fQorfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAg
IH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LnByb3RvdHlwZSksIG51bGwp
OworICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LmNyZWF0ZShudWxsKSksIG51bGwpOwor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBudWxsKSks
IG51bGwpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoe19fcHJvdG9fXzogbnVsbH0pLCBudWxs
KTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVj
dCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChmdW5jdGlvbigpIHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KGNsYXNzIHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KCgpID0+IHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAg
ICB2YXIgcmVnRXhwID0gLyg/OikvOworICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICB2
YXIgbWFwID0gbmV3IE1hcCgpOworICAgIHZhciB3ZWFrU2V0ID0gbmV3IFdlYWtTZXQoKTsKKyAg
ICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHJlZ0V4cCksIFJlZ0V4
cC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoZGF0ZSksIERhdGUucHJvdG90
eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KG1hcCksIE1hcC5wcm90b3R5cGUpOworICAg
ICAgICBzaG91bGRCZSh0YXJnZXQod2Vha1NldCksIFdlYWtTZXQucHJvdG90eXBlKTsKKyAgICAg
ICAgc2hvdWxkQmUodGFyZ2V0KHByb21pc2UpLCBQcm9taXNlLnByb3RvdHlwZSk7CisgICAgfQor
fSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0K
KyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZnVuY3Rpb24gbWFrZVBvbHlQcm90b09iamVj
dCgpIHsKKyAgICAgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICAgICAgY2xhc3MgQyB7Cisg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2ZpZWxkID0gNDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGFzdFByb3RvID0gQy5wcm90b3R5cGU7CisgICAgICAgICAgICByZXR1cm4gbmV3IEMoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIGZvbygpOworICAgICAgICByZXR1cm4gZm9vKCk7CisgICAgfQorCisgICAgdmFyIHBv
bHlQcm90b09iamVjdCA9IG1ha2VQb2x5UHJvdG9PYmplY3QoKTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdldChwb2x5UHJvdG9PYmpl
Y3QpLCBwb2x5UHJvdG9PYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlKTsKK30oKSk7CisKKyhm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9Jbmxp
bmUodGFyZ2V0KTsKKworICAgIHZhciBwcm94eVByb3RvdHlwZSA9IHt9OworICAgIHZhciBwcm94
eSA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBnZXRQcm90b3R5cGVPZjogKCkgPT4gcHJveHlQ
cm90b3R5cGUsCisgICAgfSk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQocHJveHkpLCBwcm94eVByb3RvdHlwZSk7Cit9KCkpOwor
CisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAg
ICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5v
SW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJvcjogbnVsbCBp
cyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0
KScpYCk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQpLCBgVHlw
ZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCknKWApOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRh
cmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRCZSh0
YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCg0Mi4xOTUpLCBOdW1iZXIucHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCh0cnVlKSwgQm9vbGVhbi5wcm90b3R5cGUpOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5n
ZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KFN5bWJvbCgpKSwgU3ltYm9sLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRh
cmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCg0MiksIE51bWJlci5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoNDIuMTk1
KSwgTnVtYmVyLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh0cnVlKSwgQm9v
bGVhbi5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoU3ltYm9sKCkpLCBTeW1i
b2wucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KDFuKSwgQmlnSW50LnByb3Rv
dHlwZSk7CisgICAgfQorfSgpKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2Z0bC1yZWZsZWN0LWdl
dC1wcm90b3R5cGUtb2YuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZnRsLXJlZmxl
Y3QtZ2V0LXByb3RvdHlwZS1vZi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9m
dGwtcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQ1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTog
JyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2Fn
ZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7
CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICgh
ZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAg
IGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKKyhmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZs
ZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJl
KHRhcmdldCh7fSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQo
KGZ1bmN0aW9uKCkge30pLnByb3RvdHlwZSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQoKGNsYXNzIHt9KS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3Qp
OworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIEYgPSBmdW5jdGlvbigp
IHt9OworICAgIHZhciBDID0gY2xhc3Mge307CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgRigpKSwgRi5wcm90b3R5cGUp
OworICAgICAgICBzaG91bGRCZSh0YXJnZXQobmV3IEMoKSksIEMucHJvdG90eXBlKTsKKyAgICB9
Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisg
ICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAg
IH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoQXJyYXkucHJvdG90eXBlKSwgT2JqZWN0
LnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChbXSksIEFycmF5LnByb3RvdHlw
ZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChBcnJheSgzKSksIEFycmF5LnByb3RvdHlwZSk7
CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgQXJyYXkoMSwgMiwgMykpLCBBcnJheS5wcm90
b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFy
Z2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
KG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QucHJv
dG90eXBlKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QuY3JlYXRlKG51
bGwpKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3Quc2V0UHJvdG90eXBl
T2Yoe30sIG51bGwpKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh7X19wcm90b19f
OiBudWxsfSksIG51bGwpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVu
Y3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFBy
b3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChm
dW5jdGlvbigpIHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KGNsYXNzIHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KCgpID0+IHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCisoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGlu
ZSh0YXJnZXQpOworCisgICAgdmFyIHJlZ0V4cCA9IC8oPzopLzsKKyAgICB2YXIgZGF0ZSA9IG5l
dyBEYXRlKCk7CisgICAgdmFyIG1hcCA9IG5ldyBNYXAoKTsKKyAgICB2YXIgd2Vha1NldCA9IG5l
dyBXZWFrU2V0KCk7CisgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdl
dChyZWdFeHApLCBSZWdFeHAucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KGRh
dGUpLCBEYXRlLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChtYXApLCBNYXAu
cHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHdlYWtTZXQpLCBXZWFrU2V0LnBy
b3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChwcm9taXNlKSwgUHJvbWlzZS5wcm90
b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFy
Z2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
KG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmdW5jdGlvbiBt
YWtlUG9seVByb3RvT2JqZWN0KCkgeworICAgICAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAg
ICAgICBjbGFzcyBDIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fZmllbGQgPSA0MjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsYXN0UHJvdG8gPSBDLnByb3RvdHlwZTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgQygpOworICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgKytpKQorICAgICAgICAgICAgZm9vKCk7CisgICAgICAgIHJldHVybiBmb28oKTsKKyAg
ICB9CisKKyAgICB2YXIgcG9seVByb3RvT2JqZWN0ID0gbWFrZVBvbHlQcm90b09iamVjdCgpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KHBvbHlQcm90b09iamVjdCksIHBvbHlQcm90b09iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5
cGUpOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsK
KyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIHZhciBwcm94eVByb3RvdHlwZSA9
IHt9OworICAgIHZhciBwcm94eSA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBnZXRQcm90b3R5
cGVPZjogKCkgPT4gcHJveHlQcm90b3R5cGUsCisgICAgfSk7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRCZSh0YXJnZXQocHJveHkpLCBwcm94eVBy
b3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmpl
Y3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxZTU7ICsraSkgeworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQobnVsbCks
IGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQo
dW5kZWZpbmVkKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0
aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgfQorfSgpKTsKKworKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUo
dGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNo
b3VsZFRocm93KCgpID0+IHRhcmdldCgiQ29jb2EiKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQ
cm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9
KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAg
eworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0K
KyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyKSwgYFR5cGVFcnJvcjogUmVm
bGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2Jq
ZWN0YCk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3Qp
OworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyLjE5NSksIGBU
eXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdGApOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90
eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdl
dCh0cnVlKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkVGhyb3co
KCkgPT4gdGFyZ2V0KFN5bWJvbCgpKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVP
ZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9KCkpOworCiso
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lu
bGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
ICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoIkNvY29hIiksIGBUeXBlRXJyb3I6IFJlZmxl
Y3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVj
dGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIpLCBgVHlwZUVycm9yOiBS
ZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBv
YmplY3RgKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyLjE5NSksIGBUeXBl
RXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50
IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQodHJ1ZSks
IGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQo
U3ltYm9sKCkpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRo
ZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkg
PT4gdGFyZ2V0KDFuKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgfQorfSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIw
LTA2LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAg
ICBBZGQgREZHL0ZUTCBmYXN0IHBhdGggZm9yIEdldFByb3RvdHlwZU9mIGJhc2VkIG9uIE92ZXJy
aWRlc0dldFByb3RvdHlwZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTMxOTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAgIDEuIEludHJvZHVjZXMgYGxvYWRJ
bmxpbmVPZmZzZXRgIExMSW50IG1hY3JvICg2NC1iaXQgb25seSkgYW5kIHV0aWxpemVzIGl0IGlu
CisgICAgICAgICAgIGBnZXRfcHJvdG90eXBlX29mYCBzaW5jZSB3ZSBhc3NlcnQgdGhhdCBga25v
d25Qb2x5UHJvdG9PZmZzZXRgIGlzIGFuIGlubGluZSBvZmZzZXQuCisKKyAgICAgICAgMi4gQnJp
bmdzIGJhc2VsaW5lIEpJVCBmYXN0IHBhdGggdG8gMzItYml0IGJ1aWxkcywgcHJvZ3Jlc3Npbmcg
YHN1cGVyLWdldHRlci5qc2AKKyAgICAgICAgICAgbWljcm9iZW5jaG1hcmsgYnkgYSBmYWN0b3Ig
b2YgMTAgKHcvbyBERkcpLgorCisgICAgICAgIDMuIEFkZHMgR2V0UHJvdG90eXBlT2YgREZHL0ZU
TCBmYXN0IHBhdGhzIHRoYXQgbGV2ZXJhZ2UgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHR5cGUKKyAg
ICAgICAgICAgaW5mbyBmbGFnLCBhZHZhbmNpbmcgcHJvdmlkZWQgcmFyZSBvYmplY3RzIG1pY3Jv
YmVuY2htYXJrIGJ5IH40NiUgKH4zNyUgdy9vIEZUTCkuCisgICAgICAgICAgIEFsc28sIGNsZWFu
cyB1cCBleGlzdGluZyBERkcgZmFzdCBwYXRoIGJ5IHVzaW5nIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFZhbHVlKCkuCisKKyAgICAgICAgNC4gRXh0cmFjdHMgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9h
ZFByb3RvdHlwZSgpIGFuZCB1c2VzIGl0IGluIGJhc2VsaW5lIEpJVCwgREZHLCBhbmQKKyAgICAg
ICAgICAgSW5zdGFuY2VPZkdlbmVyaWMgYWNjZXNzIGNhc2UuIFRvIG1ha2UgaXQgd29yayB3aXRo
IHRoZSBsYXR0ZXIsIGhlbHBlcidzIHNpZ25hdHVyZQorICAgICAgICAgICBpcyBtYWRlIHNpbWls
YXIgdG8gZW1pdExvYWRTdHJ1Y3R1cmUoKSBhcyB3ZSBuZWVkIHRvIGFjY2VwdCBsb2NrZWQgc2Ny
YXRjaCByZWdpc3Rlci4KKworICAgICAgICAgICBXaXRoIHRoaXMgY2hhbmdlLCBgaW5zdGFuY2Vv
ZmAgYWNjZXNzIGNhc2UgaGFuZGxlcyBhbGwgW1tHZXRQcm90b3R5cGVPZl1dIG92ZXJyaWRlcwor
ICAgICAgICAgICAoYmVmb3JlOiBvbmx5IFByb3h5IG9iamVjdHMpLCB3aGljaCBpcyBtb3JlIGNv
cnJlY3QsIHlldCBub3Qgb2JzZXJ2YWJsZSBlbm91Z2ggdG8KKyAgICAgICAgICAgcHJvdmlkZSBh
IHRlc3QgY2FzZS4gYGluc3RhbmNlb2ZgIG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1dHJhbC4KKwor
ICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3Rv
dHlwZU9mKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIGppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2Fk
UHJvdG90eXBlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90
b3R5cGVfb2YpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisK
IDIwMjAtMDYtMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVu
aWZ5IEJpdG1hcCBtYXRoIGxvb3BzIGluIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVk
U3dlZXAoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI2MzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3OCwzNiArMTI3OCwxMyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAogICAgICAgICAgICAgICAgIGpp
dCwKICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tT
cGFjZTo6Tm9FeHRyYVNwYWNlKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWxBbmRJ
Z25vcmU7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKIAog
ICAgICAgICBqaXQubW92ZShiYXNlR1BSLCB2YWx1ZUdQUik7CiAgICAgICAgIAogICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AoJmppdCk7Ci0gICAgICAgIGZhaWxBbmRJZ25vcmUgPSBq
aXQuYnJhbmNoSWZUeXBlKHZhbHVlR1BSLCBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICAKLSAg
ICAgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZUdQUiwgc2NyYXRjaDJHUFIsIHNj
cmF0Y2hHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgp
KSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGFzTW9ub1Byb3Rv
ID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKTsK
LSAgICAgICAgaml0LmxvYWQ2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyh2
YWx1ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwKLSAg
ICAgICAgICAgIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaGFzTW9ub1Byb3RvLmxpbmsoJmppdCk7
Ci0jZWxzZQotICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgVGFnT2Zm
c2V0KSwKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQubG9hZDMyKAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZU9mZnNldCgpICsgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXNNb25vUHJvdG8gPSBqaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAg
IGppdC5sb2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgdmFsdWVHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zm
c2V0KSArIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgc2NyYXRjaDJHUFIpOwotICAgICAg
ICBoYXNNb25vUHJvdG8ubGluaygmaml0KTsKLSNlbmRpZgorCisgICAgICAgIGppdC5lbWl0TG9h
ZFByb3RvdHlwZSh2bSwgdmFsdWVHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBmYWlsQW5k
SWdub3JlKTsKICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDJHUFIsIHZhbHVlR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0luc3RhbmNlID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCB2YWx1ZUdQUiwgcHJvdG90eXBlR1BSKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAyNjMyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4NzYsMTcgKzEzODc2LDI0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiB7CisgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOworCisgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigpOwor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXBHUFIp
OworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXAyR1BSLCB0ZW1wR1BSKTsK
KyNlbmRpZgorCiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICBj
YXNlIEFycmF5VXNlOgogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvYmplY3QodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwotCiAgICAgICAgIEdQUlJlZyBvYmplY3RHUFIgPSBvYmpl
Y3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBBcnJheVVzZToKQEAgLTEzOTE3LDc0
ICsxMzkyNCw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKGhhc01vbm9Qcm90byAmJiAhaGFzUG9s
eVByb3RvKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVP
ZmZzZXQoKSksIHRlbXBHUFIpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodGVtcEdQ
Uiwgbm9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgVGFn
T2Zmc2V0KSwgdGVtcDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsg
UGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
dGVtcDJHUFIsIHRlbXBHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJv
dG90eXBlT2Zmc2V0KCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGhhc1BvbHlQcm90byAmJiAhaGFzTW9ub1Byb3RvKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQ
cm90b09mZnNldCkpLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHRl
bXBHUFIsIG5vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQ
cm90b09mZnNldCkgKyBUYWdPZmZzZXQpLCB0ZW1wMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOwot
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodGVtcDJHUFIsIHRlbXBHUFIsIG5vZGUpOwot
I2VuZGlmCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQp
KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgdGVt
cEdQUik7Ci0gICAgICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eSh0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRyZXNzKG9i
amVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwgdGVt
cEdQUik7Ci0gICAgICAgIGhhc01vbm9Qcm90by5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFs
dWVSZXN1bHQodGVtcEdQUiwgbm9kZSk7Ci0jZWxzZQotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQo
KSArIFRhZ09mZnNldCksIHRlbXAyR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBQ
YXlsb2FkT2Zmc2V0KSwgdGVtcEdQUik7Ci0gICAgICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gbV9q
aXQuYnJhbmNoSWZOb3RFbXB0eSh0ZW1wMkdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9s
eVByb3RvT2Zmc2V0KSArIFRhZ09mZnNldCksIHRlbXAyR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
a25vd25Qb2x5UHJvdG9PZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0
dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlc3VsdFJlZ3MpOworICAgICAgICBhdXRvIGhhc01v
bm9Qcm90byA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVncyk7CisgICAgICAgIG1f
aml0LmxvYWRWYWx1ZShKSVRDb21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSksIHJlc3VsdFJlZ3MpOwogICAgICAgICBo
YXNNb25vUHJvdG8ubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXAyR1BS
LCB0ZW1wR1BSLCBub2RlKTsKLSNlbmRpZgorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgT2JqZWN0VXNlOiB7
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRoIGJhc2VkIG9uIE92ZXJyaWRlc0dldFBy
b3RvdHlwZSB0eXBlIGluZm8gZmxhZwotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTkxCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwot
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSUmVnIG9iamVjdEdQUiA9IG9iamVjdC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KG5vZGUtPmNoaWxkMSgpLCBvYmplY3RHUFIpOwogCi0gICAgICAgIHNwZWN1bGF0ZU9iamVj
dChub2RlLT5jaGlsZDEoKSwgdmFsdWVHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBvYmpl
Y3RHUFIsIHRlbXBHUFIsIHRlbXAyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRQcm90
b3R5cGVPZk9iamVjdCwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBvYmplY3RHUFIpKTsKIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVHUFIpOwotICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm90b3R5cGVPZiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVncyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwor
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsK
KworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgdGVtcEdQ
UiwgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mLAorICAg
ICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlR1BS
KSk7CisKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJh
Y3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyNjMyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2luZGV4aW5nTW9kZUluY2x1ZGlu
Z0hpc3RvcnksIFN0cnVjdHVyZTo6aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeU9mZnNldCgp
KSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2lubGluZUNhcGFjaXR5LCBTdHJ1Y3R1cmU6OmlubGlu
ZUNhcGFjaXR5T2Zmc2V0KCkpIFwKKyAgICBtYWNybyhTdHJ1Y3R1cmVfb3V0T2ZMaW5lVHlwZUZs
YWdzLCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFnc09mZnNldCgpKSBcCiAgICAgbWFjcm8o
U3RydWN0dXJlX3ByZXZpb3VzT3JSYXJlRGF0YSwgU3RydWN0dXJlOjpwcmV2aW91c09yUmFyZURh
dGFPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6
cHJvdG90eXBlT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0
cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjYzMjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00Mzc5LDExICs0Mzc5LDIwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlR2V0UHJv
dG90eXBlT2YoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKworICAg
ICAgICBMVmFsdWUgb2JqZWN0ID0gbnVsbHB0cjsKKyAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9
IG51bGxwdHI7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQ7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgbG9hZFBvbHlQcm90byA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGNvbnRpbnVhdGlv
bik7CisKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAg
ICAgICBjYXNlIEFycmF5VXNlOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBj
YXNlIEZpbmFsT2JqZWN0VXNlOiB7Ci0gICAgICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2Vs
bChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIG9iamVjdCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CiAgICAgICAgICAgICBjYXNlIEFycmF5VXNlOgogICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUFycmF5KG1fbm9kZS0+Y2hpbGQxKCksIG9iamVjdCk7CkBAIC00Mzk5LDcgKzQ0MDgsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBMVmFsdWUgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOworICAgICAg
ICAgICAgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOwogCiAgICAgICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIGlmICgodmFsdWUubV90eXBlICYmICEodmFsdWUubV90eXBlICYgflNwZWNP
YmplY3QpKSAmJiB2YWx1ZS5tX3N0cnVjdHVyZS5pc0Zpbml0ZSgpKSB7CkBAIC00NDIzLDMzICs0
NDMyLDcyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbG9hZFBvbHlQcm90byA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE9iamVjdFVzZTog
eworICAgICAgICAgICAgb2JqZWN0ID0gbG93T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOwogCi0g
ICAgICAgICAgICBMVmFsdWUgcHJvdG90eXBlQml0cyA9IG1fb3V0LmxvYWQ2NChzdHJ1Y3R1cmUs
IG1faGVhcHMuU3RydWN0dXJlX3Byb3RvdHlwZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9j
ayBkaXJlY3RQcm90b3R5cGUgPSBtX291dC5hbmNob3IocHJvdG90eXBlQml0cyk7Ci0gICAgICAg
ICAgICBtX291dC5icmFuY2gobV9vdXQuaXNaZXJvNjQocHJvdG90eXBlQml0cyksIHVuc3VyZShs
b2FkUG9seVByb3RvKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworICAgICAgICAgICAgTEJhc2lj
QmxvY2sgZmFzdFBhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwogCi0gICAgICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvYWRQb2x5UHJvdG8sIGNvbnRpbnVhdGlvbik7
Ci0gICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb2x5UHJvdG8gPSBtX291dC5hbmNob3IoCi0g
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3Bl
cnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBtX291dC5jb25zdEludDY0KGtub3duUG9seVBy
b3RvT2Zmc2V0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNldE9mSW5saW5lU3RvcmFnZSgp
KSkpOworICAgICAgICAgICAgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8z
MigKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQubG9hZDE2WmVyb0V4dDMyKHN0cnVjdHVyZSwg
bV9oZWFwcy5TdHJ1Y3R1cmVfb3V0T2ZMaW5lVHlwZUZsYWdzKSwKKyAgICAgICAgICAgICAgICAg
ICAgbV9vdXQuY29uc3RJbnQzMihPdmVycmlkZXNHZXRQcm90b3R5cGVPdXRPZkxpbmUpKSwKKyAg
ICAgICAgICAgICAgICB1c3VhbGx5KGZhc3RQYXRoKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAg
ICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAg
ICAgICAgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdl
dFByb3RvdHlwZU9mT2JqZWN0LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBvYmplY3QpKTsK
ICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAotICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICBzZXRKU1Zh
bHVlKG1fb3V0LnBoaShJbnQ2NCwgZGlyZWN0UHJvdG90eXBlLCBwb2x5UHJvdG8pKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjYXNlIE9iamVjdFVzZTogewotICAg
ICAgICAgICAgLy8gRklYTUU6IEFkZCBmYXN0IHBhdGggYmFzZWQgb24gT3ZlcnJpZGVzR2V0UHJv
dG90eXBlIHR5cGUgaW5mbyBmbGFnCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTkxCi0gICAgICAgICAgICBzZXRKU1ZhbHVlKHZtQ2Fs
bChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvdG90eXBlT2ZPYmplY3QsIHdlYWtQb2ludGVyKGdsb2Jh
bE9iamVjdCksIGxvd09iamVjdChtX25vZGUtPmNoaWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBhdGgsIGxvYWRQb2x5UHJvdG8p
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDogewotICAg
ICAgICAgICAgc2V0SlNWYWx1ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkp
KSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBvYmplY3QgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVUeXBl
ID0gcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNDZWxsUGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICBMQmFzaWNCbG9j
ayBpc09iamVjdFBhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgZmFzdFBhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKG9iamVjdCwgdmFsdWVUeXBlKSwgdXN1YWxseShpc0NlbGxQYXRoKSwgcmFyZWx5KHNs
b3dQYXRoKSk7CisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpc0NlbGxQYXRoLCBpc09iamVj
dFBhdGgpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKGlzT2JqZWN0KG9iamVjdCwgdmFsdWVU
eXBlKSwgdXN1YWxseShpc09iamVjdFBhdGgpLCByYXJlbHkoc2xvd1BhdGgpKTsKKworICAgICAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaXNPYmplY3RQYXRoLCBjb250aW51YXRpb24pOworICAgICAg
ICAgICAgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOworICAgICAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZDE2WmVyb0V4dDMyKHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1
Y3R1cmVfb3V0T2ZMaW5lVHlwZUZsYWdzKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQuY29u
c3RJbnQzMihPdmVycmlkZXNHZXRQcm90b3R5cGVPdXRPZkxpbmUpKSwKKyAgICAgICAgICAgICAg
ICB1c3VhbGx5KGZhc3RQYXRoKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9m
LCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLCBvYmplY3QpKTsKKyAgICAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFzdFBh
dGgsIGxvYWRQb2x5UHJvdG8pOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgfQorCisgICAgICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KTsKKworICAgICAgICBMVmFsdWUgcHJvdG90eXBlQml0cyA9IG1fb3V0LmxvYWQ2NChzdHJ1Y3R1
cmUsIG1faGVhcHMuU3RydWN0dXJlX3Byb3RvdHlwZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG1vbm9Qcm90byA9IG1fb3V0LmFuY2hvcihwcm90b3R5cGVCaXRzKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmlzWmVybzY0KHByb3RvdHlwZUJpdHMpLCB1bnN1cmUobG9hZFBvbHlQcm90
byksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhsb2Fk
UG9seVByb3RvLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBwb2x5UHJv
dG8gPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUlu
ZGV4KG1faGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvYmplY3QsIG1fb3V0LmNvbnN0
SW50NjQoa25vd25Qb2x5UHJvdG9PZmZzZXQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6b2Zmc2V0
T2ZJbmxpbmVTdG9yYWdlKCkpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAg
ICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIG1vbm9Qcm90bywgcG9seVByb3RvLCBzbG93
UmVzdWx0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUdldEFycmF5TGVuZ3RoKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHJldmlzaW9uIDI2MzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkyLDYgKzM5MiwyNyBAQCB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6ZW1pdExvYWRTdHJ1Y3R1cmUoCiAjZW5kaWYgLy8gbm90IFVTRShKU1ZBTFVF
NjQpCiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9hZFByb3RvdHlwZShWTSYgdm0s
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCwg
SnVtcExpc3QmIHNsb3dQYXRoKQoreworICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCBzb3VyY2Us
IGRlc3QsIHNjcmF0Y2gpOworCisgICAgYXV0byBvdmVycmlkZXNHZXRQcm90b3R5cGUgPSBicmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGRlc3QsIFN0cnVjdHVyZTo6b3V0T2ZMaW5lVHlwZUZsYWdzT2Zmc2V0KCkpLAor
ICAgICAgICBUcnVzdGVkSW1tMzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5lKSk7Cisg
ICAgc2xvd1BhdGguYXBwZW5kKG92ZXJyaWRlc0dldFByb3RvdHlwZSk7CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MoZGVzdCk7CisjZWxzZQorICAgIEpT
VmFsdWVSZWdzIHJlc3VsdFJlZ3Moc2NyYXRjaCwgZGVzdCk7CisjZW5kaWYKKworICAgIGxvYWRW
YWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhkZXN0LCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9m
ZnNldCgpKSwgcmVzdWx0UmVncyk7CisgICAgYXV0byBoYXNNb25vUHJvdG8gPSBicmFuY2hJZk5v
dEVtcHR5KHJlc3VsdFJlZ3MpOworICAgIGxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzb3VyY2UsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSksIHJl
c3VsdFJlZ3MpOworICAgIGhhc01vbm9Qcm90by5saW5rKHRoaXMpOworfQorCiB2b2lkIEFzc2Vt
Ymx5SGVscGVyczo6bWFrZVNwYWNlT25TdGFja0ZvckNDYWxsKCkKIHsKICAgICB1bnNpZ25lZCBz
dGFja09mZnNldCA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIG1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjYzMjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTY2OCw2ICsxNjY4LDcgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGVtaXRM
b2FkU3RydWN0dXJlKFZNJiwgUmVnaXN0ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVn
aXN0ZXJJRCBzY3JhdGNoKTsKKyAgICB2b2lkIGVtaXRMb2FkUHJvdG90eXBlKFZNJiwgUmVnaXN0
ZXJJRCBzb3VyY2UsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBKdW1wTGlz
dCYgc2xvd1BhdGgpOwogCiAgICAgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8o
VHJ1c3RlZEltbVB0ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCkKICAg
ICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNjMyNzMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
OCw5ICszMTgsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
IERFRklORV9TTE9XX09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCiAgICAgICAgIERFRklORV9T
TE9XX09QKG5ld19nZW5lcmF0b3IpCiAgICAgICAgIERFRklORV9TTE9XX09QKHBvdykKLSNpZiAh
VVNFKEpTVkFMVUU2NCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3RvdHlwZV9vZikK
LSNlbmRpZgogCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChv
cF9iaXRub3QpCkBAIC0zNjAsNiArMzU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFp
blBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAg
ICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9PUChvcF9n
ZXRfYnlfdmFsKQorICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Byb3RvdHlwZV9vZikKICAgICAg
ICAgREVGSU5FX09QKG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpCiAgICAgICAgIERFRklORV9P
UChvcF9pbnN0YW5jZW9mKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5zdGFuY2VvZl9jdXN0b20p
CkBAIC00NzQsOSArNDcyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAg
ICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKLSNpZiBVU0UoSlNWQUxV
RTY0KQotICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Byb3RvdHlwZV9vZikKLSNlbmRpZgogICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgfQpAQCAtNjI1LDE1ICs2MjAsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
U2xvd0Nhc2VzKCkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Aoc3RyaWN0ZXEpCiAg
ICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKG5zdHJpY3RlcSkKICAgICAgICAgREVGSU5F
X1NMT1dDQVNFX1NMT1dfT1AoZ2V0X2RpcmVjdF9wbmFtZSkKKyAgICAgICAgREVGSU5FX1NMT1dD
QVNFX1NMT1dfT1AoZ2V0X3Byb3RvdHlwZV9vZikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoaGFzX293bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKGluX3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNF
X1NMT1dfT1AocmVzb2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
Y2hlY2tfdGR6KQogICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9r
ZXkpCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
Z2V0X3Byb3RvdHlwZV9vZikKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjMyNzMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTI1LDI2ICsxNTI1LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25z
dAogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKLXsKLSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldFByb3RvdHlwZU9mPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUu
bV92YWx1ZSwgcmVnVDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1Qw
KSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVt
aXRMb2FkU3RydWN0dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFRlc3QzMihOb25aZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Om91dE9m
TGluZVR5cGVGbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc0dldFByb3RvdHlw
ZU91dE9mTGluZSkpKTsKLQotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZU9mZnNldCgpKSwgcmVnVDIpOwotICAgIEp1bXAgaGFzTW9ub1Byb3RvID0gYnJhbmNo
VGVzdDY0KE5vblplcm8sIHJlZ1QyKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgb2Zmc2V0
UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwgcmVnVDIpOwotICAgIGhhc01v
bm9Qcm90by5saW5rKHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9k
c3QsIHJlZ1QyKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVf
cG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQ
bmFtZT4oKTsKQEAgLTE3NjUsNiArMTc0NSwyOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJn
dW1lbnQoY29uc3QgSW5zCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJl
Z3MpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVz
dWx0UmVncyhyZWdUMik7CisjZWxzZQorICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyhyZWdUMSwg
cmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3MocmVnVDMsIHJlZ1QyKTsKKyNlbmRp
ZgorICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdz
KTsKKworICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aElmTm90Q2VsbCh2YWx1ZVJlZ3MpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90
T2JqZWN0KHJlZ1QwKSk7CisKKyAgICBlbWl0TG9hZFByb3RvdHlwZSh2bSgpLCByZWdUMCwgcmVn
VDIsIHJlZ1QzLCBzbG93Q2FzZXMpOworICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7CisKKyAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5tX2RzdCwgcmVzdWx0UmVncyk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCShyZXZpc2lvbiAyNjMyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTM4Niw2ICsx
Mzg2LDEyIEBAIGxsaW50T3BXaXRoUmV0dXJuKG9wX2lzX29iamVjdCwgT3BJc09iamUKIGVuZCkK
IAogCittYWNybyBsb2FkSW5saW5lT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVjdEFu
ZFN0b3JhZ2UsIHZhbHVlKQorICAgIGFkZHAgc2l6ZW9mIEpTT2JqZWN0IC0gKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiA4LCBvYmplY3RBbmRTdG9yYWdlCisgICAgbG9hZHEgKGZpcnN0T3V0
T2ZMaW5lT2Zmc2V0IC0gMikgKiA4W29iamVjdEFuZFN0b3JhZ2UsIHByb3BlcnR5T2Zmc2V0QXNJ
bnQsIDhdLCB2YWx1ZQorZW5kCisKKwogbWFjcm8gbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RBbmRTdG9yYWdlLCB2YWx1ZSkKICAgICBiaWx0
IHByb3BlcnR5T2Zmc2V0QXNJbnQsIGZpcnN0T3V0T2ZMaW5lT2Zmc2V0LCAuaXNJbmxpbmUKICAg
ICBsb2FkcCBKU09iamVjdDo6bV9idXR0ZXJmbHlbb2JqZWN0QW5kU3RvcmFnZV0sIG9iamVjdEFu
ZFN0b3JhZ2UKQEAgLTE1MTUsNyArMTUyMSw3IEBAIGxsaW50T3BXaXRoUHJvZmlsZShvcF9nZXRf
cHJvdG90eXBlX29mLCAKIAogLm9wR2V0UHJvdG90eXBlT2ZQb2x5UHJvdG86CiAgICAgbW92ZSBr
bm93blBvbHlQcm90b09mZnNldCwgdDEKLSAgICBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0
KHQxLCB0MCwgdDMpCisgICAgbG9hZElubGluZU9mZnNldCh0MSwgdDAsIHQzKQogICAgIHJldHVy
bih0MykKIGVuZCkKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402422</attachid>
            <date>2020-06-21 06:58:29 -0700</date>
            <delta_ts>2020-06-24 08:09:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213191-20200621165827.patch</filename>
            <type>text/plain</type>
            <size>44817</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjMzMjYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA2LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBBZGQgREZHL0ZUTCBmYXN0IHBhdGggZm9yIEdldFByb3Rv
dHlwZU9mIGJhc2VkIG9uIE92ZXJyaWRlc0dldFByb3RvdHlwZSBmbGFnCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxOTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9vYmpl
Y3QtZ2V0LXByb3RvdHlwZS1vZi1vYmplY3QtcmFyZS5qczogQWRkZWQuCisgICAgICAgICogc3Ry
ZXNzL2RmZy1vYmplY3QtcHJvdG90eXBlLW9mLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHN0cmVz
cy9kZmctcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzOiBSZW1vdmVkLgorICAgICAgICAqIHN0
cmVzcy9mdGwtb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanM6IEFkZGVkLgorICAgICAgICAqIHN0
cmVzcy9mdGwtcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzOiBBZGRlZC4KKwogMjAyMC0wNi0x
OSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIENo
ZWNrIEdpZ2FjYWdlIHVzYWdlIGJlZm9yZSBsYXVuY2hpbmcgVk0KSW5kZXg6IEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLW9iamVjdC1yYXJlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL29iamVjdC1nZXQtcHJvdG90eXBlLW9m
LW9iamVjdC1yYXJlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L29iamVjdC1nZXQtcHJvdG90eXBlLW9mLW9iamVjdC1yYXJlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzMgQEAKK3ZhciByZWdFeHAgPSAvKD86KS87Cit2YXIgZGF0ZSA9IG5ldyBEYXRl
KCk7Cit2YXIgbWFwID0gbmV3IE1hcCgpOwordmFyIHdlYWtTZXQgPSBuZXcgV2Vha1NldCgpOwor
dmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7CisKK2Z1bmN0aW9uIHRlc3RPYmplY3RV
c2Uob2JqZWN0KSB7CisgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsK
K30KK25vSW5saW5lKHRlc3RPYmplY3RVc2UpOworCitmdW5jdGlvbiB0ZXN0RGVmYXVsdENhc2Uo
dmFsdWUpIHsKKyAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTsKK30KK25v
SW5saW5lKHRlc3REZWZhdWx0Q2FzZSk7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdGVzdE9i
amVjdFVzZShyZWdFeHApOworICAgIHRlc3RPYmplY3RVc2UoZGF0ZSk7CisgICAgdGVzdE9iamVj
dFVzZShtYXApOworICAgIHRlc3RPYmplY3RVc2Uod2Vha1NldCk7CisgICAgdGVzdE9iamVjdFVz
ZShwcm9taXNlKTsKKworICAgIHRlc3REZWZhdWx0Q2FzZShyZWdFeHApOworICAgIHRlc3REZWZh
dWx0Q2FzZShkYXRlKTsKKyAgICB0ZXN0RGVmYXVsdENhc2UobWFwKTsKKyAgICB0ZXN0RGVmYXVs
dENhc2Uod2Vha1NldCk7CisgICAgdGVzdERlZmF1bHRDYXNlKHByb21pc2UpOworfQorbm9Jbmxp
bmUodGVzdCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyArK2kpCisgICAgdGVzdCgpOwpJ
bmRleDogSlNUZXN0cy9zdHJlc3MvZGZnLW9iamVjdC1wcm90b3R5cGUtb2YuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSlNUZXN0cy9zdHJlc3MvZGZnLW9iamVjdC1wcm90b3R5cGUtb2YuanMJKHJldmlzaW9u
IDI2MzI3MykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1vYmplY3QtcHJvdG90eXBlLW9mLmpzCShu
b25leGlzdGVudCkKQEAgLTEsMTE1ICswLDAgQEAKLWZ1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpCi17Ci0gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCi0gICAgICAgIHRocm93
IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKLX0KLQotZnVuY3Rpb24gc2hvdWxk
VGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7Ci0gICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7
Ci0gICAgdmFyIGVycm9yID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgICBmdW5jKCk7Ci0gICAg
fSBjYXRjaCAoZSkgewotICAgICAgICBlcnJvclRocm93biA9IHRydWU7Ci0gICAgICAgIGVycm9y
ID0gZTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvclRocm93bikKLSAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdub3QgdGhyb3duJyk7Ci0gICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2Fn
ZSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1g
KTsKLX0KLQotKGZ1bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0K
LSAgICBub0lubGluZSh0YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsr
aSkKLSAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHt9KSwgT2JqZWN0LnByb3RvdHlwZSk7Ci19KCkp
OwotCi0oZnVuY3Rpb24gKCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAg
IG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKSB7
Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJvcjogbnVs
bCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
ZWN0KScpYCk7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQpLCBg
VHlwZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iamVjdCknKWApOwotICAgIH0KLX0oKSk7Ci0KLShmdW5jdGlvbiAo
KSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBP
YmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0
KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJl
KHRhcmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7Ci19KCkpOwotCi0oZnVuY3Rpb24g
KCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
T2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAgIG5vSW5saW5lKHRhcmdl
dCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKQotICAgICAgICBzaG91bGRC
ZSh0YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKLX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7
Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJlKHRh
cmdldCg0Mi4xOTUpLCBOdW1iZXIucHJvdG90eXBlKTsKLX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7
Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsK
LQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJlKHRh
cmdldCh0cnVlKSwgQm9vbGVhbi5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1bmN0aW9uICgpIHsK
LSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIE9iamVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0YXJnZXQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkKLSAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KFN5bWJvbCgiQ29jb2EiKSksIFN5bWJvbC5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1bmN0
aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0
YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkgewotICAgICAgICBz
aG91bGRCZSh0YXJnZXQoIkNvY29hIiksIFN0cmluZy5wcm90b3R5cGUpOwotICAgICAgICBzaG91
bGRCZSh0YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKLSAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KDQyLjE5NSksIE51bWJlci5wcm90b3R5cGUpOwotICAgICAgICBzaG91bGRCZSh0YXJnZXQo
dHJ1ZSksIEJvb2xlYW4ucHJvdG90eXBlKTsKLSAgICAgICAgc2hvdWxkQmUodGFyZ2V0KFN5bWJv
bCgiQ29jb2EiKSksIFN5bWJvbC5wcm90b3R5cGUpOwotICAgIH0KLX0oKSk7CkluZGV4OiBKU1Rl
c3RzL3N0cmVzcy9kZmctcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEpTVGVzdHMvc3RyZXNzL2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanMJKHJldmlzaW9u
IDI2MzI3MykKKysrIEpTVGVzdHMvc3RyZXNzL2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2Yu
anMJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi1mdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKQotewotICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Ci19Ci0KLWZ1bmN0aW9uIHNo
b3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgewotICAgIHZhciBlcnJvclRocm93biA9IGZh
bHNlOwotICAgIHZhciBlcnJvciA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAgICAgZnVuYygpOwot
ICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOwotICAgICAgICBl
cnJvciA9IGU7Ci0gICAgfQotICAgIGlmICghZXJyb3JUaHJvd24pCi0gICAgICAgIHRocm93IG5l
dyBFcnJvcignbm90IHRocm93bicpOwotICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1l
c3NhZ2UpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJv
cil9YCk7Ci19Ci0KLShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0g
ICAgfQotICAgIG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
MzsgKytpKQotICAgICAgICBzaG91bGRCZSh0YXJnZXQoe30pLCBPYmplY3QucHJvdG90eXBlKTsK
LX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAg
fQotICAgIG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsg
KytpKSB7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJv
cjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUg
YW4gb2JqZWN0YCk7Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQp
LCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3RgKTsKLSAgICB9Ci19KCkpOwotCi0oZnVuY3Rpb24gKCkgewot
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGluZSh0YXJnZXQpOwot
Ci0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkgewotICAgICAgICBzaG91bGRUaHJv
dygoKSA9PiB0YXJnZXQoIkNvY29hIiksIGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBl
T2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOwotICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3Rv
dHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKLSAgICAg
ICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KHRydWUpLCBgVHlwZUVycm9yOiBSZWZsZWN0Lmdl
dFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsK
LSAgICB9Ci19KCkpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvZnRsLW9iamVjdC1nZXQtcHJvdG90
eXBlLW9mLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNzL2Z0bC1vYmplY3QtZ2V0LXBy
b3RvdHlwZS1vZi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9mdGwtb2JqZWN0
LWdldC1wcm90b3R5cGUtb2YuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDUgQEAKK2Z1
bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0g
ZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFs
KTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAg
dmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkg
eworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93
biA9IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93
bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmlu
ZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQg
ZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKK30KKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5j
dGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90
b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoe30p
LCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KChmdW5jdGlvbigp
IHt9KS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KChjbGFzcyB7fSkucHJvdG90eXBlKSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgfQorfSgp
KTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAg
ICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIEYgPSBmdW5jdGlvbigpIHt9OworICAgIHZh
ciBDID0gY2xhc3Mge307CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgRigpKSwgRi5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQobmV3IEMoKSksIEMucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCiso
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5s
aW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAg
ICAgIHNob3VsZEJlKHRhcmdldChBcnJheS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KFtdKSwgQXJyYXkucHJvdG90eXBlKTsKKyAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KEFycmF5KDMpKSwgQXJyYXkucHJvdG90eXBlKTsKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KG5ldyBBcnJheSgxLCAyLCAzKSksIEFycmF5LnByb3RvdHlwZSk7CisgICAg
fQorfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAg
IH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LnByb3RvdHlwZSksIG51bGwp
OworICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LmNyZWF0ZShudWxsKSksIG51bGwpOwor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQoT2JqZWN0LnNldFByb3RvdHlwZU9mKHt9LCBudWxsKSks
IG51bGwpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoe19fcHJvdG9fXzogbnVsbH0pLCBudWxs
KTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVj
dCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChmdW5jdGlvbigpIHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KGNsYXNzIHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KCgpID0+IHt9KSwg
RnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAg
IGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAg
ICB2YXIgcmVnRXhwID0gLyg/OikvOworICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICB2
YXIgbWFwID0gbmV3IE1hcCgpOworICAgIHZhciB3ZWFrU2V0ID0gbmV3IFdlYWtTZXQoKTsKKyAg
ICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTsKKworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHJlZ0V4cCksIFJlZ0V4
cC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoZGF0ZSksIERhdGUucHJvdG90
eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KG1hcCksIE1hcC5wcm90b3R5cGUpOworICAg
ICAgICBzaG91bGRCZSh0YXJnZXQod2Vha1NldCksIFdlYWtTZXQucHJvdG90eXBlKTsKKyAgICAg
ICAgc2hvdWxkQmUodGFyZ2V0KHByb21pc2UpLCBQcm9taXNlLnByb3RvdHlwZSk7CisgICAgfQor
fSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0K
KyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZnVuY3Rpb24gbWFrZVBvbHlQcm90b09iamVj
dCgpIHsKKyAgICAgICAgZnVuY3Rpb24gZm9vKCkgeworICAgICAgICAgICAgY2xhc3MgQyB7Cisg
ICAgICAgICAgICAgICAgY29uc3RydWN0b3IoKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2ZpZWxkID0gNDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbGFzdFByb3RvID0gQy5wcm90b3R5cGU7CisgICAgICAgICAgICByZXR1cm4gbmV3IEMoKTsK
KyAgICAgICAgfQorICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkKKyAgICAg
ICAgICAgIGZvbygpOworICAgICAgICByZXR1cm4gZm9vKCk7CisgICAgfQorCisgICAgdmFyIHBv
bHlQcm90b09iamVjdCA9IG1ha2VQb2x5UHJvdG9PYmplY3QoKTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdldChwb2x5UHJvdG9PYmpl
Y3QpLCBwb2x5UHJvdG9PYmplY3QuY29uc3RydWN0b3IucHJvdG90eXBlKTsKK30oKSk7CisKKyhm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9Jbmxp
bmUodGFyZ2V0KTsKKworICAgIHZhciBwcm94eVByb3RvdHlwZSA9IHt9OworICAgIHZhciBwcm94
eSA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBnZXRQcm90b3R5cGVPZjogKCkgPT4gcHJveHlQ
cm90b3R5cGUsCisgICAgfSk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQocHJveHkpLCBwcm94eVByb3RvdHlwZSk7Cit9KCkpOwor
CisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAg
ICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5v
SW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7Cisg
ICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldChudWxsKSwgYFR5cGVFcnJvcjogbnVsbCBp
cyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0
KScpYCk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCh1bmRlZmluZWQpLCBgVHlw
ZUVycm9yOiB1bmRlZmluZWQgaXMgbm90IGFuIG9iamVjdCAoZXZhbHVhdGluZyAnT2JqZWN0Lmdl
dFByb3RvdHlwZU9mKG9iamVjdCknKWApOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmpl
Y3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsK
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRh
cmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRCZSh0
YXJnZXQoNDIpLCBOdW1iZXIucHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCg0Mi4xOTUpLCBOdW1iZXIucHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7Cisg
ICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3Qu
Z2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCh0cnVlKSwgQm9vbGVhbi5wcm90b3R5cGUpOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAg
ICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5n
ZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KFN5bWJvbCgpKSwgU3ltYm9sLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0
LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRh
cmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdl
dCg0MiksIE51bWJlci5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoNDIuMTk1
KSwgTnVtYmVyLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh0cnVlKSwgQm9v
bGVhbi5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoU3ltYm9sKCkpLCBTeW1i
b2wucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KDFuKSwgQmlnSW50LnByb3Rv
dHlwZSk7CisgICAgfQorfSgpKTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL2Z0bC1yZWZsZWN0LWdl
dC1wcm90b3R5cGUtb2YuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZnRsLXJlZmxl
Y3QtZ2V0LXByb3RvdHlwZS1vZi5qcwkobm9uZXhpc3RlbnQpCisrKyBKU1Rlc3RzL3N0cmVzcy9m
dGwtcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjQ1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTog
JyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2Fn
ZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7
CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICgh
ZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAg
IGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBF
cnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9CisKKyhmdW5jdGlvbiAoKSB7
CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZs
ZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJl
KHRhcmdldCh7fSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQo
KGZ1bmN0aW9uKCkge30pLnByb3RvdHlwZSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQoKGNsYXNzIHt9KS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3Qp
OworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIEYgPSBmdW5jdGlvbigp
IHt9OworICAgIHZhciBDID0gY2xhc3Mge307CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFl
NTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgRigpKSwgRi5wcm90b3R5cGUp
OworICAgICAgICBzaG91bGRCZSh0YXJnZXQobmV3IEMoKSksIEMucHJvdG90eXBlKTsKKyAgICB9
Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisg
ICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAg
IH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7
ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQoQXJyYXkucHJvdG90eXBlKSwgT2JqZWN0
LnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChbXSksIEFycmF5LnByb3RvdHlw
ZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChBcnJheSgzKSksIEFycmF5LnByb3RvdHlwZSk7
CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgQXJyYXkoMSwgMiwgMykpLCBBcnJheS5wcm90
b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFy
Z2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
KG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QucHJv
dG90eXBlKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QuY3JlYXRlKG51
bGwpKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3Quc2V0UHJvdG90eXBl
T2Yoe30sIG51bGwpKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh7X19wcm90b19f
OiBudWxsfSksIG51bGwpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVu
Y3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFBy
b3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChm
dW5jdGlvbigpIHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KGNsYXNzIHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KCgpID0+IHt9KSwgRnVuY3Rpb24ucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOworCisoZnVu
Y3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICBy
ZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGlu
ZSh0YXJnZXQpOworCisgICAgdmFyIHJlZ0V4cCA9IC8oPzopLzsKKyAgICB2YXIgZGF0ZSA9IG5l
dyBEYXRlKCk7CisgICAgdmFyIG1hcCA9IG5ldyBNYXAoKTsKKyAgICB2YXIgd2Vha1NldCA9IG5l
dyBXZWFrU2V0KCk7CisgICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoMSk7CisKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdl
dChyZWdFeHApLCBSZWdFeHAucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KGRh
dGUpLCBEYXRlLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChtYXApLCBNYXAu
cHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHdlYWtTZXQpLCBXZWFrU2V0LnBy
b3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChwcm9taXNlKSwgUHJvbWlzZS5wcm90
b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFy
Z2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
KG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmdW5jdGlvbiBt
YWtlUG9seVByb3RvT2JqZWN0KCkgeworICAgICAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAg
ICAgICBjbGFzcyBDIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgdGhpcy5fZmllbGQgPSA0MjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsYXN0UHJvdG8gPSBDLnByb3RvdHlwZTsKKyAgICAgICAgICAg
IHJldHVybiBuZXcgQygpOworICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
MTAwMDsgKytpKQorICAgICAgICAgICAgZm9vKCk7CisgICAgICAgIHJldHVybiBmb28oKTsKKyAg
ICB9CisKKyAgICB2YXIgcG9seVByb3RvT2JqZWN0ID0gbWFrZVBvbHlQcm90b09iamVjdCgpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkQmUodGFy
Z2V0KHBvbHlQcm90b09iamVjdCksIHBvbHlQcm90b09iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5
cGUpOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsK
KyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIHZhciBwcm94eVByb3RvdHlwZSA9
IHt9OworICAgIHZhciBwcm94eSA9IG5ldyBQcm94eSh7fSwgeworICAgICAgICBnZXRQcm90b3R5
cGVPZjogKCkgPT4gcHJveHlQcm90b3R5cGUsCisgICAgfSk7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRCZSh0YXJnZXQocHJveHkpLCBwcm94eVBy
b3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmpl
Y3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxZTU7ICsraSkgeworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQobnVsbCks
IGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQo
dW5kZWZpbmVkKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0
aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgfQorfSgpKTsKKworKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUo
dGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNo
b3VsZFRocm93KCgpID0+IHRhcmdldCgiQ29jb2EiKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQ
cm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9
KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAg
eworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0K
KyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsr
aSkKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyKSwgYFR5cGVFcnJvcjogUmVm
bGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2Jq
ZWN0YCk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3Qp
OworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyLjE5NSksIGBU
eXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdGApOworfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlv
biB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90
eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdl
dCh0cnVlKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkVGhyb3co
KCkgPT4gdGFyZ2V0KFN5bWJvbCgpKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVP
ZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9KCkpOworCiso
ZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAg
ICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lu
bGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
ICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoIkNvY29hIiksIGBUeXBlRXJyb3I6IFJlZmxl
Y3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVj
dGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIpLCBgVHlwZUVycm9yOiBS
ZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBv
YmplY3RgKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KDQyLjE5NSksIGBUeXBl
RXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50
IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQodHJ1ZSks
IGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFy
Z3VtZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQo
U3ltYm9sKCkpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRo
ZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkg
PT4gdGFyZ2V0KDFuKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJl
cyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgfQorfSgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMjczKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBACisyMDIw
LTA2LTIxICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKworICAgICAg
ICBBZGQgREZHL0ZUTCBmYXN0IHBhdGggZm9yIEdldFByb3RvdHlwZU9mIGJhc2VkIG9uIE92ZXJy
aWRlc0dldFByb3RvdHlwZSBmbGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTMxOTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAgIDEuIEludHJvZHVjZXMgYGxvYWRJ
bmxpbmVPZmZzZXRgIExMSW50IG1hY3JvICg2NC1iaXQgb25seSkgYW5kIHV0aWxpemVzIGl0IGlu
CisgICAgICAgICAgIGBnZXRfcHJvdG90eXBlX29mYCBzaW5jZSB3ZSBhc3NlcnQgdGhhdCBga25v
d25Qb2x5UHJvdG9PZmZzZXRgIGlzIGFuIGlubGluZSBvZmZzZXQuCisKKyAgICAgICAgMi4gQnJp
bmdzIGJhc2VsaW5lIEpJVCBmYXN0IHBhdGggdG8gMzItYml0IGJ1aWxkcywgcHJvZ3Jlc3Npbmcg
YHN1cGVyLWdldHRlci5qc2AKKyAgICAgICAgICAgbWljcm9iZW5jaG1hcmsgYnkgYSBmYWN0b3Ig
b2YgMTAgKHcvbyBERkcpLgorCisgICAgICAgIDMuIEFkZHMgR2V0UHJvdG90eXBlT2YgREZHL0ZU
TCBmYXN0IHBhdGhzIHRoYXQgbGV2ZXJhZ2UgT3ZlcnJpZGVzR2V0UHJvdG90eXBlIHR5cGUKKyAg
ICAgICAgICAgaW5mbyBmbGFnLCBhZHZhbmNpbmcgcHJvdmlkZWQgcmFyZSBvYmplY3RzIG1pY3Jv
YmVuY2htYXJrIGJ5IH40NiUgKH4zNyUgdy9vIEZUTCkuCisgICAgICAgICAgIEFsc28sIGNsZWFu
cyB1cCBleGlzdGluZyBERkcgZmFzdCBwYXRoIGJ5IHVzaW5nIEFzc2VtYmx5SGVscGVyczo6bG9h
ZFZhbHVlKCkuCisKKyAgICAgICAgNC4gRXh0cmFjdHMgQXNzZW1ibHlIZWxwZXJzOjplbWl0TG9h
ZFByb3RvdHlwZSgpIGFuZCB1c2VzIGl0IGluIGJhc2VsaW5lIEpJVCwgREZHLCBhbmQKKyAgICAg
ICAgICAgSW5zdGFuY2VPZkdlbmVyaWMgYWNjZXNzIGNhc2UuIFRvIG1ha2UgaXQgd29yayB3aXRo
IHRoZSBsYXR0ZXIsIGhlbHBlcidzIHNpZ25hdHVyZQorICAgICAgICAgICBpcyBtYWRlIHNpbWls
YXIgdG8gZW1pdExvYWRTdHJ1Y3R1cmUoKSBhcyB3ZSBuZWVkIHRvIGFjY2VwdCBsb2NrZWQgc2Ny
YXRjaCByZWdpc3Rlci4KKworICAgICAgICAgICBXaXRoIHRoaXMgY2hhbmdlLCBgaW5zdGFuY2Vv
ZmAgYWNjZXNzIGNhc2UgaGFuZGxlcyBhbGwgW1tHZXRQcm90b3R5cGVPZl1dIG92ZXJyaWRlcwor
ICAgICAgICAgICAoYmVmb3JlOiBvbmx5IFByb3h5IG9iamVjdHMpLCB3aGljaCBpcyBtb3JlIGNv
cnJlY3QsIHlldCBub3Qgb2JzZXJ2YWJsZSBlbm91Z2ggdG8KKyAgICAgICAgICAgcHJvdmlkZSBh
IHRlc3QgY2FzZS4gYGluc3RhbmNlb2ZgIG1pY3JvYmVuY2htYXJrcyBhcmUgbmV1dHJhbC4KKwor
ICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAgICAgICAoSlNDOjpBY2Nlc3ND
YXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3Rv
dHlwZU9mKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpjb21waWxlR2V0UHJvdG90eXBlT2YpOgorICAgICAgICAqIGppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2Fk
UHJvdG90eXBlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgICog
aml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93Q2FzZXMpOgorICAgICAgICAq
IGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9wcm90
b3R5cGVfb2YpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisK
IDIwMjAtMDYtMTggIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVu
aWZ5IEJpdG1hcCBtYXRoIGxvb3BzIGluIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVk
U3dlZXAoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY2Nlc3NDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNz
Q2FzZS5jcHAJKHJldmlzaW9uIDI2MzI3MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY2Nlc3NDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI3OCwzNiArMTI3OCwxMyBA
QCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlV2l0aEd1YXJkKAogICAgICAgICAgICAgYWxsb2Nh
dG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKAogICAgICAgICAgICAgICAgIGpp
dCwKICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3I6OkV4dHJhU3RhY2tT
cGFjZTo6Tm9FeHRyYVNwYWNlKTsKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWxBbmRJ
Z25vcmU7CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZmFpbEFuZElnbm9yZTsKIAog
ICAgICAgICBqaXQubW92ZShiYXNlR1BSLCB2YWx1ZUdQUik7CiAgICAgICAgIAogICAgICAgICBD
Q2FsbEhlbHBlcnM6OkxhYmVsIGxvb3AoJmppdCk7Ci0gICAgICAgIGZhaWxBbmRJZ25vcmUgPSBq
aXQuYnJhbmNoSWZUeXBlKHZhbHVlR1BSLCBQcm94eU9iamVjdFR5cGUpOwotICAgICAgICAKLSAg
ICAgICAgaml0LmVtaXRMb2FkU3RydWN0dXJlKHZtLCB2YWx1ZUdQUiwgc2NyYXRjaDJHUFIsIHNj
cmF0Y2hHUFIpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGppdC5sb2FkNjQoQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgp
KSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGFzTW9ub1Byb3Rv
ID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8sIHNjcmF0Y2gyR1BSKTsK
LSAgICAgICAgaml0LmxvYWQ2NCgKLSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyh2
YWx1ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwKLSAg
ICAgICAgICAgIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaGFzTW9ub1Byb3RvLmxpbmsoJmppdCk7
Ci0jZWxzZQotICAgICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgVGFnT2Zm
c2V0KSwKLSAgICAgICAgICAgIHNjcmF0Y2hHUFIpOwotICAgICAgICBqaXQubG9hZDMyKAotICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZU9mZnNldCgpICsgUGF5bG9hZE9mZnNldCksCi0gICAgICAgICAgICBzY3JhdGNoMkdQ
Uik7Ci0gICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBoYXNNb25vUHJvdG8gPSBqaXQuYnJhbmNo
MzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgICAg
IGppdC5sb2FkMzIoCi0gICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoCi0gICAgICAg
ICAgICAgICAgdmFsdWVHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zm
c2V0KSArIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgc2NyYXRjaDJHUFIpOwotICAgICAg
ICBoYXNNb25vUHJvdG8ubGluaygmaml0KTsKLSNlbmRpZgorCisgICAgICAgIGppdC5lbWl0TG9h
ZFByb3RvdHlwZSh2bSwgdmFsdWVHUFIsIHNjcmF0Y2gyR1BSLCBzY3JhdGNoR1BSLCBmYWlsQW5k
SWdub3JlKTsKICAgICAgICAgaml0Lm1vdmUoc2NyYXRjaDJHUFIsIHZhbHVlR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBpc0luc3RhbmNlID0gaml0LmJyYW5jaFB0
cihDQ2FsbEhlbHBlcnM6OkVxdWFsLCB2YWx1ZUdQUiwgcHJvdG90eXBlR1BSKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiAyNjMyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4NzYsMTcgKzEzODc2LDI0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVXZWFrTWFwU2V0KE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFByb3RvdHlwZU9mKE5vZGUqIG5vZGUpCiB7CisgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CisgICAgR1BSVGVtcG9yYXJ5IHRlbXAyKHRoaXMpOworCisgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigpOwor
CisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXBHUFIp
OworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHRlbXAyR1BSLCB0ZW1wR1BSKTsK
KyNlbmRpZgorCiAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICBj
YXNlIEFycmF5VXNlOgogICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgY2FzZSBGaW5hbE9iamVj
dFVzZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvYmplY3QodGhpcywgbm9kZS0+
Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAyKHRoaXMpOwotCiAgICAgICAgIEdQUlJlZyBvYmplY3RHUFIgPSBvYmpl
Y3QuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAgICAg
R1BSUmVnIHRlbXAyR1BSID0gdGVtcDIuZ3ByKCk7CiAKICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgY2FzZSBBcnJheVVzZToKQEAgLTEzOTE3LDc0
ICsxMzkyNCw1MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0UHJvdG90eXBlCiAg
ICAgICAgICAgICB9KTsKIAogICAgICAgICAgICAgaWYgKGhhc01vbm9Qcm90byAmJiAhaGFzUG9s
eVByb3RvKSB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2Fk
NjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVP
ZmZzZXQoKSksIHRlbXBHUFIpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodGVtcEdQ
Uiwgbm9kZSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsgVGFn
T2Zmc2V0KSwgdGVtcDJHUFIpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpICsg
UGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOwotICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQo
dGVtcDJHUFIsIHRlbXBHUFIsIG5vZGUpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgbV9qaXQu
bG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJv
dG90eXBlT2Zmc2V0KCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFJlZ3MsIG5vZGUpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGhhc1BvbHlQcm90byAmJiAhaGFzTW9ub1Byb3RvKSB7
Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkNjQoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQ
cm90b09mZnNldCkpLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHRl
bXBHUFIsIG5vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQ
cm90b09mZnNldCkgKyBUYWdPZmZzZXQpLCB0ZW1wMkdQUik7Ci0gICAgICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVU
b0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOwot
ICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQodGVtcDJHUFIsIHRlbXBHUFIsIG5vZGUpOwot
I2VuZGlmCisgICAgICAgICAgICAgICAgbV9qaXQubG9hZFZhbHVlKEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQp
KSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRSZWdz
LCBub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSwgdGVt
cEdQUik7Ci0gICAgICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gbV9qaXQuYnJhbmNoSWZOb3RFbXB0
eSh0ZW1wR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjpBZGRyZXNzKG9i
amVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwgdGVt
cEdQUik7Ci0gICAgICAgIGhhc01vbm9Qcm90by5saW5rKCZtX2ppdCk7Ci0gICAgICAgIGpzVmFs
dWVSZXN1bHQodGVtcEdQUiwgbm9kZSk7Ci0jZWxzZQotICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQo
KSArIFRhZ09mZnNldCksIHRlbXAyR1BSKTsKLSAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkgKyBQ
YXlsb2FkT2Zmc2V0KSwgdGVtcEdQUik7Ci0gICAgICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gbV9q
aXQuYnJhbmNoSWZOb3RFbXB0eSh0ZW1wMkdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9s
eVByb3RvT2Zmc2V0KSArIFRhZ09mZnNldCksIHRlbXAyR1BSKTsKLSAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uo
a25vd25Qb2x5UHJvdG9PZmZzZXQpICsgUGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0
dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlc3VsdFJlZ3MpOworICAgICAgICBhdXRvIGhhc01v
bm9Qcm90byA9IG1faml0LmJyYW5jaElmTm90RW1wdHkocmVzdWx0UmVncyk7CisgICAgICAgIG1f
aml0LmxvYWRWYWx1ZShKSVRDb21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSksIHJlc3VsdFJlZ3MpOwogICAgICAgICBo
YXNNb25vUHJvdG8ubGluaygmbV9qaXQpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXAyR1BS
LCB0ZW1wR1BSLCBub2RlKTsKLSNlbmRpZgorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJl
Z3MsIG5vZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNhc2UgT2JqZWN0VXNlOiB7
Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRoIGJhc2VkIG9uIE92ZXJyaWRlc0dldFBy
b3RvdHlwZSB0eXBlIGluZm8gZmxhZwotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMTkxCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3NUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOwotCi0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwot
ICAgICAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzID0gcmVzdWx0LnJlZ3MoKTsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgR1BSUmVnIG9iamVjdEdQUiA9IG9iamVjdC5ncHIoKTsKKyAgICAgICAgc3BlY3VsYXRlT2Jq
ZWN0KG5vZGUtPmNoaWxkMSgpLCBvYmplY3RHUFIpOwogCi0gICAgICAgIHNwZWN1bGF0ZU9iamVj
dChub2RlLT5jaGlsZDEoKSwgdmFsdWVHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3Qgc2xvd0Nhc2VzOworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCBvYmpl
Y3RHUFIsIHRlbXBHUFIsIHRlbXAyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRQcm90
b3R5cGVPZk9iamVjdCwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6Ondl
YWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpLCBvYmplY3RHUFIpKTsKIAotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCByZXN1bHRS
ZWdzLCBUcnVzdGVkSW1tUHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKSwgdmFsdWVHUFIpOwotICAgICAgICBtX2pp
dC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5v
ZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGRlZmF1bHQ6IHsKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKU1ZhbHVl
UmVnc1RlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0KICAgICAgICAgSlNWYWx1ZVJlZ3MgdmFsdWVS
ZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVn
cyA9IHJlc3VsdC5yZWdzKCk7CiAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm90b3R5cGVPZiwgcmVzdWx0UmVncywgVHJ1c3Rl
ZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVncyk7Ci0gICAgICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncykpOwor
CisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlUmVncy5wYXlsb2FkR1BSKCk7CisgICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RPYmplY3QodmFsdWVHUFIpKTsK
KworICAgICAgICBtX2ppdC5lbWl0TG9hZFByb3RvdHlwZSh2bSgpLCB2YWx1ZUdQUiwgdGVtcEdQ
UiwgdGVtcDJHUFIsIHNsb3dDYXNlcyk7CisgICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNs
b3dQYXRoQ2FsbChzbG93Q2FzZXMsIHRoaXMsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mLAorICAg
ICAgICAgICAgcmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwg
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlUmVn
cykpOworCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0UmVncywgbm9kZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjYzMjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0Miw2ICsxNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxP
YmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9pbmRleGluZ01vZGVJbmNsdWRp
bmdIaXN0b3J5LCBTdHJ1Y3R1cmU6OmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnlPZmZzZXQo
KSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9pbmxpbmVDYXBhY2l0eSwgU3RydWN0dXJlOjppbmxp
bmVDYXBhY2l0eU9mZnNldCgpKSBcCisgICAgbWFjcm8oU3RydWN0dXJlX291dE9mTGluZVR5cGVG
bGFncywgU3RydWN0dXJlOjpvdXRPZkxpbmVUeXBlRmxhZ3NPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cnVjdHVyZV9wcmV2aW91c09yUmFyZURhdGEsIFN0cnVjdHVyZTo6cHJldmlvdXNPclJhcmVE
YXRhT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBT
dHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDI2MzI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDM3OSwxMSArNDM3OSwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZUdldFBy
b3RvdHlwZU9mKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisKKyAg
ICAgICAgTFZhbHVlIG9iamVjdCA9IG51bGxwdHI7CisgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUg
PSBudWxscHRyOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0OworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxvYWRQb2x5UHJvdG8gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShjb250aW51YXRp
b24pOworCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAg
ICAgICAgY2FzZSBBcnJheVVzZToKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAg
Y2FzZSBGaW5hbE9iamVjdFVzZTogewotICAgICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBvYmplY3QgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheVVzZToKICAgICAgICAgICAgICAgICBzcGVj
dWxhdGVBcnJheShtX25vZGUtPmNoaWxkMSgpLCBvYmplY3QpOwpAQCAtNDM5OSw3ICs0NDA4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgTFZhbHVlIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUob2JqZWN0KTsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUob2JqZWN0KTsKIAogICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgICAgICBpZiAoKHZhbHVlLm1fdHlwZSAmJiAhKHZhbHVlLm1fdHlwZSAmIH5TcGVj
T2JqZWN0KSkgJiYgdmFsdWUubV9zdHJ1Y3R1cmUuaXNGaW5pdGUoKSkgewpAQCAtNDQyMywzMyAr
NDQzMiw3MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsK
LSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGxvYWRQb2x5UHJvdG8gPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBPYmplY3RVc2U6
IHsKKyAgICAgICAgICAgIG9iamVjdCA9IGxvd09iamVjdChtX25vZGUtPmNoaWxkMSgpKTsKIAot
ICAgICAgICAgICAgTFZhbHVlIHByb3RvdHlwZUJpdHMgPSBtX291dC5sb2FkNjQoc3RydWN0dXJl
LCBtX2hlYXBzLlN0cnVjdHVyZV9wcm90b3R5cGUpOwotICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZGlyZWN0UHJvdG90eXBlID0gbV9vdXQuYW5jaG9yKHByb3RvdHlwZUJpdHMpOwotICAgICAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmlzWmVybzY0KHByb3RvdHlwZUJpdHMpLCB1bnN1cmUo
bG9hZFBvbHlQcm90byksIHVuc3VyZShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGZhc3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKIAotICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhsb2FkUG9seVByb3RvLCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG9seVByb3RvID0gbV9vdXQuYW5jaG9yKAot
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9w
ZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9iamVjdCwgbV9vdXQuY29uc3RJbnQ2NChrbm93blBvbHlQ
cm90b09mZnNldCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRPZklubGluZVN0b3JhZ2Uo
KSkpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUob2JqZWN0KTsKKyAg
ICAgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJv
MzIoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQxNlplcm9FeHQzMihzdHJ1Y3R1cmUs
IG1faGVhcHMuU3RydWN0dXJlX291dE9mTGluZVR5cGVGbGFncyksCisgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50MzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5lKSksCisg
ICAgICAgICAgICAgICAgdXN1YWxseShmYXN0UGF0aCksIHJhcmVseShzbG93UGF0aCkpOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25H
ZXRQcm90b3R5cGVPZk9iamVjdCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgb2JqZWN0KSk7
CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgc2V0SlNW
YWx1ZShtX291dC5waGkoSW50NjQsIGRpcmVjdFByb3RvdHlwZSwgcG9seVByb3RvKSk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBPYmplY3RVc2U6IHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRoIGJhc2VkIG9uIE92ZXJyaWRlc0dldFBy
b3RvdHlwZSB0eXBlIGluZm8gZmxhZwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE5MQotICAgICAgICAgICAgc2V0SlNWYWx1ZSh2bUNh
bGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCB3ZWFrUG9pbnRlcihnbG9i
YWxPYmplY3QpLCBsb3dPYmplY3QobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBsb2FkUG9seVByb3Rv
KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6IHsKLSAg
ICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm90b3R5cGVP
Ziwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgp
KSkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgb2JqZWN0ID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlVHlw
ZSA9IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGlzQ2VsbFBhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJhc2ljQmxv
Y2sgaXNPYmplY3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Js
b2NrIGZhc3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgbV9vdXQuYnJhbmNo
KGlzQ2VsbChvYmplY3QsIHZhbHVlVHlwZSksIHVzdWFsbHkoaXNDZWxsUGF0aCksIHJhcmVseShz
bG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsUGF0aCwgaXNPYmpl
Y3RQYXRoKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdChvYmplY3QsIHZhbHVl
VHlwZSksIHVzdWFsbHkoaXNPYmplY3RQYXRoKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzT2JqZWN0UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgICAgIHN0cnVjdHVyZSA9IGxvYWRTdHJ1Y3R1cmUob2JqZWN0KTsKKyAgICAgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgICAgICBtX291dC50ZXN0SXNaZXJvMzIoCisgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWQxNlplcm9FeHQzMihzdHJ1Y3R1cmUsIG1faGVhcHMuU3Ry
dWN0dXJlX291dE9mTGluZVR5cGVGbGFncyksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoT3ZlcnJpZGVzR2V0UHJvdG90eXBlT3V0T2ZMaW5lKSksCisgICAgICAgICAgICAg
ICAgdXN1YWxseShmYXN0UGF0aCksIHJhcmVseShzbG93UGF0aCkpOworCisgICAgICAgICAgICBt
X291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgICAgIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm90b3R5cGVP
Ziwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgb2JqZWN0KSk7CisgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQ
YXRoLCBsb2FkUG9seVByb3RvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIH0KKworICAgICAgICBBU1NFUlQob2JqZWN0KTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSk7CisKKyAgICAgICAgTFZhbHVlIHByb3RvdHlwZUJpdHMgPSBtX291dC5sb2FkNjQoc3RydWN0
dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9wcm90b3R5cGUpOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBtb25vUHJvdG8gPSBtX291dC5hbmNob3IocHJvdG90eXBlQml0cyk7CisgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5pc1plcm82NChwcm90b3R5cGVCaXRzKSwgdW5zdXJlKGxvYWRQb2x5UHJv
dG8pLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9h
ZFBvbHlQcm90bywgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG9seVBy
b3RvID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgb2JqZWN0LCBtX291dC5jb25z
dEludDY0KGtub3duUG9seVByb3RvT2Zmc2V0KSwgU2NhbGVFaWdodCwgSlNPYmplY3Q6Om9mZnNl
dE9mSW5saW5lU3RvcmFnZSgpKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBtb25vUHJvdG8sIHBvbHlQcm90bywgc2xv
d1Jlc3VsdCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRBcnJheUxlbmd0aCgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3Bw
CShyZXZpc2lvbiAyNjMyNzMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5Miw2ICszOTIsMjcgQEAgdm9pZCBBc3Nl
bWJseUhlbHBlcnM6OmVtaXRMb2FkU3RydWN0dXJlKAogI2VuZGlmIC8vIG5vdCBVU0UoSlNWQUxV
RTY0KQogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdExvYWRQcm90b3R5cGUoVk0mIHZt
LCBSZWdpc3RlcklEIHNvdXJjZSwgUmVnaXN0ZXJJRCBkZXN0LCBSZWdpc3RlcklEIHNjcmF0Y2gs
IEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAgICBlbWl0TG9hZFN0cnVjdHVyZSh2bSwgc291cmNl
LCBkZXN0LCBzY3JhdGNoKTsKKworICAgIGF1dG8gb3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhkZXN0LCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFnc09mZnNldCgpKSwK
KyAgICAgICAgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc0dldFByb3RvdHlwZU91dE9mTGluZSkpOwor
ICAgIHNsb3dQYXRoLmFwcGVuZChvdmVycmlkZXNHZXRQcm90b3R5cGUpOworCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKGRlc3QpOworI2Vsc2UKKyAgICBK
U1ZhbHVlUmVncyByZXN1bHRSZWdzKHNjcmF0Y2gsIGRlc3QpOworI2VuZGlmCisKKyAgICBsb2Fk
VmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoZGVzdCwgU3RydWN0dXJlOjpwcm90b3R5cGVP
ZmZzZXQoKSksIHJlc3VsdFJlZ3MpOworICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gYnJhbmNoSWZO
b3RFbXB0eShyZXN1bHRSZWdzKTsKKyAgICBsb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc291cmNlLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQcm90b09mZnNldCkpLCBy
ZXN1bHRSZWdzKTsKKyAgICBoYXNNb25vUHJvdG8ubGluayh0aGlzKTsKK30KKwogdm9pZCBBc3Nl
bWJseUhlbHBlcnM6Om1ha2VTcGFjZU9uU3RhY2tGb3JDQ2FsbCgpCiB7CiAgICAgdW5zaWduZWQg
c3RhY2tPZmZzZXQgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBtYXhGcmFtZUV4dGVudEZvclNsb3dQYXRoQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2MzI3MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2NjgsNiArMTY2OCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0
TG9hZFN0cnVjdHVyZShWTSYsIFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJl
Z2lzdGVySUQgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0TG9hZFByb3RvdHlwZShWTSYsIFJlZ2lz
dGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCwgSnVtcExp
c3QmIHNsb3dQYXRoKTsKIAogICAgIHZvaWQgZW1pdFN0b3JlU3RydWN0dXJlV2l0aFR5cGVJbmZv
KFRydXN0ZWRJbW1QdHIgc3RydWN0dXJlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjYzMjczKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MTgsOSArMzE4LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICBERUZJTkVfU0xPV19PUChjcmVhdGVfYXN5bmNfZ2VuZXJhdG9yKQogICAgICAgICBERUZJTkVf
U0xPV19PUChuZXdfZ2VuZXJhdG9yKQogICAgICAgICBERUZJTkVfU0xPV19PUChwb3cpCi0jaWYg
IVVTRShKU1ZBTFVFNjQpCi0gICAgICAgIERFRklORV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2Yp
Ci0jZW5kaWYKIAogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Ao
b3BfYml0bm90KQpAQCAtMzYwLDYgKzM1Nyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2dldF9ieV9pZF93aXRoX3RoaXMpCiAgICAg
ICAgIERFRklORV9PUChvcF9nZXRfYnlfaWRfZGlyZWN0KQogICAgICAgICBERUZJTkVfT1Aob3Bf
Z2V0X2J5X3ZhbCkKKyAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcm90b3R5cGVfb2YpCiAgICAg
ICAgIERFRklORV9PUChvcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKQogICAgICAgICBERUZJTkVf
T1Aob3BfaW5zdGFuY2VvZikKICAgICAgICAgREVGSU5FX09QKG9wX2luc3RhbmNlb2ZfY3VzdG9t
KQpAQCAtNDc0LDkgKzQ3Miw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkKICAgICAg
ICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQogCi0jaWYgVVNFKEpTVkFM
VUU2NCkKLSAgICAgICAgREVGSU5FX09QKG9wX2dldF9wcm90b3R5cGVfb2YpCi0jZW5kaWYKICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIH0KQEAgLTYyNSwxNSArNjIwLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVNsb3dDYXNlcygpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKHN0cmljdGVxKQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUChuc3RyaWN0ZXEpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKGdldF9kaXJlY3RfcG5hbWUpCisgICAgICAgIERFRklORV9TTE9X
Q0FTRV9TTE9XX09QKGdldF9wcm90b3R5cGVfb2YpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGhhc19zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9T
TE9XX09QKGhhc19vd25fc3RydWN0dXJlX3Byb3BlcnR5KQogICAgICAgICBERUZJTkVfU0xPV0NB
U0VfU0xPV19PUChpbl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FT
RV9TTE9XX09QKHJlc29sdmVfc2NvcGUpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGNoZWNrX3RkeikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AodG9fcHJvcGVydHlf
a2V5KQotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09Q
KGdldF9wcm90b3R5cGVfb2YpCi0jZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjYzMjczKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUyNSwyNiArMTUyNSw2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoY29u
c3QKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCi17Ci0gICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRQcm90b3R5cGVPZj4oKTsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2Rl
Lm1fdmFsdWUsIHJlZ1QwKTsKLQotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdU
MCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90T2JqZWN0KHJlZ1QwKSk7Ci0KLSAgICBl
bWl0TG9hZFN0cnVjdHVyZSh2bSgpLCByZWdUMCwgcmVnVDIsIHJlZ1QxKTsKLSAgICBhZGRTbG93
Q2FzZShicmFuY2hUZXN0MzIoTm9uWmVybywgQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpvdXRP
ZkxpbmVUeXBlRmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihPdmVycmlkZXNHZXRQcm90b3R5
cGVPdXRPZkxpbmUpKSk7Ci0KLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMiwgU3RydWN0dXJlOjpw
cm90b3R5cGVPZmZzZXQoKSksIHJlZ1QyKTsKLSAgICBKdW1wIGhhc01vbm9Qcm90byA9IGJyYW5j
aFRlc3Q2NChOb25aZXJvLCByZWdUMik7Ci0gICAgbG9hZDY0KEFkZHJlc3MocmVnVDAsIG9mZnNl
dFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSksIHJlZ1QyKTsKLSAgICBoYXNN
b25vUHJvdG8ubGluayh0aGlzKTsKLQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKLSAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLm1f
ZHN0LCByZWdUMik7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJl
UG5hbWU+KCk7CkBAIC0xNzY1LDYgKzE3NDUsMjkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Fy
Z3VtZW50KGNvbnN0IElucwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZXN1bHRS
ZWdzKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Byb3RvdHlwZV9vZihjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UHJvdG90eXBlT2Y+KCk7CisjaWYgVVNFKEpTVkFMVUU2
NCkKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDApOworICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MocmVnVDIpOworI2Vsc2UKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MocmVnVDEs
IHJlZ1QwKTsKKyAgICBKU1ZhbHVlUmVncyByZXN1bHRSZWdzKHJlZ1QzLCByZWdUMik7CisjZW5k
aWYKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLm1fdmFsdWUsIHZhbHVlUmVn
cyk7CisKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFu
Y2hJZk5vdENlbGwodmFsdWVSZWdzKSk7CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5v
dE9iamVjdChyZWdUMCkpOworCisgICAgZW1pdExvYWRQcm90b3R5cGUodm0oKSwgcmVnVDAsIHJl
Z1QyLCByZWdUMywgc2xvd0Nhc2VzKTsKKyAgICBhZGRTbG93Q2FzZShzbG93Q2FzZXMpOworCisg
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykp
OworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV9kc3QsIHJlc3VsdFJlZ3Mp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQkocmV2aXNpb24gMjYzMjczKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTEzODYsNiAr
MTM4NiwxMiBAQCBsbGludE9wV2l0aFJldHVybihvcF9pc19vYmplY3QsIE9wSXNPYmplCiBlbmQp
CiAKIAorbWFjcm8gbG9hZElubGluZU9mZnNldChwcm9wZXJ0eU9mZnNldEFzSW50LCBvYmplY3RB
bmRTdG9yYWdlLCB2YWx1ZSkKKyAgICBhZGRwIHNpemVvZiBKU09iamVjdCAtIChmaXJzdE91dE9m
TGluZU9mZnNldCAtIDIpICogOCwgb2JqZWN0QW5kU3RvcmFnZQorICAgIGxvYWRxIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogOFtvYmplY3RBbmRTdG9yYWdlLCBwcm9wZXJ0eU9mZnNldEFz
SW50LCA4XSwgdmFsdWUKK2VuZAorCisKIG1hY3JvIGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZz
ZXQocHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCiAgICAgYmls
dCBwcm9wZXJ0eU9mZnNldEFzSW50LCBmaXJzdE91dE9mTGluZU9mZnNldCwgLmlzSW5saW5lCiAg
ICAgbG9hZHAgSlNPYmplY3Q6Om1fYnV0dGVyZmx5W29iamVjdEFuZFN0b3JhZ2VdLCBvYmplY3RB
bmRTdG9yYWdlCkBAIC0xNTE1LDcgKzE1MjEsNyBAQCBsbGludE9wV2l0aFByb2ZpbGUob3BfZ2V0
X3Byb3RvdHlwZV9vZiwgCiAKIC5vcEdldFByb3RvdHlwZU9mUG9seVByb3RvOgogICAgIG1vdmUg
a25vd25Qb2x5UHJvdG9PZmZzZXQsIHQxCi0gICAgbG9hZFByb3BlcnR5QXRWYXJpYWJsZU9mZnNl
dCh0MSwgdDAsIHQzKQorICAgIGxvYWRJbmxpbmVPZmZzZXQodDEsIHQwLCB0MykKICAgICByZXR1
cm4odDMpCiBlbmQpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402651</attachid>
            <date>2020-06-24 08:09:22 -0700</date>
            <delta_ts>2020-06-24 12:51:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-213191-20200624180920.patch</filename>
            <type>text/plain</type>
            <size>45016</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjM0NDkpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDIwLTA2LTI0ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBBZGQgREZHL0ZUTCBmYXN0IHBhdGggZm9yIEdldFByb3Rv
dHlwZU9mIGJhc2VkIG9uIE92ZXJyaWRlc0dldFByb3RvdHlwZSBmbGFnCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMxOTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL29iamVj
dC1nZXQtcHJvdG90eXBlLW9mLW9iamVjdC1yYXJlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBzdHJl
c3MvZGZnLW9iamVjdC1wcm90b3R5cGUtb2YuanM6IFJlbW92ZWQuCisgICAgICAgICogc3RyZXNz
L2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanM6IFJlbW92ZWQuCisgICAgICAgICogc3Ry
ZXNzL2Z0bC1vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qczogQWRkZWQuCisgICAgICAgICogc3Ry
ZXNzL2Z0bC1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanM6IEFkZGVkLgorCiAyMDIwLTA2LTI0
ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gQ2xv
YmJlcml6ZSBtaXNzZXMgYHdyaXRlKEhlYXApYCByZXBvcnQgaW4gc29tZSBub2RlcwpJbmRleDog
SlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWdldC1wcm90b3R5cGUtb2Ytb2JqZWN0LXJh
cmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvb2JqZWN0LWdldC1w
cm90b3R5cGUtb2Ytb2JqZWN0LXJhcmUuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNy
b2JlbmNobWFya3Mvb2JqZWN0LWdldC1wcm90b3R5cGUtb2Ytb2JqZWN0LXJhcmUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAordmFyIHJlZ0V4cCA9IC8oPzopLzsKK3ZhciBkYXRl
ID0gbmV3IERhdGUoKTsKK3ZhciBtYXAgPSBuZXcgTWFwKCk7Cit2YXIgd2Vha1NldCA9IG5ldyBX
ZWFrU2V0KCk7Cit2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTsKKworZnVuY3Rpb24g
dGVzdE9iamVjdFVzZShvYmplY3QpIHsKKyAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVP
ZihvYmplY3QpOworfQorbm9JbmxpbmUodGVzdE9iamVjdFVzZSk7CisKK2Z1bmN0aW9uIHRlc3RE
ZWZhdWx0Q2FzZSh2YWx1ZSkgeworICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFs
dWUpOworfQorbm9JbmxpbmUodGVzdERlZmF1bHRDYXNlKTsKKworZnVuY3Rpb24gdGVzdCgpIHsK
KyAgICB0ZXN0T2JqZWN0VXNlKHJlZ0V4cCk7CisgICAgdGVzdE9iamVjdFVzZShkYXRlKTsKKyAg
ICB0ZXN0T2JqZWN0VXNlKG1hcCk7CisgICAgdGVzdE9iamVjdFVzZSh3ZWFrU2V0KTsKKyAgICB0
ZXN0T2JqZWN0VXNlKHByb21pc2UpOworCisgICAgdGVzdERlZmF1bHRDYXNlKHJlZ0V4cCk7Cisg
ICAgdGVzdERlZmF1bHRDYXNlKGRhdGUpOworICAgIHRlc3REZWZhdWx0Q2FzZShtYXApOworICAg
IHRlc3REZWZhdWx0Q2FzZSh3ZWFrU2V0KTsKKyAgICB0ZXN0RGVmYXVsdENhc2UocHJvbWlzZSk7
Cit9Citub0lubGluZSh0ZXN0KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7ICsraSkKKyAg
ICB0ZXN0KCk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9kZmctb2JqZWN0LXByb3RvdHlwZS1vZi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9kZmctb2JqZWN0LXByb3RvdHlwZS1vZi5q
cwkocmV2aXNpb24gMjYzNDQ5KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLW9iamVjdC1wcm90b3R5
cGUtb2YuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTUgKzAsMCBAQAotZnVuY3Rpb24gc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCkKLXsKLSAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKLSAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOwotfQotCi1mdW5j
dGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2UpIHsKLSAgICB2YXIgZXJyb3JUaHJv
d24gPSBmYWxzZTsKLSAgICB2YXIgZXJyb3IgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgICAgIGZ1
bmMoKTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKLSAg
ICAgICAgZXJyb3IgPSBlOwotICAgIH0KLSAgICBpZiAoIWVycm9yVGhyb3duKQotICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJvd24nKTsKLSAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0g
ZXJyb3JNZXNzYWdlKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJp
bmcoZXJyb3IpfWApOwotfQotCi0oZnVuY3Rpb24gKCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVj
dCk7Ci0gICAgfQotICAgIG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlMzsgKytpKQotICAgICAgICBzaG91bGRCZSh0YXJnZXQoe30pLCBPYmplY3QucHJvdG90
eXBlKTsKLX0oKSk7Ci0KLShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVj
dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsK
LSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWUzOyArK2kpIHsKLSAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KG51bGwpLCBgVHlw
ZUVycm9yOiBudWxsIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ09iamVjdC5nZXRQcm90
b3R5cGVPZihvYmplY3QpJylgKTsKLSAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KHVu
ZGVmaW5lZCksIGBUeXBlRXJyb3I6IHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0
aW5nICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KScpYCk7Ci0gICAgfQotfSgpKTsKLQot
KGZ1bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lu
bGluZSh0YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkKLSAgICAg
ICAgc2hvdWxkQmUodGFyZ2V0KCJDb2NvYSIpLCBTdHJpbmcucHJvdG90eXBlKTsKLX0oKSk7Ci0K
LShmdW5jdGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKLSAgICB9Ci0gICAgbm9J
bmxpbmUodGFyZ2V0KTsKLQotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWUzOyArK2kpCi0gICAg
ICAgIHNob3VsZEJlKHRhcmdldCg0MiksIE51bWJlci5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1
bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGlu
ZSh0YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkKLSAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KDQyLjE5NSksIE51bWJlci5wcm90b3R5cGUpOwotfSgpKTsKLQotKGZ1
bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOwotICAgIH0KLSAgICBub0lubGlu
ZSh0YXJnZXQpOwotCi0gICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTM7ICsraSkKLSAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KHRydWUpLCBCb29sZWFuLnByb3RvdHlwZSk7Ci19KCkpOwotCi0oZnVu
Y3Rpb24gKCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewotICAgICAgICBy
ZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAgIG5vSW5saW5l
KHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKQotICAgICAgICBz
aG91bGRCZSh0YXJnZXQoU3ltYm9sKCJDb2NvYSIpKSwgU3ltYm9sLnByb3RvdHlwZSk7Ci19KCkp
OwotCi0oZnVuY3Rpb24gKCkgewotICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCi0gICAgewot
ICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAg
IG5vSW5saW5lKHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKSB7
Ci0gICAgICAgIHNob3VsZEJlKHRhcmdldCgiQ29jb2EiKSwgU3RyaW5nLnByb3RvdHlwZSk7Ci0g
ICAgICAgIHNob3VsZEJlKHRhcmdldCg0MiksIE51bWJlci5wcm90b3R5cGUpOwotICAgICAgICBz
aG91bGRCZSh0YXJnZXQoNDIuMTk1KSwgTnVtYmVyLnByb3RvdHlwZSk7Ci0gICAgICAgIHNob3Vs
ZEJlKHRhcmdldCh0cnVlKSwgQm9vbGVhbi5wcm90b3R5cGUpOwotICAgICAgICBzaG91bGRCZSh0
YXJnZXQoU3ltYm9sKCJDb2NvYSIpKSwgU3ltYm9sLnByb3RvdHlwZSk7Ci0gICAgfQotfSgpKTsK
SW5kZXg6IEpTVGVzdHMvc3RyZXNzL2RmZy1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZGZnLXJlZmxlY3QtZ2V0LXByb3RvdHlwZS1vZi5q
cwkocmV2aXNpb24gMjYzNDQ5KQorKysgSlNUZXN0cy9zdHJlc3MvZGZnLXJlZmxlY3QtZ2V0LXBy
b3RvdHlwZS1vZi5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLWZ1bmN0aW9uIHNo
b3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCi17Ci0gICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQp
Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKLX0KLQot
ZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7Ci0gICAgdmFyIGVycm9y
VGhyb3duID0gZmFsc2U7Ci0gICAgdmFyIGVycm9yID0gbnVsbDsKLSAgICB0cnkgewotICAgICAg
ICBmdW5jKCk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBlcnJvclRocm93biA9IHRydWU7
Ci0gICAgICAgIGVycm9yID0gZTsKLSAgICB9Ci0gICAgaWYgKCFlcnJvclRocm93bikKLSAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7Ci0gICAgaWYgKFN0cmluZyhlcnJvcikg
IT09IGVycm9yTWVzc2FnZSkKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7
U3RyaW5nKGVycm9yKX1gKTsKLX0KLQotKGZ1bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJn
ZXQob2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yo
b2JqZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsKLQotICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWUzOyArK2kpCi0gICAgICAgIHNob3VsZEJlKHRhcmdldCh7fSksIE9iamVjdC5w
cm90b3R5cGUpOwotfSgpKTsKLQotKGZ1bmN0aW9uICgpIHsKLSAgICBmdW5jdGlvbiB0YXJnZXQo
b2JqZWN0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2Jq
ZWN0KTsKLSAgICB9Ci0gICAgbm9JbmxpbmUodGFyZ2V0KTsKLQotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMWUzOyArK2kpIHsKLSAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KG51bGwp
LCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBh
cmd1bWVudCBiZSBhbiBvYmplY3RgKTsKLSAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0
KHVuZGVmaW5lZCksIGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMg
dGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOwotICAgIH0KLX0oKSk7Ci0KLShmdW5j
dGlvbiAoKSB7Ci0gICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7Ci0gICAgfQotICAgIG5vSW5saW5l
KHRhcmdldCk7Ci0KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlMzsgKytpKSB7Ci0gICAgICAg
IHNob3VsZFRocm93KCgpID0+IHRhcmdldCgiQ29jb2EiKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5n
ZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7
Ci0gICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCg0MiksIGBUeXBlRXJyb3I6IFJlZmxl
Y3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVj
dGApOwotICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQodHJ1ZSksIGBUeXBlRXJyb3I6
IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFu
IG9iamVjdGApOwotICAgIH0KLX0oKSk7CkluZGV4OiBKU1Rlc3RzL3N0cmVzcy9mdGwtb2JqZWN0
LWdldC1wcm90b3R5cGUtb2YuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9zdHJlc3MvZnRsLW9i
amVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvc3RyZXNz
L2Z0bC1vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI0NSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkKK3sKKyAgICBpZiAo
YWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6
ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvck1lc3Nh
Z2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxs
OworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAo
IWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJvd24nKTsKKyAg
ICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworfQorCisoZnVuY3Rpb24gKCkg
eworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2Jq
ZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJl
KHRhcmdldCh7fSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQo
KGZ1bmN0aW9uKCkge30pLnByb3RvdHlwZSksIE9iamVjdC5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQoKGNsYXNzIHt9KS5wcm90b3R5cGUpLCBPYmplY3QucHJvdG90eXBlKTsK
KyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmpl
Y3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7
CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICB2YXIgRiA9IGZ1bmN0aW9uKCkg
e307CisgICAgdmFyIEMgPSBjbGFzcyB7fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1
OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KG5ldyBGKCkpLCBGLnByb3RvdHlwZSk7
CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgQygpKSwgQy5wcm90b3R5cGUpOworICAgIH0K
K30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9
CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyAr
K2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KEFycmF5LnByb3RvdHlwZSksIE9iamVjdC5w
cm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoW10pLCBBcnJheS5wcm90b3R5cGUp
OworICAgICAgICBzaG91bGRCZSh0YXJnZXQoQXJyYXkoMykpLCBBcnJheS5wcm90b3R5cGUpOwor
ICAgICAgICBzaG91bGRCZSh0YXJnZXQobmV3IEFycmF5KDEsIDIsIDMpKSwgQXJyYXkucHJvdG90
eXBlKTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdl
dChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9i
amVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QucHJvdG90
eXBlKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3QuY3JlYXRlKG51bGwp
KSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChPYmplY3Quc2V0UHJvdG90eXBlT2Yo
e30sIG51bGwpKSwgbnVsbCk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh7X19wcm90b19fOiBu
dWxsfSksIG51bGwpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90
eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KGZ1bmN0
aW9uKCkge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQo
Y2xhc3Mge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQo
KCkgPT4ge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlv
biAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFy
Z2V0KTsKKworICAgIHZhciByZWdFeHAgPSAvKD86KS87CisgICAgdmFyIGRhdGUgPSBuZXcgRGF0
ZSgpOworICAgIHZhciBtYXAgPSBuZXcgTWFwKCk7CisgICAgdmFyIHdlYWtTZXQgPSBuZXcgV2Vh
a1NldCgpOworICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKDEpOworCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgICAgICBzaG91bGRCZSh0YXJnZXQocmVn
RXhwKSwgUmVnRXhwLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChkYXRlKSwg
RGF0ZS5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQobWFwKSwgTWFwLnByb3Rv
dHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldCh3ZWFrU2V0KSwgV2Vha1NldC5wcm90b3R5
cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQocHJvbWlzZSksIFByb21pc2UucHJvdG90eXBl
KTsKKyAgICB9Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChv
YmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVj
dCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmdW5jdGlvbiBtYWtlUG9s
eVByb3RvT2JqZWN0KCkgeworICAgICAgICBmdW5jdGlvbiBmb28oKSB7CisgICAgICAgICAgICBj
bGFzcyBDIHsKKyAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fZmllbGQgPSA0MjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBsYXN0UHJvdG8gPSBDLnByb3RvdHlwZTsKKyAgICAgICAgICAgIHJldHVy
biBuZXcgQygpOworICAgICAgICB9CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsg
KytpKQorICAgICAgICAgICAgZm9vKCk7CisgICAgICAgIHJldHVybiBmb28oKTsKKyAgICB9CisK
KyAgICB2YXIgcG9seVByb3RvT2JqZWN0ID0gbWFrZVBvbHlQcm90b09iamVjdCgpOworCisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHBv
bHlQcm90b09iamVjdCksIHBvbHlQcm90b09iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpOwor
fSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0K
KyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIHByb3h5UHJvdG90eXBlID0ge307Cisg
ICAgdmFyIHByb3h5ID0gbmV3IFByb3h5KHt9LCB7CisgICAgICAgIGdldFByb3RvdHlwZU9mOiAo
KSA9PiBwcm94eVByb3RvdHlwZSwKKyAgICB9KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdldChwcm94eSksIHByb3h5UHJvdG90eXBl
KTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAg
ICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1
OyArK2kpIHsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KG51bGwpLCBgVHlwZUVy
cm9yOiBudWxsIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ09iamVjdC5nZXRQcm90b3R5
cGVPZihvYmplY3QpJylgKTsKKyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KHVuZGVm
aW5lZCksIGBUeXBlRXJyb3I6IHVuZGVmaW5lZCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5n
ICdPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KScpYCk7CisgICAgfQorfSgpKTsKKworKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGlu
ZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KCJDb2NvYSIpLCBTdHJpbmcucHJvdG90eXBlKTsKK30oKSk7CisKKyhm
dW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9Jbmxp
bmUodGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAg
IHNob3VsZEJlKHRhcmdldCg0MiksIE51bWJlci5wcm90b3R5cGUpOworfSgpKTsKKworKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0
YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KDQyLjE5NSksIE51bWJlci5wcm90b3R5cGUpOworfSgpKTsKKworKGZ1bmN0
aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0
YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KHRydWUpLCBCb29sZWFuLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rp
b24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1
cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRh
cmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91
bGRCZSh0YXJnZXQoU3ltYm9sKCkpLCBTeW1ib2wucHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUo
dGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAg
c2hvdWxkQmUodGFyZ2V0KCJDb2NvYSIpLCBTdHJpbmcucHJvdG90eXBlKTsKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KDQyKSwgTnVtYmVyLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRh
cmdldCg0Mi4xOTUpLCBOdW1iZXIucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KHRydWUpLCBCb29sZWFuLnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChTeW1i
b2woKSksIFN5bWJvbC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQoMW4pLCBC
aWdJbnQucHJvdG90eXBlKTsKKyAgICB9Cit9KCkpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvZnRs
LXJlZmxlY3QtZ2V0LXByb3RvdHlwZS1vZi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVz
cy9mdGwtcmVmbGVjdC1nZXQtcHJvdG90eXBlLW9mLmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvc3RyZXNzL2Z0bC1yZWZsZWN0LWdldC1wcm90b3R5cGUtb2YuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNDUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7
CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcign
YmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywg
ZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVy
cm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICBlcnJvclRocm93biA9IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9
CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhy
b3duJyk7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKK30KKworKGZ1
bmN0aW9uICgpIHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9Jbmxp
bmUodGFyZ2V0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAg
ICAgc2hvdWxkQmUodGFyZ2V0KHt9KSwgT2JqZWN0LnByb3RvdHlwZSk7CisgICAgICAgIHNob3Vs
ZEJlKHRhcmdldCgoZnVuY3Rpb24oKSB7fSkucHJvdG90eXBlKSwgT2JqZWN0LnByb3RvdHlwZSk7
CisgICAgICAgIHNob3VsZEJlKHRhcmdldCgoY2xhc3Mge30pLnByb3RvdHlwZSksIE9iamVjdC5w
cm90b3R5cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
dGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlw
ZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICB2YXIgRiA9
IGZ1bmN0aW9uKCkge307CisgICAgdmFyIEMgPSBjbGFzcyB7fTsKKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KG5ldyBGKCkpLCBG
LnByb3RvdHlwZSk7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChuZXcgQygpKSwgQy5wcm90b3R5
cGUpOworICAgIH0KK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0
KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9i
amVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZEJlKHRhcmdldChBcnJheS5wcm90b3R5
cGUpLCBPYmplY3QucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KFtdKSwgQXJy
YXkucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KEFycmF5KDMpKSwgQXJyYXku
cHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KG5ldyBBcnJheSgxLCAyLCAzKSks
IEFycmF5LnByb3RvdHlwZSk7CisgICAgfQorfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KE9iamVjdC5wcm90b3R5cGUpLCBudWxsKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KE9iamVj
dC5jcmVhdGUobnVsbCkpLCBudWxsKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KE9iamVjdC5z
ZXRQcm90b3R5cGVPZih7fSwgbnVsbCkpLCBudWxsKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KHtfX3Byb3RvX186IG51bGx9KSwgbnVsbCk7CisgICAgfQorfSgpKTsKKworKGZ1bmN0aW9uICgp
IHsKKyAgICBmdW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJl
ZmxlY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0
KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hvdWxk
QmUodGFyZ2V0KGZ1bmN0aW9uKCkge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQoY2xhc3Mge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgICAgICBz
aG91bGRCZSh0YXJnZXQoKCkgPT4ge30pLCBGdW5jdGlvbi5wcm90b3R5cGUpOworICAgIH0KK30o
KSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7
CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQor
ICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICB2YXIgcmVnRXhwID0gLyg/OikvOworICAgIHZh
ciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICB2YXIgbWFwID0gbmV3IE1hcCgpOworICAgIHZhciB3
ZWFrU2V0ID0gbmV3IFdlYWtTZXQoKTsKKyAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2
ZSgxKTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICAgICAgc2hv
dWxkQmUodGFyZ2V0KHJlZ0V4cCksIFJlZ0V4cC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRC
ZSh0YXJnZXQoZGF0ZSksIERhdGUucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0
KG1hcCksIE1hcC5wcm90b3R5cGUpOworICAgICAgICBzaG91bGRCZSh0YXJnZXQod2Vha1NldCks
IFdlYWtTZXQucHJvdG90eXBlKTsKKyAgICAgICAgc2hvdWxkQmUodGFyZ2V0KHByb21pc2UpLCBQ
cm9taXNlLnByb3RvdHlwZSk7CisgICAgfQorfSgpKTsKKworKGZ1bmN0aW9uICgpIHsKKyAgICBm
dW5jdGlvbiB0YXJnZXQob2JqZWN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0
UHJvdG90eXBlT2Yob2JqZWN0KTsKKyAgICB9CisgICAgbm9JbmxpbmUodGFyZ2V0KTsKKworICAg
IGZ1bmN0aW9uIG1ha2VQb2x5UHJvdG9PYmplY3QoKSB7CisgICAgICAgIGZ1bmN0aW9uIGZvbygp
IHsKKyAgICAgICAgICAgIGNsYXNzIEMgeworICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yKCkg
eworICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWVsZCA9IDQyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RQcm90byA9IEMucHJvdG90eXBlOwor
ICAgICAgICAgICAgcmV0dXJuIG5ldyBDKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDAwOyArK2kpCisgICAgICAgICAgICBmb28oKTsKKyAgICAgICAgcmV0dXJu
IGZvbygpOworICAgIH0KKworICAgIHZhciBwb2x5UHJvdG9PYmplY3QgPSBtYWtlUG9seVByb3Rv
T2JqZWN0KCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBz
aG91bGRCZSh0YXJnZXQocG9seVByb3RvT2JqZWN0KSwgcG9seVByb3RvT2JqZWN0LmNvbnN0cnVj
dG9yLnByb3RvdHlwZSk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRh
cmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVP
ZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOworCisgICAgdmFyIHByb3h5
UHJvdG90eXBlID0ge307CisgICAgdmFyIHByb3h5ID0gbmV3IFByb3h5KHt9LCB7CisgICAgICAg
IGdldFByb3RvdHlwZU9mOiAoKSA9PiBwcm94eVByb3RvdHlwZSwKKyAgICB9KTsKKworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIHNob3VsZEJlKHRhcmdldChwcm94
eSksIHByb3h5UHJvdG90eXBlKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rp
b24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3Rv
dHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDFlNTsgKytpKSB7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRh
cmdldChudWxsKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0
aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IHRhcmdldCh1bmRlZmluZWQpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9m
IHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKyAgICB9Cit9KCkp
OworCisoZnVuY3Rpb24gKCkgeworICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgewor
ICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAg
ICBub0lubGluZSh0YXJnZXQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkK
KyAgICAgICAgc2hvdWxkVGhyb3coKCkgPT4gdGFyZ2V0KCJDb2NvYSIpLCBgVHlwZUVycm9yOiBS
ZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBv
YmplY3RgKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9i
amVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVj
dCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIpLCBgVHlw
ZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVu
dCBiZSBhbiBvYmplY3RgKTsKK30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24g
dGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlw
ZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQo
NDIuMTk1KSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUg
Zmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7Cit9KCkpOworCisoZnVuY3Rpb24gKCkgewor
ICAgIGZ1bmN0aW9uIHRhcmdldChvYmplY3QpCisgICAgeworICAgICAgICByZXR1cm4gUmVmbGVj
dC5nZXRQcm90b3R5cGVPZihvYmplY3QpOworICAgIH0KKyAgICBub0lubGluZSh0YXJnZXQpOwor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgc2hvdWxkVGhyb3co
KCkgPT4gdGFyZ2V0KHRydWUpLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlwZU9mIHJl
cXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKK30oKSk7CisKKyhmdW5j
dGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAgfQorICAgIG5vSW5saW5l
KHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgICAgICBz
aG91bGRUaHJvdygoKSA9PiB0YXJnZXQoU3ltYm9sKCkpLCBgVHlwZUVycm9yOiBSZWZsZWN0Lmdl
dFByb3RvdHlwZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsK
K30oKSk7CisKKyhmdW5jdGlvbiAoKSB7CisgICAgZnVuY3Rpb24gdGFyZ2V0KG9iamVjdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBSZWZsZWN0LmdldFByb3RvdHlwZU9mKG9iamVjdCk7CisgICAg
fQorICAgIG5vSW5saW5lKHRhcmdldCk7CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDFlNTsg
KytpKSB7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCgiQ29jb2EiKSwgYFR5cGVF
cnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmlyc3QgYXJndW1lbnQg
YmUgYW4gb2JqZWN0YCk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRhcmdldCg0MiksIGBU
eXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YgcmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3Vt
ZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91bGRUaHJvdygoKSA9PiB0YXJnZXQoNDIu
MTk1KSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0aGUgZmly
c3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgICAgIHNob3VsZFRocm93KCgpID0+IHRh
cmdldCh0cnVlKSwgYFR5cGVFcnJvcjogUmVmbGVjdC5nZXRQcm90b3R5cGVPZiByZXF1aXJlcyB0
aGUgZmlyc3QgYXJndW1lbnQgYmUgYW4gb2JqZWN0YCk7CisgICAgICAgIHNob3VsZFRocm93KCgp
ID0+IHRhcmdldChTeW1ib2woKSksIGBUeXBlRXJyb3I6IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2Yg
cmVxdWlyZXMgdGhlIGZpcnN0IGFyZ3VtZW50IGJlIGFuIG9iamVjdGApOworICAgICAgICBzaG91
bGRUaHJvdygoKSA9PiB0YXJnZXQoMW4pLCBgVHlwZUVycm9yOiBSZWZsZWN0LmdldFByb3RvdHlw
ZU9mIHJlcXVpcmVzIHRoZSBmaXJzdCBhcmd1bWVudCBiZSBhbiBvYmplY3RgKTsKKyAgICB9Cit9
KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjM0NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NDQgQEAKKzIwMjAtMDYtMjQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29t
PgorCisgICAgICAgIEFkZCBERkcvRlRMIGZhc3QgcGF0aCBmb3IgR2V0UHJvdG90eXBlT2YgYmFz
ZWQgb24gT3ZlcnJpZGVzR2V0UHJvdG90eXBlIGZsYWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE5MQorCisgICAgICAgIFJldmlld2VkIGJ5IFl1
c3VrZSBTdXp1a2kuCisKKyAgICAgICAgVGhpcyBwYXRjaDoKKworICAgICAgICAxLiBJbnRyb2R1
Y2VzIGBsb2FkSW5saW5lT2Zmc2V0YCBMTEludCBtYWNybyAoNjQtYml0IG9ubHkpIGFuZCB1dGls
aXplcyBpdCBpbgorICAgICAgICAgICBgZ2V0X3Byb3RvdHlwZV9vZmAgc2luY2Ugd2UgYXNzZXJ0
IHRoYXQgYGtub3duUG9seVByb3RvT2Zmc2V0YCBpcyBhbiBpbmxpbmUgb2Zmc2V0LgorCisgICAg
ICAgIDIuIEJyaW5ncyBiYXNlbGluZSBKSVQgZmFzdCBwYXRoIHRvIDMyLWJpdCBidWlsZHMsIHBy
b2dyZXNzaW5nIGBzdXBlci1nZXR0ZXIuanNgCisgICAgICAgICAgIG1pY3JvYmVuY2htYXJrIGJ5
IGEgZmFjdG9yIG9mIDEwICh3L28gREZHKS4KKworICAgICAgICAzLiBBZGRzIEdldFByb3RvdHlw
ZU9mIERGRy9GVEwgZmFzdCBwYXRocyB0aGF0IGxldmVyYWdlIE92ZXJyaWRlc0dldFByb3RvdHlw
ZSB0eXBlCisgICAgICAgICAgIGluZm8gZmxhZywgYWR2YW5jaW5nIHByb3ZpZGVkIHJhcmUgb2Jq
ZWN0cyBtaWNyb2JlbmNobWFyayBieSB+NDYlICh+MzclIHcvbyBGVEwpLgorICAgICAgICAgICBB
bHNvLCBjbGVhbnMgdXAgZXhpc3RpbmcgREZHIGZhc3QgcGF0aCBieSB1c2luZyBBc3NlbWJseUhl
bHBlcnM6OmxvYWRWYWx1ZSgpLgorCisgICAgICAgIDQuIEV4dHJhY3RzIEFzc2VtYmx5SGVscGVy
czo6ZW1pdExvYWRQcm90b3R5cGUoKSBhbmQgdXNlcyBpdCBpbiBiYXNlbGluZSBKSVQsIERGRywg
YW5kCisgICAgICAgICAgIEluc3RhbmNlT2ZHZW5lcmljIGFjY2VzcyBjYXNlLiBXaXRoIHRoaXMg
Y2hhbmdlLCBgaW5zdGFuY2VvZmAgYWNjZXNzIGNhc2UgaGFuZGxlcyBhbGwKKyAgICAgICAgICAg
W1tHZXRQcm90b3R5cGVPZl1dIG92ZXJyaWRlcyAoYmVmb3JlOiBvbmx5IFByb3h5IG9iamVjdHMp
LCB3aGljaCBpcyBtb3JlIGNvcnJlY3QsIHlldAorICAgICAgICAgICBub3Qgb2JzZXJ2YWJsZSBl
bm91Z2ggdG8gcHJvdmlkZSBhIHRlc3QgY2FzZS4gYGluc3RhbmNlb2ZgIG1pY3JvYmVuY2htYXJr
cyBhcmUgbmV1dHJhbC4KKworICAgICAgICAqIGJ5dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldFByb3RvdHlwZU9mKToKKyAgICAgICAgKiBmdGwvRlRMQWJzdHJhY3RIZWFw
UmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0UHJvdG90eXBlT2YpOgor
ICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJs
eUhlbHBlcnM6OmVtaXRMb2FkUHJvdG90eXBlKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxw
ZXJzLmg6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVTbG93
Q2FzZXMpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9wcm90b3R5cGVfb2YpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc206CisKIDIwMjAtMDYtMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFw
cGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBDbG9iYmVyaXplIG1pc3NlcyBgd3JpdGUoSGVhcClg
IHJlcG9ydCBpbiBzb21lIG5vZGVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQWNjZXNzQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0FjY2Vzc0Nhc2UuY3BwCShyZXZpc2lvbiAyNjM0NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWNjZXNzQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzgs
MzYgKzEyNzgsMTkgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZVdpdGhHdWFyZCgKICAgICAg
ICAgICAgIGFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZygKICAgICAg
ICAgICAgICAgICBqaXQsCiAgICAgICAgICAgICAgICAgU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9y
OjpFeHRyYVN0YWNrU3BhY2U6Ok5vRXh0cmFTcGFjZSk7Ci0gICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBmYWlsQW5kSWdub3JlOworICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGZhaWxB
bmRJZ25vcmU7CiAKICAgICAgICAgaml0Lm1vdmUoYmFzZUdQUiwgdmFsdWVHUFIpOwogICAgICAg
ICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBsb29wKCZqaXQpOwotICAgICAgICBmYWls
QW5kSWdub3JlID0gaml0LmJyYW5jaElmVHlwZSh2YWx1ZUdQUiwgUHJveHlPYmplY3RUeXBlKTsK
LSAgICAgICAgCi0gICAgICAgIGppdC5lbWl0TG9hZFN0cnVjdHVyZSh2bSwgdmFsdWVHUFIsIHNj
cmF0Y2gyR1BSLCBzY3JhdGNoR1BSKTsKKwogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIGpp
dC5sb2FkNjQoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKHNjcmF0Y2gyR1BSLCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZU9mZnNldCgpKSwgc2NyYXRjaDJHUFIpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgaGFzTW9ub1Byb3RvID0gaml0LmJyYW5jaFRlc3Q2NChDQ2FsbEhlbHBlcnM6Ok5vblplcm8s
IHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaml0LmxvYWQ2NCgKLSAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6QWRkcmVzcyh2YWx1ZUdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Qb2x5UHJv
dG9PZmZzZXQpKSwKLSAgICAgICAgICAgIHNjcmF0Y2gyR1BSKTsKLSAgICAgICAgaGFzTW9ub1By
b3RvLmxpbmsoJmppdCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3VsdFJlZ3Moc2NyYXRjaDJH
UFIpOwogI2Vsc2UKLSAgICAgICAgaml0LmxvYWQzMigKLSAgICAgICAgICAgIENDYWxsSGVscGVy
czo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSArIFRh
Z09mZnNldCksCi0gICAgICAgICAgICBzY3JhdGNoR1BSKTsKLSAgICAgICAgaml0LmxvYWQzMigK
LSAgICAgICAgICAgIENDYWxsSGVscGVyczo6QWRkcmVzcyhzY3JhdGNoMkdQUiwgU3RydWN0dXJl
Ojpwcm90b3R5cGVPZmZzZXQoKSArIFBheWxvYWRPZmZzZXQpLAotICAgICAgICAgICAgc2NyYXRj
aDJHUFIpOwotICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaGFzTW9ub1Byb3RvID0gaml0LmJy
YW5jaDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpOwotICAg
ICAgICBqaXQubG9hZDMyKAotICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKAotICAg
ICAgICAgICAgICAgIHZhbHVlR1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQcm90
b09mZnNldCkgKyBQYXlsb2FkT2Zmc2V0KSwKLSAgICAgICAgICAgIHNjcmF0Y2gyR1BSKTsKLSAg
ICAgICAgaGFzTW9ub1Byb3RvLmxpbmsoJmppdCk7CisgICAgICAgIEpTVmFsdWVSZWdzIHJlc3Vs
dFJlZ3Moc2NyYXRjaEdQUiwgc2NyYXRjaDJHUFIpOwogI2VuZGlmCisKKyAgICAgICAgaml0LmVt
aXRMb2FkUHJvdG90eXBlKHZtLCB2YWx1ZUdQUiwgcmVzdWx0UmVncywgc2NyYXRjaEdQUiwgZmFp
bEFuZElnbm9yZSk7CiAgICAgICAgIGppdC5tb3ZlKHNjcmF0Y2gyR1BSLCB2YWx1ZUdQUik7CiAg
ICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgaXNJbnN0YW5jZSA9IGppdC5icmFu
Y2hQdHIoQ0NhbGxIZWxwZXJzOjpFcXVhbCwgdmFsdWVHUFIsIHByb3RvdHlwZUdQUik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gMjYzNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzODc2LDE3ICsxMzg3NiwyNCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlV2Vha01hcFNldChOCiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVHZXRQcm90b3R5cGVPZihOb2RlKiBub2RlKQogeworICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wMih0aGlzKTsKKworICAgIEdQUlJl
ZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcDJHUFIgPSB0ZW1wMi5ncHIo
KTsKKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyh0ZW1w
R1BSKTsKKyNlbHNlCisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyh0ZW1wMkdQUiwgdGVtcEdQ
Uik7CisjZW5kaWYKKwogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAg
ICAgY2FzZSBBcnJheVVzZToKICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgIGNhc2UgRmluYWxP
YmplY3RVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb2JqZWN0KHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wMih0aGlzKTsKLQogICAgICAgICBHUFJSZWcgb2JqZWN0R1BSID0g
b2JqZWN0LmdwcigpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAg
ICAgIEdQUlJlZyB0ZW1wMkdQUiA9IHRlbXAyLmdwcigpOwogCiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXlVc2U6CkBAIC0xMzkx
Nyw3NCArMTM5MjQsNTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFByb3RvdHlw
ZQogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIGlmIChoYXNNb25vUHJvdG8gJiYgIWhh
c1BvbHlQcm90bykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJvdG90
eXBlT2Zmc2V0KCkpLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHRl
bXBHUFIsIG5vZGUpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSAr
IFRhZ09mZnNldCksIHRlbXAyR1BSKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQo
KSArIFBheWxvYWRPZmZzZXQpLCB0ZW1wR1BSKTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVz
dWx0KHRlbXAyR1BSLCB0ZW1wR1BSLCBub2RlKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIG1f
aml0LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6
OnByb3RvdHlwZU9mZnNldCgpKSwgcmVzdWx0UmVncyk7CisgICAgICAgICAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRSZWdzLCBub2RlKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChoYXNQb2x5UHJvdG8gJiYgIWhhc01vbm9Qcm90
bykgewotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJ
VENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Q
b2x5UHJvdG9PZmZzZXQpKSwgdGVtcEdQUik7Ci0gICAgICAgICAgICAgICAganNWYWx1ZVJlc3Vs
dCh0ZW1wR1BSLCBub2RlKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjpBZGRyZXNzKG9iamVjdEdQUiwgb2Zmc2V0UmVsYXRpdmVUb0Jhc2Uoa25vd25Q
b2x5UHJvdG9PZmZzZXQpICsgVGFnT2Zmc2V0KSwgdGVtcDJHUFIpOwotICAgICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0
aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLCB0ZW1wR1BS
KTsKLSAgICAgICAgICAgICAgICBqc1ZhbHVlUmVzdWx0KHRlbXAyR1BSLCB0ZW1wR1BSLCBub2Rl
KTsKLSNlbmRpZgorICAgICAgICAgICAgICAgIG1faml0LmxvYWRWYWx1ZShKSVRDb21waWxlcjo6
QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zm
c2V0KSksIHJlc3VsdFJlZ3MpOworICAgICAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
UmVncywgbm9kZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcEdQUiwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSks
IHRlbXBHUFIpOwotICAgICAgICBhdXRvIGhhc01vbm9Qcm90byA9IG1faml0LmJyYW5jaElmTm90
RW1wdHkodGVtcEdQUik7Ci0gICAgICAgIG1faml0LmxvYWQ2NChKSVRDb21waWxlcjo6QWRkcmVz
cyhvYmplY3RHUFIsIG9mZnNldFJlbGF0aXZlVG9CYXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSks
IHRlbXBHUFIpOwotICAgICAgICBoYXNNb25vUHJvdG8ubGluaygmbV9qaXQpOwotICAgICAgICBq
c1ZhbHVlUmVzdWx0KHRlbXBHUFIsIG5vZGUpOwotI2Vsc2UKLSAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zm
c2V0KCkgKyBUYWdPZmZzZXQpLCB0ZW1wMkdQUik7Ci0gICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wR1BSLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgp
ICsgUGF5bG9hZE9mZnNldCksIHRlbXBHUFIpOwotICAgICAgICBhdXRvIGhhc01vbm9Qcm90byA9
IG1faml0LmJyYW5jaElmTm90RW1wdHkodGVtcDJHUFIpOwotICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRSZWxhdGl2ZVRvQmFzZShrbm93
blBvbHlQcm90b09mZnNldCkgKyBUYWdPZmZzZXQpLCB0ZW1wMkdQUik7Ci0gICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6QWRkcmVzcyhvYmplY3RHUFIsIG9mZnNldFJlbGF0aXZlVG9C
YXNlKGtub3duUG9seVByb3RvT2Zmc2V0KSArIFBheWxvYWRPZmZzZXQpLCB0ZW1wR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXBHUFIsIFN0
cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpLCByZXN1bHRSZWdzKTsKKyAgICAgICAgYXV0byBo
YXNNb25vUHJvdG8gPSBtX2ppdC5icmFuY2hJZk5vdEVtcHR5KHJlc3VsdFJlZ3MpOworICAgICAg
ICBtX2ppdC5sb2FkVmFsdWUoSklUQ29tcGlsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQcm90b09mZnNldCkpLCByZXN1bHRSZWdzKTsKICAgICAg
ICAgaGFzTW9ub1Byb3RvLmxpbmsoJm1faml0KTsKLSAgICAgICAganNWYWx1ZVJlc3VsdCh0ZW1w
MkdQUiwgdGVtcEdQUiwgbm9kZSk7Ci0jZW5kaWYKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHRSZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjYXNlIE9iamVjdFVz
ZTogewotICAgICAgICAvLyBGSVhNRTogQWRkIGZhc3QgcGF0aCBiYXNlZCBvbiBPdmVycmlkZXNH
ZXRQcm90b3R5cGUgdHlwZSBpbmZvIGZsYWcKLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE5MQotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpTVmFsdWVSZWdzVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLQotICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIo
KTsKLSAgICAgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyA9IHJlc3VsdC5yZWdzKCk7CisgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9iamVjdCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIEdQUlJlZyBvYmplY3RHUFIgPSBvYmplY3QuZ3ByKCk7CisgICAgICAgIHNwZWN1bGF0
ZU9iamVjdChub2RlLT5jaGlsZDEoKSwgb2JqZWN0R1BSKTsKIAotICAgICAgICBzcGVjdWxhdGVP
YmplY3Qobm9kZS0+Y2hpbGQxKCksIHZhbHVlR1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IHNsb3dDYXNlczsKKyAgICAgICAgbV9qaXQuZW1pdExvYWRQcm90b3R5cGUodm0oKSwg
b2JqZWN0R1BSLCByZXN1bHRSZWdzLCB0ZW1wMkdQUiwgc2xvd0Nhc2VzKTsKKyAgICAgICAgYWRk
U2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKHNsb3dDYXNlcywgdGhpcywgb3BlcmF0aW9u
R2V0UHJvdG90eXBlT2ZPYmplY3QsCisgICAgICAgICAgICByZXN1bHRSZWdzLCBUcnVzdGVkSW1t
UHRyOjp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKSwgb2JqZWN0R1BSKSk7CiAKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25HZXRQcm90b3R5cGVPZk9iamVjdCwg
cmVzdWx0UmVncywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHZhbHVlR1BSKTsKLSAgICAg
ICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRS
ZWdzLCBub2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBkZWZhdWx0OiB7CiAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
SlNWYWx1ZVJlZ3NUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotCiAgICAgICAgIEpTVmFsdWVSZWdz
IHZhbHVlUmVncyA9IHZhbHVlLmpzVmFsdWVSZWdzKCk7Ci0gICAgICAgIEpTVmFsdWVSZWdzIHJl
c3VsdFJlZ3MgPSByZXN1bHQucmVncygpOwogCi0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0g
ICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uR2V0UHJvdG90eXBlT2YsIHJlc3VsdFJlZ3Ms
IFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpLCB2YWx1ZVJlZ3MpOwotICAgICAgICBtX2ppdC5l
eGNlcHRpb25DaGVjaygpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd0Nhc2Vz
OworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbCh2YWx1ZVJl
Z3MpKTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZVJlZ3MucGF5bG9hZEdQUigp
OworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90T2JqZWN0KHZhbHVl
R1BSKSk7CisKKyAgICAgICAgbV9qaXQuZW1pdExvYWRQcm90b3R5cGUodm0oKSwgdmFsdWVHUFIs
IHJlc3VsdFJlZ3MsIHRlbXAyR1BSLCBzbG93Q2FzZXMpOworICAgICAgICBhZGRTbG93UGF0aEdl
bmVyYXRvcihzbG93UGF0aENhbGwoc2xvd0Nhc2VzLCB0aGlzLCBvcGVyYXRpb25HZXRQcm90b3R5
cGVPZiwKKyAgICAgICAgICAgIHJlc3VsdFJlZ3MsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2ludGVy
KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykp
LCB2YWx1ZVJlZ3MpKTsKKwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFJlZ3MsIG5vZGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDI2MzQ0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVy
ZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5kZXhpbmdN
b2RlSW5jbHVkaW5nSGlzdG9yeSwgU3RydWN0dXJlOjppbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0
b3J5T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfaW5saW5lQ2FwYWNpdHksIFN0cnVj
dHVyZTo6aW5saW5lQ2FwYWNpdHlPZmZzZXQoKSkgXAorICAgIG1hY3JvKFN0cnVjdHVyZV9vdXRP
ZkxpbmVUeXBlRmxhZ3MsIFN0cnVjdHVyZTo6b3V0T2ZMaW5lVHlwZUZsYWdzT2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJldmlvdXNPclJhcmVEYXRhLCBTdHJ1Y3R1cmU6OnByZXZp
b3VzT3JSYXJlRGF0YU9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3RvdHlwZSwg
U3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1
Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjM0
NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzNzksMTEgKzQzNzksMjAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXBpbGVHZXRQcm90b3R5cGVPZigpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworCisgICAgICAgIExWYWx1ZSBvYmplY3QgPSBudWxscHRyOworICAgICAgICBMVmFsdWUg
c3RydWN0dXJlID0gbnVsbHB0cjsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdDsK
KworICAgICAgICBMQmFzaWNCbG9jayBsb2FkUG9seVByb3RvID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5pbnNlcnROZXdCbG9ja3NCZWZvcmUo
Y29udGludWF0aW9uKTsKKwogICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXlVc2U6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6
CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIExWYWx1ZSBvYmpl
Y3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgb2JqZWN0ID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXlVc2U6CiAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlQXJyYXkobV9ub2RlLT5jaGlsZDEoKSwgb2JqZWN0KTsKQEAgLTQzOTks
NyArNDQwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKG9iamVj
dCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKG9iamVjdCk7CiAKICAg
ICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICAgICAgaWYgKCh2YWx1ZS5tX3R5cGUgJiYgISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY09iamVjdCkpICYmIHZhbHVlLm1fc3RydWN0dXJlLmlzRmluaXRlKCkpIHsKQEAg
LTQ0MjMsMzMgKzQ0MzIsNzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBsb2FkUG9seVByb3RvID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
T2JqZWN0VXNlOiB7CisgICAgICAgICAgICBvYmplY3QgPSBsb3dPYmplY3QobV9ub2RlLT5jaGls
ZDEoKSk7CiAKLSAgICAgICAgICAgIExWYWx1ZSBwcm90b3R5cGVCaXRzID0gbV9vdXQubG9hZDY0
KHN0cnVjdHVyZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfcHJvdG90eXBlKTsKLSAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGRpcmVjdFByb3RvdHlwZSA9IG1fb3V0LmFuY2hvcihwcm90b3R5cGVCaXRz
KTsKLSAgICAgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5pc1plcm82NChwcm90b3R5cGVCaXRz
KSwgdW5zdXJlKGxvYWRQb2x5UHJvdG8pLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisgICAgICAg
ICAgICBMQmFzaWNCbG9jayBmYXN0UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAKLSAgICAgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9hZFBvbHlQcm90bywgY29u
dGludWF0aW9uKTsKLSAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvbHlQcm90byA9IG1fb3V0
LmFuY2hvcigKLSAgICAgICAgICAgICAgICBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1f
aGVhcHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBvYmplY3QsIG1fb3V0LmNvbnN0SW50NjQo
a25vd25Qb2x5UHJvdG9PZmZzZXQpLCBTY2FsZUVpZ2h0LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmxp
bmVTdG9yYWdlKCkpKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBsb2FkU3RydWN0dXJlKG9i
amVjdCk7CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbV9vdXQu
dGVzdElzWmVybzMyKAorICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkMTZaZXJvRXh0MzIo
c3RydWN0dXJlLCBtX2hlYXBzLlN0cnVjdHVyZV9vdXRPZkxpbmVUeXBlRmxhZ3MpLAorICAgICAg
ICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKE92ZXJyaWRlc0dldFByb3RvdHlwZU91dE9m
TGluZSkpLAorICAgICAgICAgICAgICAgIHVzdWFsbHkoZmFzdFBhdGgpLCByYXJlbHkoc2xvd1Bh
dGgpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGZhc3RQYXRoKTsK
KyAgICAgICAgICAgIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKEludDY0LCBvcGVy
YXRpb25HZXRQcm90b3R5cGVPZk9iamVjdCwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgb2Jq
ZWN0KSk7CiAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
c2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIGRpcmVjdFByb3RvdHlwZSwgcG9seVByb3RvKSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBPYmplY3RVc2U6
IHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBwYXRoIGJhc2VkIG9uIE92ZXJyaWRl
c0dldFByb3RvdHlwZSB0eXBlIGluZm8gZmxhZwotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzE5MQotICAgICAgICAgICAgc2V0SlNWYWx1
ZSh2bUNhbGwoSW50NjQsIG9wZXJhdGlvbkdldFByb3RvdHlwZU9mT2JqZWN0LCB3ZWFrUG9pbnRl
cihnbG9iYWxPYmplY3QpLCBsb3dPYmplY3QobV9ub2RlLT5jaGlsZDEoKSkpKTsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGZhc3RQYXRoLCBsb2FkUG9s
eVByb3RvKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGRlZmF1bHQ6
IHsKLSAgICAgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKEludDY0LCBvcGVyYXRpb25HZXRQcm90
b3R5cGVPZiwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbG93SlNWYWx1ZShtX25vZGUtPmNo
aWxkMSgpKSkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgb2JqZWN0ID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHZh
bHVlVHlwZSA9IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGlzQ2VsbFBhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgaXNPYmplY3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGZhc3RQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbChvYmplY3QsIHZhbHVlVHlwZSksIHVzdWFsbHkoaXNDZWxsUGF0aCksIHJh
cmVseShzbG93UGF0aCkpOworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNDZWxsUGF0aCwg
aXNPYmplY3RQYXRoKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpc09iamVjdChvYmplY3Qs
IHZhbHVlVHlwZSksIHVzdWFsbHkoaXNPYmplY3RQYXRoKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzT2JqZWN0UGF0aCwgc2xvd1BhdGgpOworICAg
ICAgICAgICAgc3RydWN0dXJlID0gbG9hZFN0cnVjdHVyZShvYmplY3QpOworICAgICAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgICAgIG1fb3V0LnRlc3RJc1plcm8zMigKKyAgICAg
ICAgICAgICAgICAgICAgbV9vdXQubG9hZDE2WmVyb0V4dDMyKHN0cnVjdHVyZSwgbV9oZWFwcy5T
dHJ1Y3R1cmVfb3V0T2ZMaW5lVHlwZUZsYWdzKSwKKyAgICAgICAgICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihPdmVycmlkZXNHZXRQcm90b3R5cGVPdXRPZkxpbmUpKSwKKyAgICAgICAgICAg
ICAgICB1c3VhbGx5KGZhc3RQYXRoKSwgcmFyZWx5KHNsb3dQYXRoKSk7CisKKyAgICAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBmYXN0UGF0aCk7CisgICAgICAgICAgICBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChJbnQ2NCwgb3BlcmF0aW9uR2V0UHJvdG90eXBlT2Ys
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG9iamVjdCkpOworICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhmYXN0UGF0
aCwgbG9hZFBvbHlQcm90byk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICB9CisKKyAgICAgICAgQVNTRVJUKG9iamVjdCk7CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUp
OworCisgICAgICAgIExWYWx1ZSBwcm90b3R5cGVCaXRzID0gbV9vdXQubG9hZDY0KHN0cnVjdHVy
ZSwgbV9oZWFwcy5TdHJ1Y3R1cmVfcHJvdG90eXBlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
bW9ub1Byb3RvID0gbV9vdXQuYW5jaG9yKHByb3RvdHlwZUJpdHMpOworICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuaXNaZXJvNjQocHJvdG90eXBlQml0cyksIHVuc3VyZShsb2FkUG9seVByb3Rv
KSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvYWRQ
b2x5UHJvdG8sIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvbHlQcm90
byA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5k
ZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIG9iamVjdCwgbV9vdXQuY29uc3RJ
bnQ2NChrbm93blBvbHlQcm90b09mZnNldCksIFNjYWxlRWlnaHQsIEpTT2JqZWN0OjpvZmZzZXRP
ZklubGluZVN0b3JhZ2UoKSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAg
ICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbW9ub1Byb3RvLCBwb2x5UHJvdG8sIHNsb3dS
ZXN1bHQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0QXJyYXlMZW5ndGgoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjYzNDQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzkyLDI1IEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0TG9hZFN0cnVjdHVyZSgKICNlbmRpZiAvLyBub3QgVVNFKEpTVkFMVUU2
NCkKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRMb2FkUHJvdG90eXBlKFZNJiB2bSwg
R1BSUmVnIG9iamVjdEdQUiwgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncywgR1BSUmVnIHNjcmF0Y2hH
UFIsIEp1bXBMaXN0JiBzbG93UGF0aCkKK3sKKyAgICBBU1NFUlQocmVzdWx0UmVncy5wYXlsb2Fk
R1BSKCkgIT0gb2JqZWN0R1BSKTsKKyAgICBBU1NFUlQocmVzdWx0UmVncy5wYXlsb2FkR1BSKCkg
IT0gc2NyYXRjaEdQUik7CisgICAgQVNTRVJUKG9iamVjdEdQUiAhPSBzY3JhdGNoR1BSKTsKKwor
ICAgIGVtaXRMb2FkU3RydWN0dXJlKHZtLCBvYmplY3RHUFIsIHJlc3VsdFJlZ3MucGF5bG9hZEdQ
UigpLCBzY3JhdGNoR1BSKTsKKworICAgIGF1dG8gb3ZlcnJpZGVzR2V0UHJvdG90eXBlID0gYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhyZXN1bHRSZWdzLnBheWxvYWRHUFIoKSwgU3RydWN0dXJlOjpvdXRPZkxpbmVU
eXBlRmxhZ3NPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihPdmVycmlkZXNHZXRQcm90
b3R5cGVPdXRPZkxpbmUpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQob3ZlcnJpZGVzR2V0UHJvdG90
eXBlKTsKKworICAgIGxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRSZWdz
LnBheWxvYWRHUFIoKSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSksIHJlc3VsdFJlZ3Mp
OworICAgIGF1dG8gaGFzTW9ub1Byb3RvID0gYnJhbmNoSWZOb3RFbXB0eShyZXN1bHRSZWdzKTsK
KyAgICBsb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob2JqZWN0R1BSLCBvZmZzZXRS
ZWxhdGl2ZVRvQmFzZShrbm93blBvbHlQcm90b09mZnNldCkpLCByZXN1bHRSZWdzKTsKKyAgICBo
YXNNb25vUHJvdG8ubGluayh0aGlzKTsKK30KKwogdm9pZCBBc3NlbWJseUhlbHBlcnM6Om1ha2VT
cGFjZU9uU3RhY2tGb3JDQ2FsbCgpCiB7CiAgICAgdW5zaWduZWQgc3RhY2tPZmZzZXQgPSBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBtYXhGcmFtZUV4dGVu
dEZvclNsb3dQYXRoQ2FsbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2MzQ0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NjgsNiArMTY2OCw3
IEBAIHB1YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBlbWl0TG9hZFN0cnVjdHVyZShWTSYs
IFJlZ2lzdGVySUQgc291cmNlLCBSZWdpc3RlcklEIGRlc3QsIFJlZ2lzdGVySUQgc2NyYXRjaCk7
CisgICAgdm9pZCBlbWl0TG9hZFByb3RvdHlwZShWTSYsIEdQUlJlZyBvYmplY3RHUFIsIEpTVmFs
dWVSZWdzIHJlc3VsdFJlZ3MsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgp
OwogCiAgICAgdm9pZCBlbWl0U3RvcmVTdHJ1Y3R1cmVXaXRoVHlwZUluZm8oVHJ1c3RlZEltbVB0
ciBzdHJ1Y3R1cmUsIFJlZ2lzdGVySUQgZGVzdCwgUmVnaXN0ZXJJRCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyNjM0NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxOCw5ICszMTgsNiBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9X
X09QKGNyZWF0ZV9hc3luY19nZW5lcmF0b3IpCiAgICAgICAgIERFRklORV9TTE9XX09QKG5ld19n
ZW5lcmF0b3IpCiAgICAgICAgIERFRklORV9TTE9XX09QKHBvdykKLSNpZiAhVVNFKEpTVkFMVUU2
NCkKLSAgICAgICAgREVGSU5FX1NMT1dfT1AoZ2V0X3Byb3RvdHlwZV9vZikKLSNlbmRpZgogCiAg
ICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRub3QpCkBA
IC0zNjAsNiArMzU3LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAg
ICAgICBERUZJTkVfT1Aob3BfZ2V0X2J5X2lkX3dpdGhfdGhpcykKICAgICAgICAgREVGSU5FX09Q
KG9wX2dldF9ieV9pZF9kaXJlY3QpCiAgICAgICAgIERFRklORV9PUChvcF9nZXRfYnlfdmFsKQor
ICAgICAgICBERUZJTkVfT1Aob3BfZ2V0X3Byb3RvdHlwZV9vZikKICAgICAgICAgREVGSU5FX09Q
KG9wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UpCiAgICAgICAgIERFRklORV9PUChvcF9pbnN0YW5j
ZW9mKQogICAgICAgICBERUZJTkVfT1Aob3BfaW5zdGFuY2VvZl9jdXN0b20pCkBAIC00NzQsOSAr
NDcyLDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJ
TkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Ao
b3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwpCiAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAg
ICBERUZJTkVfT1Aob3BfZ2V0X3Byb3RvdHlwZV9vZikKLSNlbmRpZgogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpA
QCAtNjI1LDE1ICs2MjAsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlU2xvd0Nhc2VzKCkK
ICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Aoc3RyaWN0ZXEpCiAgICAgICAgIERFRklO
RV9TTE9XQ0FTRV9TTE9XX09QKG5zdHJpY3RlcSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NM
T1dfT1AoZ2V0X2RpcmVjdF9wbmFtZSkKKyAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1Ao
Z2V0X3Byb3RvdHlwZV9vZikKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoaGFzX293
bl9zdHJ1Y3R1cmVfcHJvcGVydHkpCiAgICAgICAgIERFRklORV9TTE9XQ0FTRV9TTE9XX09QKGlu
X3N0cnVjdHVyZV9wcm9wZXJ0eSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AocmVz
b2x2ZV9zY29wZSkKICAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoY2hlY2tfdGR6KQog
ICAgICAgICBERUZJTkVfU0xPV0NBU0VfU0xPV19PUCh0b19wcm9wZXJ0eV9rZXkpCi0jaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICAgICAgREVGSU5FX1NMT1dDQVNFX1NMT1dfT1AoZ2V0X3Byb3RvdHlw
ZV9vZikKLSNlbmRpZgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyNjM0NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTI1LDI2ICsxNTI1
LDYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZShjb25zdAogICAgIGVtaXRQ
dXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dl
dF9wcm90b3R5cGVfb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFByb3RvdHlw
ZU9mPigpOwotICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgcmVn
VDApOwotCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKSk7Ci0gICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZOb3RPYmplY3QocmVnVDApKTsKLQotICAgIGVtaXRMb2FkU3RydWN0
dXJlKHZtKCksIHJlZ1QwLCByZWdUMiwgcmVnVDEpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaFRl
c3QzMihOb25aZXJvLCBBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6Om91dE9mTGluZVR5cGVGbGFn
c09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKE92ZXJyaWRlc0dldFByb3RvdHlwZU91dE9mTGluZSkp
KTsKLQotICAgIGxvYWQ2NChBZGRyZXNzKHJlZ1QyLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNl
dCgpKSwgcmVnVDIpOwotICAgIEp1bXAgaGFzTW9ub1Byb3RvID0gYnJhbmNoVGVzdDY0KE5vblpl
cm8sIHJlZ1QyKTsKLSAgICBsb2FkNjQoQWRkcmVzcyhyZWdUMCwgb2Zmc2V0UmVsYXRpdmVUb0Jh
c2Uoa25vd25Qb2x5UHJvdG9PZmZzZXQpKSwgcmVnVDIpOwotICAgIGhhc01vbm9Qcm90by5saW5r
KHRoaXMpOwotCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwotICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUubV9kc3QsIHJlZ1QyKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKQEAg
LTE3NjUsNiArMTc0NSwzMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYXJndW1lbnQoY29uc3Qg
SW5zCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlc3VsdFJlZ3MpOwogfQogCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcHJvdG90eXBlX29mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRQcm90b3R5cGVPZj4oKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIEpTVmFs
dWVSZWdzIHZhbHVlUmVncyhyZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhyZWdU
Mik7CisgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSByZWdUMzsKKyNlbHNlCisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzKHJlZ1QxLCByZWdUMCk7CisgICAgSlNWYWx1ZVJlZ3MgcmVzdWx0UmVncyhy
ZWdUMywgcmVnVDIpOworICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gcmVnVDE7CisgICAgQVNTRVJU
KHZhbHVlUmVncy50YWdHUFIoKSA9PSBzY3JhdGNoR1BSKTsKKyNlbmRpZgorICAgIGVtaXRHZXRW
aXJ0dWFsUmVnaXN0ZXIoYnl0ZWNvZGUubV92YWx1ZSwgdmFsdWVSZWdzKTsKKworICAgIEp1bXBM
aXN0IHNsb3dDYXNlczsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbCh2YWx1
ZVJlZ3MpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90T2JqZWN0KHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCkpKTsKKworICAgIGVtaXRMb2FkUHJvdG90eXBlKHZtKCksIHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIHJlc3VsdFJlZ3MsIHNjcmF0Y2hHUFIsIHNsb3dDYXNlcyk7CisgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKKworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGJ5dGVjb2RlLm1fZHN0LCByZXN1bHRSZWdzKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDI2MzQ0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzg2LDYgKzEzODYsMTIgQEAgbGxpbnRPcFdpdGhSZXR1cm4o
b3BfaXNfb2JqZWN0LCBPcElzT2JqZQogZW5kKQogCiAKK21hY3JvIGxvYWRJbmxpbmVPZmZzZXQo
cHJvcGVydHlPZmZzZXRBc0ludCwgb2JqZWN0QW5kU3RvcmFnZSwgdmFsdWUpCisgICAgYWRkcCBz
aXplb2YgSlNPYmplY3QgLSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDgsIG9iamVjdEFu
ZFN0b3JhZ2UKKyAgICBsb2FkcSAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIDhbb2JqZWN0
QW5kU3RvcmFnZSwgcHJvcGVydHlPZmZzZXRBc0ludCwgOF0sIHZhbHVlCitlbmQKKworCiBtYWNy
byBsb2FkUHJvcGVydHlBdFZhcmlhYmxlT2Zmc2V0KHByb3BlcnR5T2Zmc2V0QXNJbnQsIG9iamVj
dEFuZFN0b3JhZ2UsIHZhbHVlKQogICAgIGJpbHQgcHJvcGVydHlPZmZzZXRBc0ludCwgZmlyc3RP
dXRPZkxpbmVPZmZzZXQsIC5pc0lubGluZQogICAgIGxvYWRwIEpTT2JqZWN0OjptX2J1dHRlcmZs
eVtvYmplY3RBbmRTdG9yYWdlXSwgb2JqZWN0QW5kU3RvcmFnZQpAQCAtMTUxNSw3ICsxNTIxLDcg
QEAgbGxpbnRPcFdpdGhQcm9maWxlKG9wX2dldF9wcm90b3R5cGVfb2YsIAogCiAub3BHZXRQcm90
b3R5cGVPZlBvbHlQcm90bzoKICAgICBtb3ZlIGtub3duUG9seVByb3RvT2Zmc2V0LCB0MQotICAg
IGxvYWRQcm9wZXJ0eUF0VmFyaWFibGVPZmZzZXQodDEsIHQwLCB0MykKKyAgICBsb2FkSW5saW5l
T2Zmc2V0KHQxLCB0MCwgdDMpCiAgICAgcmV0dXJuKHQzKQogZW5kKQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>