<?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>134860</bug_id>
          <alias>inspector_types</alias>
          <creation_ts>2014-07-12 16:19:58 -0700</creation_ts>
          <short_desc>Make improvements to Type Profiling</short_desc>
          <delta_ts>2014-08-06 16:22:50 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1022009</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-12 16:19:58 -0700</bug_when>
    <thetext>This diff almost completes the patch I want to submit to make significant improvements to the infrastructure around profiling types in JSC.

- We now know which functions have executed.
- Ranges have been made to be zero indexed, because this is simply how it should be.
- There are fewer extraneous methods that weren&apos;t needed.
- The inspector no longer receives a String blob from JSC, it now gets back structured data.
- Constructor names are now gathered for Objects

(There is also corresponding code in this current diff that shows some WebInspector JavaScript files that support displaying types, but this is there simply to show the start of code on that side, it will not make it into this patch. It will be made into a different patch under the WebInspector)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022010</commentid>
    <comment_count>1</comment_count>
      <attachid>234812</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-12 16:20:46 -0700</bug_when>
    <thetext>Created attachment 234812
patch

(Description of this patch above ^)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022354</commentid>
    <comment_count>2</comment_count>
      <attachid>234890</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-14 16:31:27 -0700</bug_when>
    <thetext>Created attachment 234890
patch

I improved the API between the inspector and JSC. We no longer send one huge
string to the inspector. We now send structured data that represents the type
information that JSC has collected. I&apos;ve also created a beginning implementation 
of a type lattice that allows us to resolve a display name for a type that
consists of a single word.

I created a data structure that knows which functions have executed. This
solves the bug where types inside an un-executed function will resolve
to the type of the enclosing expression of that function. This data
structure may also be useful later if the inspector chooses to create a UI
around showing which functions have executed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022357</commentid>
    <comment_count>3</comment_count>
      <attachid>234891</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-14 16:46:12 -0700</bug_when>
    <thetext>Created attachment 234891
patch

I improved the API between the inspector and JSC. We no longer send one huge
string to the inspector. We now send structured data that represents the type
information that JSC has collected. I&apos;ve also created a beginning implementation 
of a type lattice that allows us to resolve a display name for a type that
consists of a single word.

I created a data structure that knows which functions have executed. This
solves the bug where types inside an un-executed function will resolve
to the type of the enclosing expression of that function. This data
structure may also be useful later if the inspector chooses to create a UI
around showing which functions have executed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023477</commentid>
    <comment_count>4</comment_count>
      <attachid>235172</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-19 13:56:26 -0700</bug_when>
    <thetext>Created attachment 235172
patch

I improved the API between the inspector and JSC. We no longer send one huge
string to the inspector. We now send structured data that represents the type
information that JSC has collected. I&apos;ve also created a beginning implementation 
of a type lattice that allows us to resolve a display name for a type that
consists of a single word.

I created a data structure that knows which functions have executed. This
solves the bug where types inside an un-executed function will resolve
to the type of the enclosing expression of that function. This data
structure may also be useful later if the inspector chooses to create a UI
around showing which functions have executed.

Better type information is gathered for objects. StructureShape now
represents an object&apos;s prototype chain.  StructureShape also collects
the constructor name for an object.

Expression ranges are now zero indexed.

Removed some extraneous methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024111</commentid>
    <comment_count>5</comment_count>
      <attachid>235326</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-22 16:52:00 -0700</bug_when>
    <thetext>Created attachment 235326
patch 

I improved the API between the inspector and JSC. We no longer send one huge
string to the inspector. We now send structured data that represents the type
information that JSC has collected. I&apos;ve also created a beginning implementation 
of a type lattice that allows us to resolve a display name for a type that
consists of a single word.

I created a data structure that knows which functions have executed. This
solves the bug where types inside an un-executed function will resolve
to the type of the enclosing expression of that function. This data
structure may also be useful later if the inspector chooses to create a UI
around showing which functions have executed.

Better type information is gathered for objects. StructureShape now
represents an object&apos;s prototype chain.  StructureShape also collects
the constructor name for an object.

Expression ranges are now zero indexed.

Removed some extraneous methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024127</commentid>
    <comment_count>6</comment_count>
      <attachid>235326</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-22 17:57:45 -0700</bug_when>
    <thetext>Comment on attachment 235326
patch 

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

It&apos;s good modulo two small changes.  Can you file that bug, fix that indentation, and upload a new patch so that I can land it?

&gt; Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp:40
&gt; +    TypeProfilerSearchDescriptor descriptor = location-&gt;m_globalVariableID == HighFidelityReturnStatement ? TypeProfilerSearchDescriptorFunctionReturn
&gt; +                                              : location-&gt;m_globalVariableID == HighFidelityThisStatement ? TypeProfilerSearchDescriptorThisStatement
&gt; +                                              : TypeProfilerSearchDescriptorNormal;

I think that you should fix the style here.  In WebKit, any line that is a continuation of the statement on the previous line should be indented just an extra four spaces.

&gt; Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp:131
&gt; +    // FIXME: BestMatch should never be null past this point. This doesn&apos;t hold currently because we ignore some Eval/With/VarInjection variable assignments.

Can has bugzilla bug for this FIXME?  I think that every FIXME should have a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024130</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-22 18:04:03 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 235326 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235326&amp;action=review
&gt; 
&gt; It&apos;s good modulo two small changes.  Can you file that bug, fix that indentation, and upload a new patch so that I can land it?
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp:40
&gt; &gt; +    TypeProfilerSearchDescriptor descriptor = location-&gt;m_globalVariableID == HighFidelityReturnStatement ? TypeProfilerSearchDescriptorFunctionReturn
&gt; &gt; +                                              : location-&gt;m_globalVariableID == HighFidelityThisStatement ? TypeProfilerSearchDescriptorThisStatement
&gt; &gt; +                                              : TypeProfilerSearchDescriptorNormal;
&gt; 
&gt; I think that you should fix the style here.  In WebKit, any line that is a continuation of the statement on the previous line should be indented just an extra four spaces.
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/HighFidelityTypeProfiler.cpp:131
&gt; &gt; +    // FIXME: BestMatch should never be null past this point. This doesn&apos;t hold currently because we ignore some Eval/With/VarInjection variable assignments.
&gt; 
&gt; Can has bugzilla bug for this FIXME?  I think that every FIXME should have a bug.
Agreed. I&apos;ll make one and resubmit.
I&apos;ll also fix the spacing issues to be WebKit style compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024134</commentid>
    <comment_count>8</comment_count>
      <attachid>235332</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2014-07-22 18:29:10 -0700</bug_when>
    <thetext>Created attachment 235332
patch

Made the above style compliant changes and created a new bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024436</commentid>
    <comment_count>9</comment_count>
      <attachid>235332</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-23 21:50:35 -0700</bug_when>
    <thetext>Comment on attachment 235332
patch

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

I&apos;ll land this with the style changes.

&gt; Source/JavaScriptCore/runtime/Executable.cpp:515
&gt; +        if (vm.isProfilingTypesWithHighFidelity())
&gt; +            vm.highFidelityTypeProfiler()-&gt;functionHasExecutedCache()-&gt;insertUnexecutedRange(sourceID(), 
&gt; +                unlinkedFunctionExecutable-&gt;highFidelityTypeProfilingStartOffset(), 
&gt; +                unlinkedFunctionExecutable-&gt;highFidelityTypeProfilingEndOffset());

This should have { } around the body of the if, since the body is more than one line.

&gt; Source/JavaScriptCore/runtime/Structure.cpp:1083
&gt; +                // FIXME: What is a custom property slot?

A custom property slot is something that cannot be created from JavaScript.  There are two kinds of them:

1) Someone inherits from JSObject and overrides getOwnPropertySlot so that it intercepts attempts to access certain properties, and then does &quot;custom&quot; things instead.  This allows you to create properties with magical semantics.  Array.length is an example of a custom property.  Note that custom properties will have behavior that is observably different from anything that you could create in JavaScript.

2) Custom getter property.  This is really just a getter, except that instead of the getter being a JavaScript function, it&apos;s a C function.  Note that custom getters are not observably any different from normal getters.  They are sort of a redundant feature since we can also have JavaScript functions that are backed by native code, so you could create the equivalent of a custom getter by having a normal getter with a JSFunction that has a NativeExecutable.

I will remove this comment.

&gt; Source/JavaScriptCore/runtime/TypeLocationCache.h:46
&gt; +                   &amp;&amp; m_sourceID == other.m_sourceID
&gt; +                   &amp;&amp; m_start == other.m_start
&gt; +                   &amp;&amp; m_end == other.m_end;

Bad indentation.  Only four spaces, so:

return m_globalVariableID == other.m_globalVariableID
    &amp;&amp; m_sourceID == other.m_sourceID
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024448</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-23 22:31:33 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/171510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027337</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-08-06 16:22:50 -0700</bug_when>
    <thetext>Landed missing build file changes in r172185: &lt;http://trac.webkit.org/r172185&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234812</attachid>
            <date>2014-07-12 16:20:46 -0700</date>
            <delta_ts>2014-07-14 16:31:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>267763</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY4MSwxNiArMTY4MSwyMyBAQCBDb2RlQmxvY2s6
OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgbV9zeW1ib2xUYWJsZS5zZXQoKm1fdm0sIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBzeW1i
b2xUYWJsZSk7CiAgICAgfQorCiAgICAgCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXRO
dW1QYXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCisgICAg
aWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIHZt
KCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUo
KS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBt
X293bmVyRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5U3RhcnRPZmZzZXQoKSwgbV9vd25lckV4ZWN1
dGFibGUtPmhpZ2hGaWRlbGl0eUVuZE9mZnNldCgpKTsKKworCiAgICAgc2V0Q29uc3RhbnRSZWdp
c3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXJzKCkpOwogICAgIGlmICh1
bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQogICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29u
c3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJsZSwgbV9nbG9iYWxPYmplY3Qu
Z2V0KCkpOwogICAgIG1fZnVuY3Rpb25EZWNscy5yZXNpemVUb0ZpdCh1bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhl
Y3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7CisgICAgICAgIGlm
ICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICAgICAg
dm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCks
IHVubGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5U3RhcnRPZmZzZXQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlFbmRPZmZzZXQoKSk7CiAgICAgICAgIHVuc2lnbmVkIGxp
bmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CiAgICAgICAgIHVuc2ln
bmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtlZEV4ZWN1
dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwogICAgICAgICBib29sIHN0YXJ0Q29sdW1uSXNPbk93
bmVyU3RhcnRMaW5lID0gIXVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CkBA
IC0xNzA3LDYgKzE3MTQsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5u
dW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRh
YmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKKyAgICAgICAgaWYgKHZt
KCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAgICB2bSgp
LT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCkt
Pmluc2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPmhpZ2hGaWRlbGl0eUVuZE9mZnNldCgpKTsKICAgICAgICAgdW5zaWduZWQgbGluZUNv
dW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQoKTsKICAgICAgICAgdW5zaWduZWQg
Zmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJs
ZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAgIGJvb2wgc3RhcnRDb2x1bW5Jc09uT3duZXJT
dGFydExpbmUgPSAhdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKQEAgLTE3
NjgsNiArMTc3Nyw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8K
ICAgICAgICAgfQogICAgIH0KIAorCisKICAgICAvLyBBbGxvY2F0ZSBtZXRhZGF0YSBidWZmZXJz
IGZvciB0aGUgYnl0ZWNvZGUKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgaWYgKHNpemVfdCBzaXpl
ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mTExpbnRDYWxsTGlua0luZm9zKCkpCkBAIC0x
OTc2LDExICsxOTg3LDE0IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEOiAKLSAgICAgICAgICAg
IGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvbkFyZ3VtZW50OgotICAgICAgICAgICAg
Y2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdDogeworICAgICAgICAg
ICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1lbnQ6IHsKICAgICAgICAg
ICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9i
YWxJREV4aXN0czsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblRoaXNPYmplY3Q6IHsKKyAg
ICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5
VGhpc1N0YXRlbWVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVu
dDogewogICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgPSByZXR1cm5T
dGF0ZW1lbnRUeXBlU2V0KCk7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFy
aWFibGVJRCA9IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgJKHJldmlzaW9uIDE3MTAxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9jYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsNyArMzMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKIGVudW0gSGlnaEZpZGVs
aXR5R2xvYmFsSURGbGFncyB7CiAgICAgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdlbmVyYXRp
b24gPSAtMSwKICAgICBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzID0gLTIsCi0gICAgSGln
aEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMKKyAgICBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0
ZW1lbnQgPSAtMywKKyAgICBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID0gLTQKIH07CiAKIGNs
YXNzIFR5cGVMb2NhdGlvbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MTAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw5ICsxMDAsMTIgQEAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6
OlVubGlua2VkRnVuYwogICAgICwgbV91bmxpbmtlZEJvZHlFbmRDb2x1bW4obV9saW5lQ291bnQg
PyBub2RlLT5lbmRDb2x1bW4oKSA6IG5vZGUtPmVuZENvbHVtbigpIC0gbm9kZS0+c3RhcnRDb2x1
bW4oKSkKICAgICAsIG1fc3RhcnRPZmZzZXQobm9kZS0+c291cmNlKCkuc3RhcnRPZmZzZXQoKSAt
IHNvdXJjZS5zdGFydE9mZnNldCgpKQogICAgICwgbV9zb3VyY2VMZW5ndGgobm9kZS0+c291cmNl
KCkubGVuZ3RoKCkpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVN0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0
aW9uTmFtZVN0YXJ0KCkpCisgICAgLCBtX2hpZ2hGaWRlbGl0eUVuZE9mZnNldChub2RlLT5zdGFy
dFN0YXJ0T2Zmc2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCiAgICAgLCBtX2Zl
YXR1cmVzKG5vZGUtPmZlYXR1cmVzKCkpCiAgICAgLCBtX2Z1bmN0aW9uTW9kZShub2RlLT5mdW5j
dGlvbk1vZGUoKSkKIHsKKyAgICBwcmludGYoIlVuaW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgbGVu
Z3RoOiVkXG4iLCBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSk7CiB9CiAKIHNpemVfdCBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZTo6cGFyYW1ldGVyQ291bnQoKSBjb25zdApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDggQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIHVubGlua2VkQm9keUVuZENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fdW5s
aW5rZWRCb2R5RW5kQ29sdW1uOyB9CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CiAgICAgdW5zaWduZWQgc291cmNlTGVuZ3RoKCkgeyBy
ZXR1cm4gbV9zb3VyY2VMZW5ndGg7IH0KKyAgICB1bnNpZ25lZCBoaWdoRmlkZWxpdHlTdGFydE9m
ZnNldCgpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5U3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25l
ZCBoaWdoRmlkZWxpdHlFbmRPZmZzZXQoKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eUVuZE9mZnNl
dDsgfQogCiAgICAgU3RyaW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTE4Niw2ICsxODgs
OCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOwogICAg
IHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7Cisg
ICAgdW5zaWduZWQgbV9oaWdoRmlkZWxpdHlTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2hp
Z2hGaWRlbGl0eUVuZE9mZnNldDsKIAogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTcxMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMzNyw3ICszMzcsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Io
Vk0mCiAKICAgICBtX3N5bWJvbFRhYmxlLT5zZXRDYXB0dXJlRW5kKHZpcnR1YWxSZWdpc3RlckZv
ckxvY2FsKGNvZGVCbG9jay0+bV9udW1WYXJzKS5vZmZzZXQoKSk7CiAKLSAgICBib29sIGNhbkxh
emlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJvZHktPm5lZWRzQWN0aXZhdGlvbkZvck1v
cmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxkRW1pdERlYnVnSG9va3M7CisgICAgYm9vbCBj
YW5MYXppbHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25G
b3JNb3JlVGhhblZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzICYmICFpc1By
b2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpOwogICAgIG1fZmlyc3RMYXp5RnVuY3Rpb24g
PSBjb2RlQmxvY2stPm1fbnVtVmFyczsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0
aW9uU3RhY2suc2l6ZSgpOyArK2kpIHsKICAgICAgICAgRnVuY3Rpb25Cb2R5Tm9kZSogZnVuY3Rp
b24gPSBmdW5jdGlvblN0YWNrW2ldOwpAQCAtMTExNiw2ICsxMTE2LDE0IEBAIFJlZ2lzdGVySUQq
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RXF1YWwKICAgICByZXR1cm4gZHN0OwogfQogCit2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Np
b25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBKU1RleHRQb3Np
dGlvbiYgZW5kRGl2b3QpCit7CisgICAgdW5zaWduZWQgc3RhcnQgPSBzdGFydERpdm90Lm9mZnNl
dDsgLy8gUmFuZ2VzIGFyZSBpbmNsdXNpdmUgb2YgdGhlaXIgZW5kcG9pbnRzLCBBTkQgMCBpbmRl
eGVkLgorICAgIHVuc2lnbmVkIGVuZCA9IGVuZERpdm90Lm9mZnNldCAtIDE7IC8vIEVuZCBSYW5n
ZXMgYWxyZWFkeSBnbyBvbmUgcGFzdCB0aGUgaW5jbHVzaXZlIHJhbmdlLCBzbyBzdWJ0cmFjdCAx
LgorICAgIHVuc2lnbmVkIGluc3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgp
IC0gMTsKKyAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNz
aW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7Cit9CisKIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQq
IHJlZ2lzdGVyVG9Qcm9maWxlLCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVG
bGFnIGZsYWcpCiB7CiAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3R5cGVzX3dpdGhfaGlnaF9m
aWRlbGl0eSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVj
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNCwxMyArMzI0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmFkZEV4cHJlc3Npb25JbmZvKGluc3RydWN0aW9uT2Zmc2V0LCBkaXZv
dE9mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbGluZSwgY29sdW1uKTsKICAgICAgICAg
fQogCi0gICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZERpdm90KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydCA9IHN0
YXJ0RGl2b3Qub2Zmc2V0ICsgMTsgLy8gUmFuZ2VzIGFyZSBpbmNsdXNpdmUgb2YgdGhlaXIgZW5k
cG9pbnRzLCBBTkQgMSBpbmRleGVkLgotICAgICAgICAgICAgdW5zaWduZWQgZW5kID0gZW5kRGl2
b3Qub2Zmc2V0OyAvLyBFbmQgUmFuZ2VzIGFscmVhZHkgZ28gb25lIHBhc3QgdGhlIGluY2x1c2l2
ZSByYW5nZSwgc28gbm8gbmVlZCB0byBkbyArIDEgLSAxLgotICAgICAgICAgICAgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlvbnMoKS5zaXplKCkgLSAxOwotICAgICAgICAg
ICAgbV9jb2RlQmxvY2stPmFkZEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbkluZm8o
aW5zdHJ1Y3Rpb25PZmZzZXQsIHN0YXJ0LCBlbmQpOwotICAgICAgICB9CiAKICAgICAgICAgQUxX
QVlTX0lOTElORSBib29sIGxlZnRIYW5kU2lkZU5lZWRzQ29weShib29sIHJpZ2h0SGFzQXNzaWdu
bWVudHMsIGJvb2wgcmlnaHRJc1B1cmUpCiAgICAgICAgIHsKQEAgLTM0OCw2ICszNDEsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBlbWl0Tm9kZShuKTsKICAgICAgICAg
fQogCisgICAgICAgIHZvaWQgZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZERpdm90KTsKICAgICAgICAgdm9pZCBlbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eShSZWdpc3RlcklEKiBkc3QsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHlCeXRlY29k
ZUZsYWcpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRMb2FkKFJlZ2lzdGVySUQqIGRzdCwg
Ym9vbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
NDEsNyArMTU0MSw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMK
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZSh0ZW1wRHN0LmdldCgpLCBtX3JpZ2h0KTsK
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShsb2NhbC5nZXQoKSwgdGVtcERzdC5nZXQo
KSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZp
ZGVsaXR5KCkpCi0gICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNz
aW9uSW5mbyhkaXZvdFN0YXJ0KCksIEpTVGV4dFBvc2l0aW9uKC0xLCBkaXZvdFN0YXJ0KCkub2Zm
c2V0ICsgbV9pZGVudC5sZW5ndGgoKSwgLTEpKTsKICAgICAgICAgICAgIHJldHVybiBnZW5lcmF0
b3IubW92ZVRvRGVzdGluYXRpb25JZk5lZWRlZChkc3QsIHRlbXBEc3QuZ2V0KCkpOwogICAgICAg
ICB9CiAgICAgICAgIFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZShsb2Nh
bC5nZXQoKSwgbV9yaWdodCk7CkBAIC0xNTU4LDcgKzE1NTgsNyBAQCBSZWdpc3RlcklEKiBBc3Np
Z25SZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjCiAgICAgUmVnaXN0ZXJJRCogcmV0OwogICAgIGlmIChn
ZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewogICAgICAgICBy
ZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGVXaXRoUHJvZmlsZShzY29wZS5nZXQoKSwgbV9p
ZGVudCwgcmVzdWx0LmdldCgpLCBnZW5lcmF0b3IuaXNTdHJpY3RNb2RlKCkgPyBUaHJvd0lmTm90
Rm91bmQgOiBEb05vdFRocm93SWZOb3RGb3VuZCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RF
bmQoKSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4
cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgSlNUZXh0UG9zaXRpb24oLTEsIGRpdm90U3RhcnQo
KS5vZmZzZXQgKyBtX2lkZW50Lmxlbmd0aCgpLCAtMSkpOwogICAgIH0gZWxzZQogICAgICAgICBy
ZXQgPSBnZW5lcmF0b3IuZW1pdFB1dFRvU2NvcGUoc2NvcGUuZ2V0KCksIG1faWRlbnQsIHJlc3Vs
dC5nZXQoKSwgZ2VuZXJhdG9yLmlzU3RyaWN0TW9kZSgpID8gVGhyb3dJZk5vdEZvdW5kIDogRG9O
b3RUaHJvd0lmTm90Rm91bmQpOwogICAgIHJldHVybiByZXQ7CkBAIC0xNTc2LDcgKzE1NzYsNyBA
QCBSZWdpc3RlcklEKiBBc3NpZ25Eb3ROb2RlOjplbWl0Qnl0ZWNvZGUoCiAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIGZvcndhcmRSZXN1bHQpOwogICAgIGlm
IChnZW5lcmF0b3IuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgewogICAgICAg
ICBnZW5lcmF0b3IuZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHkoZm9yd2FyZFJlc3Vs
dCwgUHJvZmlsZVR5cGVzQnl0ZWNvZGVEb2VzTm90SGF2ZUdsb2JhbElEKTsKLSAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RT
dGFydCgpLCBkaXZvdEVuZCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8oZGl2b3RTdGFydCgpLCBKU1RleHRQb3NpdGlvbigt
MSwgbV9yaWdodC0+cG9zaXRpb24oKS5vZmZzZXQgLSAxLCAtMSkpOwogICAgIH0KICAgICByZXR1
cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBmb3J3YXJkUmVzdWx0
KTsKIH0KQEAgLTE2MjEsNyArMTYyMSw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkJyYWNrZXROb2Rl
OjplbWl0Qnl0ZWMKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFsKGJhc2UuZ2V0KCksIHByb3Bl
cnR5LmdldCgpLCBmb3J3YXJkUmVzdWx0KTsKICAgICBpZiAoZ2VuZXJhdG9yLmlzUHJvZmlsaW5n
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQcm9maWxl
VHlwZXNXaXRoSGlnaEZpZGVsaXR5KGZvcndhcmRSZXN1bHQsIFByb2ZpbGVUeXBlc0J5dGVjb2Rl
RG9lc05vdEhhdmVHbG9iYWxJRCk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKGRpdm90U3RhcnQoKSwgZGl2b3RFbmQoKSk7Cisg
ICAgICAgIGdlbmVyYXRvci5lbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0V4cHJlc3Npb25J
bmZvKGRpdm90U3RhcnQoKSwgSlNUZXh0UG9zaXRpb24oLTEsIG1fcmlnaHQtPnBvc2l0aW9uKCku
b2Zmc2V0IC0gMSwgLTEpKTsKICAgICB9CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0
aW5hdGlvbklmTmVlZGVkKGRzdCwgZm9yd2FyZFJlc3VsdCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTcxMDE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3MCw4ICs5NzAsNiBAQCB2
b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBjb2xsZWN0CiAjaWYgRU5BQkxFKEFMTE9D
QVRJT05fTE9HR0lORykKICAgICBkYXRhTG9nRigiSlNDIEdDIHN0YXJ0aW5nIGNvbGxlY3Rpb24u
XG4iKTsKICNlbmRpZgotICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKQotICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRl
bGl0eUxvZyhmYWxzZSwgIkdDIik7CiAgICAgCiAgICAgZG91YmxlIGJlZm9yZSA9IDA7CiAgICAg
aWYgKE9wdGlvbnM6OmxvZ0dDKCkpIHsKQEAgLTk4MSw2ICs5NzksMTEgQEAgdm9pZCBIZWFwOjpj
b2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVjdAogICAgIAogICAgIFNhbXBsaW5nUmVnaW9uIHNh
bXBsaW5nUmVnaW9uKCJHYXJiYWdlIENvbGxlY3Rpb24iKTsKICAgICAKKyAgICBpZiAodm0oKS0+
aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkgeworICAgICAgICBEZWZlckdDRm9y
QVdoaWxlIGF3aGlsZSgqdGhpcyk7CisgICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eUxvZygpLT5w
cm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJHQyIpOworICAgIH0KKyAgICAKICAgICBSRUxFQVNFX0FT
U0VSVCghbV9kZWZlcnJhbERlcHRoKTsKICAgICBBU1NFUlQodm0oKS0+Y3VycmVudFRocmVhZElz
SG9sZGluZ0FQSUxvY2soKSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+YXRvbWljU3RyaW5n
VGFibGUoKSA9PSB3dGZUaHJlYWREYXRhKCkuYXRvbWljU3RyaW5nVGFibGUoKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdl
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDggQEAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
KQogCiAjaW5jbHVkZSAiQ29tcGxldGlvbi5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eUxvZy5o
IgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUgIkluamVj
dGVkU2NyaXB0LmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCkBAIC0xOTEsMTEgKzE5MywyMCBAQCB2b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6cnVuKEVycm9yU3RyCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIGluX3ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBpbl9pZCwgaW50IGlu
X2Rpdm90LCBTdHJpbmcqIG91dF90eXBlcykgCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9yU3RyaW5nKiwgaW50IGluX3R5
cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3IsIGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIGludCBp
bl9kaXZvdCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj4mIG91dF90eXBlcykKIHsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwotICAgIFN0
cmluZyB0eXBlcyh2bS5nZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQoaW5fZGl2b3QsIGluX3Zh
cmlhYmxlTmFtZSwgaW5faWQpKTsKLSAgICAqb3V0X3R5cGVzID0gdHlwZXM7CisgICAgb3V0X3R5
cGVzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uOjpj
cmVhdGUoKTsKKworICAgIGlmICghdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBva2F5OworICAgIGludHB0cl90IHNvdXJj
ZUlEID0gaW5fc291cmNlSUQudG9JbnRQdHJTdHJpY3QoJm9rYXkpOworICAgIEFTU0VSVChva2F5
KTsKKworICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJV
c2VyIFF1ZXJ5Iik7CisgICAgdm0uaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmdldFR5cGVz
Rm9yVmFyaWFibGVuT2Zmc2V0Rm9ySW5zcGVjdG9yKHN0YXRpY19jYXN0PFR5cGVQcm9maWxlclNl
YXJjaERlc2NyaXB0b3I+KGluX3R5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3IpLCBpbl9kaXZvdCwg
c291cmNlSUQsIG91dF90eXBlcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGlt
ZUFnZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmgJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNv
bnN0IGJvb2wqIG93blByb3BlcnRpZXMsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+
PiYgcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
OjpUeXBlQnVpbGRlcjo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50
ZXJuYWxQcm9wZXJ0aWVzKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcmVsZWFz
ZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgb3Zl
cnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJ1bihFcnJvclN0cmluZyopIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3ZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bl9pZCwgaW50IGluX2Rpdm90LCBTdHJpbmcqIG91dF90eXBlcykgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVBdE9mZnNldChFcnJvclN0cmluZyos
IGludCBpbl90eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yLCBjb25zdCBTdHJpbmcmIGluX3NvdXJj
ZUlELCBpbnQgaW5fZGl2b3QsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1l
OjpUeXBlRGVzY3JpcHRpb24+JiBvdXRfdHlwZXMpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBzZXRT
Y3JpcHREZWJ1Z1NlcnZlcihTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2ZXIpIHsg
bV9zY3JpcHREZWJ1Z1NlcnZlciA9IHNjcmlwdERlYnVnU2VydmVyOyB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5q
c29uCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3Byb3RvY29sL1J1bnRpbWUuanNvbgkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwyNSBA
QAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAic3RhcnRPZmZzZXQiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIlN0YXJ0IG9mZnNldCBvZiByYW5nZSAoaW5jbHVzaXZlKS4i
IH0sCiAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbmRPZmZzZXQiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogIkVuZCBvZmZzZXQgb2YgcmFuZ2UgKGV4Y2x1c2l2ZSkuIiB9
CiAgICAgICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6
ICJTdHJ1Y3R1cmVEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCisg
ICAgICAgICAgICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBzdHJpbmdzLCB3aGVyZSB0aGUgc3RyaW5ncyByZXByZXNl
bnQgb2JqZWN0IGZpZWxkcy4iCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJp
ZCI6ICJUeXBlRGVzY3JpcHRpb24iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb250YWluZXIgZm9yIHR5cGUgaW5mb3JtYXRpb24g
dGhhdCBoYXMgYmVlbiBnYXRoZXJlZC4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkaXNwbGF5VHlwZU5hbWUiLCAidHlwZSI6ICJzdHJp
bmciLCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiV2hhdCB0aGUgaW5zcGVjdG9y
IHNob3VsZCBkaXNwbGF5IGFzIGEgc2ltcGxlIHR5cGUuIiB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAibGVhc3RVcHBlckJvdW5kIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0
eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkxlYXN0
IHVwcGVyIGJvdW5kIG9mIG9iamVjdCBmaWVsZHMuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAibG9jYWxTdHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVm
IjogIlN0cnVjdHVyZURlc2NyaXB0aW9uIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiQXJyYXkgb2YgZGVzY3JpcHRpb25zIGZvciBhbGwgc3RydWN0dXJlcyBzZWVuIGF0IHRo
aXMgdGhpcyBpbnN0cnVjdGlvbi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2Nh
bFR5cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmci
IH0sICJvcHRpb25hbCI6ICJ0cnVlIiwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFt
ZXMgZm9yIGFsbCB0eXBlcyBzZWVuIGF0IGluc3RydWN0aW9uLiIgfSwKKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImdsb2JhbFN0cnVjdHVyZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6
IHsgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iIH0sICJvcHRpb25hbCI6IHRydWUsICJk
ZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBkZXNjcmlwdGlvbnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNl
ZW4gZm9yIHRoaXMgdmFyaWFibGUuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZ2xv
YmFsVHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmlu
ZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFt
ZXMgZm9yIGFsbCB0eXBlcyBzZWVuIGF0IGdsb2JhbGx5LiIgfQorICAgICAgICAgICAgXQogICAg
ICAgICB9CiAgICAgXSwKICAgICAiY29tbWFuZHMiOiBbCkBAIC0yMDAsMTIgKzIxOSwxMiBAQAog
ICAgICAgICB7CiAgICAgICAgICAgICAibmFtZSI6ICJnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxl
QXRPZmZzZXQiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJ2YXJpYWJsZU5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiVmFyaWFibGUgd2Ugd2FudCB0eXBlIGluZnJvbWF0aW9uIGZvci4iIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJ0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yIiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJXaGF0IGtpbmQgb2YgdHlwZSBpbmZvcm1hdGlvbiBkbyB3
ZSB3YW50IChub3JtYWwsIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMsICd0aGlzJyBzdGF0ZW1lbnQp
LiIgfSwKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZUlEIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogInNvdXJjZUlEIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgc2Ny
aXB0IiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGl2b3QiLCAidHlwZSI6ICJpbnRl
Z2VyIiwgImRlc2NyaXB0aW9uIjogImNoYXJhY3RlciBvZmZzZXQgZm9yIGFzc2lnbm1lbnQgcmFu
Z2UiIH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInR5cGVzIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFibGUuIiB9CisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJ0eXBlcyIsICIkcmVmIjogIlR5cGVEZXNjcmlwdGlvbiIsICJkZXNjcmlwdGlvbiI6
ICJUeXBlcyBmb3IgcmVxdWVzdGVkIHZhcmlhYmxlLiIgfQogICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJSZXR1cm5zIGRldGFpbGVkIGluZm9ybXRhdGlvbiBvbiBn
aXZlbiBmdW5jdGlvbi4iCiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NiArMzAsNyBAQAogI2luY2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSklULmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBv
aW50LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgpAQCAtMTAzLDYgKzEwNCw4IEBAIFNjcmlw
dEV4ZWN1dGFibGU6OlNjcmlwdEV4ZWN1dGFibGUoU3RydWMKICAgICAsIG1fbGFzdExpbmUoLTEp
CiAgICAgLCBtX3N0YXJ0Q29sdW1uKFVJTlRfTUFYKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9N
QVgpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVN0YXJ0T2Zmc2V0KFVJTlRfTUFYKQorICAgICwgbV9o
aWdoRmlkZWxpdHlFbmRPZmZzZXQoVUlOVF9NQVgpCiB7CiB9CiAKQEAgLTM3OSw2ICszODIsMTAg
QEAgY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZgogUHJvZ3JhbUV4ZWN1
dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dyYW1FeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNlKQogeworICAg
IG1faGlnaEZpZGVsaXR5U3RhcnRPZmZzZXQgPSAwOworICAgIG1faGlnaEZpZGVsaXR5RW5kT2Zm
c2V0ID0gc291cmNlLmxlbmd0aCgpIC0gMTsKKyAgICBpZiAoZXhlYy0+dm0oKS5pc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICBleGVjLT52bSgpLmhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVj
dXRlZFJhbmdlKHNvdXJjZUlEKCksIG1faGlnaEZpZGVsaXR5U3RhcnRPZmZzZXQsIG1faGlnaEZp
ZGVsaXR5RW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCkBAIC00MDIsNiArNDA5LDggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5j
dGlvbkV4ZWN1dGFibGUoVgogICAgIEFTU0VSVChlbmRDb2x1bW4gIT0gVUlOVF9NQVgpOwogICAg
IG1fc3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVt
bjsKKyAgICBtX2hpZ2hGaWRlbGl0eVN0YXJ0T2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5o
aWdoRmlkZWxpdHlTdGFydE9mZnNldCgpOworICAgIG1faGlnaEZpZGVsaXR5RW5kT2Zmc2V0ID0g
dW5saW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlFbmRPZmZzZXQoKTsKIH0KIAogdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQpAQCAtNTAwLDYgKzUwOSwx
MCBAQCBKU09iamVjdCogUHJvZ3JhbUV4ZWN1dGFibGU6OmluaXRpYWxpemVHCiAgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSA9IGZ1
bmN0aW9uRGVjbGFyYXRpb25zW2ldLnNlY29uZC5nZXQoKTsKICAgICAgICAgSlNWYWx1ZSB2YWx1
ZSA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmxp
bmsodm0sIG1fc291cmNlLCBsaW5lTm8oKSksIHNjb3BlKTsKICAgICAgICAgZ2xvYmFsT2JqZWN0
LT5hZGRGdW5jdGlvbihjYWxsRnJhbWUsIGZ1bmN0aW9uRGVjbGFyYXRpb25zW2ldLmZpcnN0LCB2
YWx1ZSk7CisgICAgICAgIGlmICh2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KQorICAgICAgICAgICAgdm0uaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgCisgICAg
ICAgICAgICAgICAgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVN0YXJ0
T2Zmc2V0KCksIAorICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5o
aWdoRmlkZWxpdHlFbmRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTcxMDE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjUsNiArMzY1LDggQEAgcHVibGljOgogICAgIGludCBsYXN0TGluZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICB1bnNpZ25lZCBzdGFydENvbHVtbigpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KICAgICB1bnNpZ25lZCBlbmRDb2x1bW4oKSBjb25zdCB7
IHJldHVybiBtX2VuZENvbHVtbjsgfQorICAgIHVuc2lnbmVkIGhpZ2hGaWRlbGl0eVN0YXJ0T2Zm
c2V0KCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVk
IGhpZ2hGaWRlbGl0eUVuZE9mZnNldCgpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5RW5kT2Zmc2V0
OyB9CiAKICAgICBib29sIHVzZXNFdmFsKCkgY29uc3QgeyByZXR1cm4gbV9mZWF0dXJlcyAmIEV2
YWxGZWF0dXJlOyB9CiAgICAgYm9vbCB1c2VzQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9m
ZWF0dXJlcyAmIEFyZ3VtZW50c0ZlYXR1cmU7IH0KQEAgLTQzNSw2ICs0MzcsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgaW50IG1fbGFzdExpbmU7CiAgICAgdW5zaWduZWQgbV9zdGFydENvbHVtbjsKICAg
ICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVN0YXJ0
T2Zmc2V0OworICAgIHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5RW5kT2Zmc2V0OwogfTsKIAogY2xh
c3MgRXZhbEV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5jcHAJKHJl
dmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDM5ICs1MywxOSBAQCBIaWdoRmlkZWxp
dHlMb2c6On5IaWdoRmlkZWxpdHlMb2coKQogICAgIGRlbGV0ZVtdIG1fbmV4dEJ1ZmZlcjsKIH0K
IAotdm9pZCBIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coYm9vbCBhc3lu
Y2hyb25vdXNseSwgU3RyaW5nIHJlYXNvbikKK3ZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNz
SGlnaEZpZGVsaXR5TG9nKFN0cmluZyByZWFzb24pCiB7Ci0gICAgLy8gVGhpcyBzaG91bGQgb25s
eSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiBleGVjdXRpb24gdGhyZWFkLgogICAgIGlmICghbV9j
dXJyZW50T2Zmc2V0KQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgZGF0YUxvZygiUHJvY2VzcyBjYWxsZXI6JyIsIHJlYXNvbiwiJyIpOwogCi0gICAgQnl0ZVNw
aW5Mb2NrZXIqIGxvY2tlciA9IG5ldyBCeXRlU3BpbkxvY2tlcihtX2xvY2spOwotICAgIFRocmVh
ZERhdGEqIGRhdGEgPSBuZXcgVGhyZWFkRGF0YTsKLSAgICBkYXRhLT5tX3Byb2NjZXNzTG9nVG9P
ZmZzZXQgPSBtX2N1cnJlbnRPZmZzZXQ7Ci0gICAgZGF0YS0+bV9wcm9jZXNzTG9nUHRyID0gbV9s
b2dTdGFydFB0cjsKLSAgICBkYXRhLT5tX2xvY2tlciA9IGxvY2tlcjsKLQotICAgIG1fY3VycmVu
dE9mZnNldCA9IDA7Ci0gICAgc3RkOjpzd2FwKG1fbG9nU3RhcnRQdHIsIG1fbmV4dEJ1ZmZlcik7
Ci0gICAgCi0gICAgaWYgKGFzeW5jaHJvbm91c2x5KQotICAgICAgICBjcmVhdGVUaHJlYWQoYWN0
dWFsbHlQcm9jZXNzTG9nVGhyZWFkRnVuY3Rpb24sIGRhdGEsICJQcm9jZXNzSGlnaEZpZGVsaXR5
TG9nIik7Ci0gICAgZWxzZSAKLSAgICAgICAgYWN0dWFsbHlQcm9jZXNzTG9nVGhyZWFkRnVuY3Rp
b24oZGF0YSk7Ci19Ci0KLXZvaWQgSGlnaEZpZGVsaXR5TG9nOjphY3R1YWxseVByb2Nlc3NMb2dU
aHJlYWRGdW5jdGlvbih2b2lkKiBhcmcpCi17CiAgICAgZG91YmxlIGJlZm9yZSA9IGN1cnJlbnRU
aW1lTVMoKTsKLSAgICBUaHJlYWREYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8VGhyZWFkRGF0YSo+
KGFyZyk7Ci0gICAgTG9nRW50cnkqIGVudHJ5ID0gZGF0YS0+bV9wcm9jZXNzTG9nUHRyOworICAg
IExvZ0VudHJ5KiBlbnRyeSA9IG1fbG9nU3RhcnRQdHI7CiAgICAgSGFzaE1hcDxTdHJ1Y3R1cmVJ
RCwgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4gc2VlblNoYXBlczsKLSAgICBzaXplX3QgcHJvY2Vz
c0xvZ1RvT2Zmc2V0ID0gZGF0YS0+bV9wcm9jY2Vzc0xvZ1RvT2Zmc2V0OyAKICAgICBzaXplX3Qg
aSA9IDA7Ci0gICAgd2hpbGUgKGkgPCBwcm9jZXNzTG9nVG9PZmZzZXQpIHsKKyAgICB3aGlsZSAo
aSA8IG1fY3VycmVudE9mZnNldCkgewogICAgICAgICBTdHJ1Y3R1cmVJRCBpZCA9IGVudHJ5LT5z
dHJ1Y3R1cmVJRDsKICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZTsgCiAgICAg
ICAgIGlmIChpZCkgewpAQCAtMTA1LDExICs4NSwxMiBAQCB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6
YWN0dWFsbHlQcm9jZXNzTG9nCiAgICAgICAgIGkrKzsKICAgICB9CiAKLSAgICBkZWxldGUgZGF0
YS0+bV9sb2NrZXI7Ci0gICAgZGVsZXRlIGRhdGE7Ci0gICAgZG91YmxlIGFmdGVyID0gY3VycmVu
dFRpbWVNUygpOwotICAgIGlmICh2ZXJib3NlKQorICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisK
KyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBkb3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1T
KCk7CiAgICAgICAgIGRhdGFMb2dGKCIgUHJvY2Vzc2luZyB0aGUgbG9nIHRvb2s6ICclZicgbXNc
biIsIGFmdGVyIC0gYmVmb3JlKTsKKyAgICB9CiB9CiAKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAko
cmV2aXNpb24gMTcxMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDE0ICs2OSwxMyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgICAgIG1fY3VycmVudE9mZnNldCArPSAxOwogICAgICAgICBpZiAobV9jdXJyZW50
T2Zmc2V0ID09IG1faGlnaEZpZGVsaXR5TG9nU2l6ZSkKLSAgICAgICAgICAgIHByb2Nlc3NIaWdo
RmlkZWxpdHlMb2codHJ1ZSwgIkxvZyBGdWxsIik7CisgICAgICAgICAgICBwcm9jZXNzSGlnaEZp
ZGVsaXR5TG9nKCJMb2cgRnVsbCIpOwogICAgIH0KIAotICAgIHZvaWQgcHJvY2Vzc0hpZ2hGaWRl
bGl0eUxvZyhib29sIGFzeW5jaHJvbm91c2x5ID0gZmFsc2UsIFN0cmluZyA9ICIiKTsKKyAgICB2
b2lkIHByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3RyaW5nKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGluaXRpYWxpemVIaWdoRmlkZWxpdHlMb2coKTsKLSAgICBzdGF0aWMgdm9pZCBhY3R1YWxseVBy
b2Nlc3NMb2dUaHJlYWRGdW5jdGlvbih2b2lkKik7CiAKICAgICB1bnNpZ25lZCBtX2hpZ2hGaWRl
bGl0eUxvZ1NpemU7CiAgICAgc2l6ZV90IG1fY3VycmVudE9mZnNldDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyLmNwcAkocmV2aXNpb24gMTcxMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NzMgKzI2LDE1NiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlci5oIgogCisjaW5jbHVkZSAiSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCIK
ICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBj
b25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotU3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0
IFN0cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCkKK3ZvaWQgSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxv
Y2F0aW9uKQogewotICAgIFN0cmluZyBnbG9iYWwgPSBnZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxl
QXRPZmZzZXQoZGl2b3QsIHZhcmlhYmxlTmFtZSwgc291cmNlSUQpOwotICAgIGlmICghZ2xvYmFs
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbDsKLSAgICAKLSAgICByZXR1cm4gZ2V0
TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQoZGl2b3QsIHZhcmlhYmxlTmFtZSwgc291cmNl
SUQpOworICAgIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGxvY2F0
aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8g
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJp
YWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yVGhpc1N0YXRlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDsKKworICAg
IGRhdGFMb2dGKCJbU3RhcnQsIEVuZF06OlsldSwgJXVdXG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0
YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7CisKKyAgICBpZiAoZmluZExvY2F0aW9uKGxvY2F0
aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX3NvdXJjZUlELCBkZXNjcmlwdG9yKSkKKyAg
ICAgICAgZGF0YUxvZygiXHRcdFtFbnRyeSBJUyBpbiBTeXN0ZW1dXG4iKTsKKyAgICBlbHNlCisg
ICAgICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMgTk9UIGluIHN5c3RlbV1cbiIpOworCisgICAg
ZGF0YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVs
aXR5UmV0dXJuU3RhdGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50XSIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxvY2F0aW9uLT5tX2dsb2Jh
bFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudCA/ICJbVGhpcyBTdGF0ZW1l
bnRdIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogIltOb3JtYWwgU3RhdGVtZW50XSIsICJcbiIpOworCisgICAgZGF0YUxvZygiXHRcdCNMb2Nh
bCNcblx0XHQiLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPnNlZW5UeXBlcygpLnJl
cGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsKKyAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFs
VHlwZVNldCkKKyAgICAgICAgZGF0YUxvZygiXHRcdCNHbG9iYWwjXG5cdFx0IiwgbG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJc
biIpOwogfQogCi1TdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRHbG9iYWxUeXBl
c0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgLCBpbnRw
dHJfdCBzb3VyY2VJRCkKK3ZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjppbnNlcnROZXdM
b2NhdGlvbihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQogewotICAgIFR5cGVMb2NhdGlvbiogbG9j
YXRpb24gPSBmaW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlEKTsKLSAgICBpZiAoIWxvY2F0aW9u
KQotICAgICAgICByZXR1cm4gICIiOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9n
RigiUmVnaXN0ZXJpbmcgbG9jYXRpb246OiBkaXZvdFN0YXJ0OiV1LCBkaXZvdEVuZDoldVxuIiwg
bG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOwogCi0gICAgaWYg
KGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4
aXN0cykKLSAgICAgICAgcmV0dXJuICIiOworICAgIGlmICghbV9idWNrZXRNYXAuY29udGFpbnMo
bG9jYXRpb24tPm1fc291cmNlSUQpKSB7CisgICAgICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiBi
dWNrZXQ7CisgICAgICAgIG1fYnVja2V0TWFwLnNldChsb2NhdGlvbi0+bV9zb3VyY2VJRCwgYnVj
a2V0KTsKKyAgICB9CiAKLSAgICByZXR1cm4gbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+c2Vl
blR5cGVzKCk7CisgICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+JiBidWNrZXQgPSBtX2J1Y2tldE1h
cC5maW5kKGxvY2F0aW9uLT5tX3NvdXJjZUlEKS0+dmFsdWU7CisgICAgYnVja2V0LmFwcGVuZChs
b2NhdGlvbik7CiB9CiAKLVN0cmluZyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldExvY2Fs
VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmICwg
aW50cHRyX3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlw
ZXNGb3JWYXJpYWJsZW5PZmZzZXRGb3JJbnNwZWN0b3IoVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3Jp
cHRvciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFJlZlB0
cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+JiByZXQp
CiB7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwgc291
cmNlSUQpOworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBmaW5kTG9jYXRpb24oZGl2b3Qs
IHNvdXJjZUlELCBkZXNjcmlwdG9yKTsKICAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1
cm4gICIiOworICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gbG9jYXRpb24tPm1faW5zdHJ1
Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKTsKKyAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlw
ZVNldCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0eU5vR2xv
YmFsSURFeGlzdHMpIHsKKyAgICAgICAgcmV0LT5zZXREaXNwbGF5VHlwZU5hbWUobG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7CisgICAgICAgIHJldC0+c2V0TGVhc3RV
cHBlckJvdW5kKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmxlYXN0VXBwZXJCb3VuZCgpKTsK
KyAgICAgICAgcmV0LT5zZXRHbG9iYWxUeXBlTmFtZXMobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNl
dC0+YWxsVHlwZU5hbWVzKCkpOworICAgICAgICByZXQtPnNldEdsb2JhbFN0cnVjdHVyZXMobG9j
YXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJldC0+c2V0RGlzcGxheVR5cGVOYW1lKGxvY2F0aW9uLT5t
X2luc3RydWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7CisgICAgICAgIHJldC0+c2V0TGVh
c3RVcHBlckJvdW5kKGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+bGVhc3RVcHBlckJv
dW5kKCkpOworICAgIH0KKworICAgIHJldC0+c2V0TG9jYWxUeXBlTmFtZXMobG9jYXRpb24tPm1f
aW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxUeXBlTmFtZXMoKSk7CisgICAgcmV0LT5zZXRMb2NhbFN0
cnVjdHVyZXMobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXBy
ZXNlbnRhdGlvbnMoKSk7CiB9CiAKLXZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjppbnNl
cnROZXdMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQorc3RhdGljIGJvb2wgZGVzY3Jp
cHRvck1hdGNoZXNUeXBlTG9jYXRpb24oVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNj
cmlwdG9yLCBUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQogewotICAgIGlmICh2ZXJib3NlKQotICAg
ICAgICBkYXRhTG9nRigiUmVnaXN0ZXJpbmcgbG9jYXRpb246OiBkaXZvdFN0YXJ0OiV1LCBkaXZv
dEVuZDoldVxuIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQp
OworICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5j
dGlvblJldHVybiAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0
eVJldHVyblN0YXRlbWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghbV9i
dWNrZXRNYXAuY29udGFpbnMobG9jYXRpb24tPm1fc291cmNlSUQpKSB7Ci0gICAgICAgIFZlY3Rv
cjxUeXBlTG9jYXRpb24qPiBidWNrZXQ7Ci0gICAgICAgIG1fYnVja2V0TWFwLnNldChsb2NhdGlv
bi0+bV9zb3VyY2VJRCwgYnVja2V0KTsKLSAgICB9CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZ2xv
YmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50KSAgCisgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+JiBidWNrZXQgPSBtX2J1Y2tl
dE1hcC5maW5kKGxvY2F0aW9uLT5tX3NvdXJjZUlEKS0+dmFsdWU7Ci0gICAgYnVja2V0LmFwcGVu
ZChsb2NhdGlvbik7CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvck5vcm1hbCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRl
bGl0eVJldHVyblN0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhp
Z2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLVR5cGVMb2NhdGlvbiogSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
OjpmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlEKQorVHlwZUxv
Y2F0aW9uKiBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBk
aXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVz
Y3JpcHRvcikKIHsKKyAgICBpZiAoIW1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmhhc0V4ZWN1
dGVkQXRPZmZzZXQoc291cmNlSUQsIGRpdm90KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
ICAgICBBU1NFUlQobV9idWNrZXRNYXAuY29udGFpbnMoc291cmNlSUQpKTsgCiAKICAgICBWZWN0
b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0TWFwLmZpbmQoc291cmNlSUQpLT52
YWx1ZTsKLSAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IFVJTlRfTUFYOyAvLyBCZWNhdXNlIGFzc2ln
bm1lbnRzIG1heSBiZSBuZXN0ZWQsIG1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSBjbG9zZXN0IGVuY2xv
c2luZyBhc3NpZ25tZW50IHRvIHRoaXMgY2hhcmFjdGVyIG9mZnNldC4KICAgICBUeXBlTG9jYXRp
b24qIGJlc3RNYXRjaCA9IG51bGxwdHI7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSBVSU5UX01B
WDsgLy8gQmVjYXVzZSBhc3NpZ25tZW50cyBtYXkgYmUgbmVzdGVkLCBtYWtlIHN1cmUgd2UgZmlu
ZCB0aGUgY2xvc2VzdCBlbmNsb3NpbmcgYXNzaWdubWVudCB0byB0aGlzIGNoYXJhY3RlciBvZmZz
ZXQuCiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBidWNrZXQuc2l6ZSgpOyBpIDwgc2l6
ZTsgaSsrKSB7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBidWNrZXQuYXQoaSk7
Ci0gICAgICAgIGlmIChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpdm90ICYmIGRpdm90IDw9
IGxvY2F0aW9uLT5tX2Rpdm90RW5kICYmIGxvY2F0aW9uLT5tX2Rpdm90RW5kIC0gbG9jYXRpb24t
Pm1fZGl2b3RTdGFydCA8PSBkaXN0YW5jZSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gJiYgbG9jYXRpb24tPm1f
ZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID09IGRpdm90KQorICAgICAg
ICAgICAgcmV0dXJuIGxvY2F0aW9uOworCisgICAgICAgIGlmIChsb2NhdGlvbi0+bV9kaXZvdFN0
YXJ0IDw9IGRpdm90ICYmIGRpdm90IDw9IGxvY2F0aW9uLT5tX2Rpdm90RW5kICYmIGxvY2F0aW9u
LT5tX2Rpdm90RW5kIC0gbG9jYXRpb24tPm1fZGl2b3RTdGFydCA8PSBkaXN0YW5jZSAmJiBkZXNj
cmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbihkZXNjcmlwdG9yLCBsb2NhdGlvbikpIHsKICAgICAg
ICAgICAgIGRpc3RhbmNlID0gbG9jYXRpb24tPm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZv
dFN0YXJ0OwogICAgICAgICAgICAgYmVzdE1hdGNoID0gbG9jYXRpb247CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICAvLyBGSVhNRTogQmVzdE1hdGNoIHNob3VsZCBuZXZlciBiZSBudWxsLiBUaGlz
IGRvZXNuJ3QgaG9sZCBjdXJyZW50bHkgYmVjYXVzZSB3ZSBpZ25vcmUgc29tZSBFdmFsL1dpdGgv
VmFySW5qZWN0aW9uIHZhcmlhYmxlIGFzc2lnbm1lbnRzLgorICAgIC8vIEZJWE1FOiBCZXN0TWF0
Y2ggc2hvdWxkIG5ldmVyIGJlIG51bGwgcGFzdCB0aGlzIHBvaW50LiBUaGlzIGRvZXNuJ3QgaG9s
ZCBjdXJyZW50bHkgYmVjYXVzZSB3ZSBpZ25vcmUgc29tZSBFdmFsL1dpdGgvVmFySW5qZWN0aW9u
IHZhcmlhYmxlIGFzc2lnbm1lbnRzLgogICAgIHJldHVybiBiZXN0TWF0Y2g7CiB9CiAKK2Jvb2wg
RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOjpoYXNFeGVjdXRlZEF0T2Zmc2V0KGludHB0cl90IGlk
LCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgaWYgKG1fcmFuZ2VNYXAuZmluZChpZCkgPT0gbV9y
YW5nZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmFuZ2VNYXAmIG1h
cCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9
IFVJTlRfTUFYOworICAgIGJvb2wgaGFzRXhlY3V0ZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8g
aXRlciA9IG1hcC5iZWdpbigpLCBlbmQgPSBtYXAuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgY29uc3QgRnVuY3Rpb25SYW5nZSYgcmFuZ2UgPSBpdGVyLT5maXJzdDsKKyAg
ICAgICAgaWYgKHJhbmdlLm1fc3RhcnQgPD0gb2Zmc2V0ICYmIG9mZnNldCA8PSByYW5nZS5tX2Vu
ZCAmJiByYW5nZS5tX2VuZCAtIHJhbmdlLm1fc3RhcnQgPCBkaXN0YW5jZSkgeworICAgICAgICAg
ICAgaGFzRXhlY3V0ZWQgPSBpdGVyLT5zZWNvbmQ7CisgICAgICAgICAgICBkaXN0YW5jZSA9IHJh
bmdlLm1fZW5kIC0gcmFuZ2UubV9zdGFydDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBoYXNFeGVjdXRlZDsKK30KKwordm9pZCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omluc2Vy
dFVuZXhlY3V0ZWRSYW5nZShpbnRwdHJfdCBpZCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVu
ZCkgCit7CisgICAgaWYgKG1fcmFuZ2VNYXAuZmluZChpZCkgPT0gbV9yYW5nZU1hcC5lbmQoKSkg
eworICAgICAgICBSYW5nZU1hcCBtYXA7CisgICAgICAgIG1fcmFuZ2VNYXBbaWRdID0gbWFwOwor
ICAgIH0KKworICAgIFJhbmdlTWFwJiBtYXAgPSBtX3JhbmdlTWFwLmZpbmQoaWQpLT5zZWNvbmQ7
CisgICAgRnVuY3Rpb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0ID0gc3RhcnQ7Cisg
ICAgcmFuZ2UubV9lbmQgPSBlbmQ7CisgICAgLy8gT25seSBpbnNlcnQgdW5leGVjdXRlZCByYW5n
ZXMgb25jZSBmb3IgYSBnaXZlbiBzb3VyY2VJRCBiZWNhdXNlIHdlIG1heSBydW4gaW50byBhIHNp
dHVhdGlvbiB3aGVyZSBhbiBleGVjdXRhYmxlIGV4ZWN1dGVzLCB0aGVuIGlzIEdDZWQsIGFuZCB0
aGVuIGlzIGFsbG9jYXRlZCBhZ2FpbiwKKyAgICAvLyBhbmQgdHJpZXMgdG8gcmVpbnNlcnQgaXRz
ZWxmLCBjbGFpbWluZyBpdCBoYXMgbmV2ZXIgcnVuLCBidXQgdGhpcyBpcyBmYWxzZSBiZWNhdXNl
IGl0IGluZGVlZCBhbHJlYWR5IGV4ZWN1dGVkLgorICAgIGlmIChtYXAuZmluZChyYW5nZSkgPT0g
bWFwLmVuZCgpKQorICAgICAgICBtYXBbcmFuZ2VdID0gZmFsc2U7Cit9CisKK3ZvaWQgRnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlOjpyZW1vdmVVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQsIHVu
c2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCit7CisgICAgLy9SRUxFQVNFX0FTU0VSVChtX3Jh
bmdlTWFwLmNvbnRhaW5zKGlkKSk7CisgICAgaWYgKG1fcmFuZ2VNYXAuZmluZChpZCkgPT0gbV9y
YW5nZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1f
cmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsKKworICAgIEZ1bmN0aW9uUmFuZ2UgcmFuZ2U7Cisg
ICAgcmFuZ2UubV9zdGFydCA9IHN0YXJ0OworICAgIHJhbmdlLm1fZW5kID0gZW5kOworICAgIG1h
cFtyYW5nZV0gPSB0cnVlOworfQorCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyLmgJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyNSArMzMs
NjMgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgIHsg
bmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgVHlwZURlc2NyaXB0aW9uOworfX19CisKIG5hbWVz
cGFjZSBKU0MgewogCiBjbGFzcyBUeXBlTG9jYXRpb247CiAKK2NsYXNzIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSB7CitwdWJsaWM6CisgICAgc3RydWN0IEZ1bmN0aW9uUmFuZ2UgeworICAgICAg
ICBGdW5jdGlvblJhbmdlKCkge30KKyAgICAgICAgdW5zaWduZWQgbV9zdGFydDsKKyAgICAgICAg
dW5zaWduZWQgbV9lbmQ7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGdW5jdGlvblJh
bmdlJiBvdGhlcikgY29uc3QgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0
ID09IG90aGVyLm1fc3RhcnQgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQ7CisgICAgICAgIH0KKyAg
ICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3N0YXJ0ICogbV9lbmQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYm9vbCBoYXNFeGVj
dXRlZEF0T2Zmc2V0KGludHB0cl90IGlkLCB1bnNpZ25lZCBvZmZzZXQpOworICAgIHZvaWQgaW5z
ZXJ0VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kKTsKKyAgICB2b2lkIHJlbW92ZVVuZXhlY3V0ZWRSYW5nZShpbnRwdHJfdCBpZCwgdW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CisKK3ByaXZhdGU6ICAgICAKKyAgICB0eXBlZGVmIHN0
ZDo6dW5vcmRlcmVkX21hcDxGdW5jdGlvblJhbmdlLCBib29sLCBIYXNoTWV0aG9kPEZ1bmN0aW9u
UmFuZ2U+PiBSYW5nZU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnRwdHJf
dCwgUmFuZ2VNYXA+IFNvdXJjZUlEVG9SYW5nZU1hcDsKKyAgICBTb3VyY2VJRFRvUmFuZ2VNYXAg
bV9yYW5nZU1hcDsKK307CisKK2VudW0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciB7Cisg
ICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCA9IDEsCisgICAgVHlwZVByb2Zp
bGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgPSAyLAorICAgIFR5cGVQcm9maWxlclNl
YXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDMKK307CisKIGNsYXNzIEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlciB7CiAKIHB1YmxpYzoKLSAgICBTdHJpbmcgZ2V0VHlwZXNGb3JWYXJpYWJs
ZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBp
bnRwdHJfdCBzb3VyY2VJRCk7Ci0gICAgU3RyaW5nIGdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVB
dE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGludHB0
cl90IHNvdXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZz
ZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJfdCBz
b3VyY2VJRCk7CisgICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24q
KTsKKyAgICB2b2lkIGdldFR5cGVzRm9yVmFyaWFibGVuT2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgZGl2b3QsIGludHB0
cl90IHNvdXJjZUlELCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlw
ZURlc2NyaXB0aW9uPiYpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9u
Kik7CisgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICAKIHByaXZh
dGU6Ci0gICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0
cl90IHNvdXJjZUlEKTsKKyAgICBUeXBlTG9jYXRpb24qIGZpbmRMb2NhdGlvbih1bnNpZ25lZCBk
aXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVz
Y3JpcHRvcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFZlY3RvcjxUeXBlTG9j
YXRpb24qPj4gU291cmNlSURUb0xvY2F0aW9uQnVja2V0TWFwOwogICAgIFNvdXJjZUlEVG9Mb2Nh
dGlvbkJ1Y2tldE1hcCBtX2J1Y2tldE1hcDsKKyAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUg
bV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiB9OwogCisKIH0gLy9uYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MTAxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNzUsNiArMTA3NSwzNiBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1
cmU6OnRvCiAKICAgICAgICAgc2hhcGUtPmFkZFByb3BlcnR5KHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgZm91bmRDdG9yTmFtZSA9IGZh
bHNlOworICAgIEpTT2JqZWN0KiBwcm90byA9IHN0b3JlZFByb3RvdHlwZU9iamVjdCgpOworICAg
IGlmIChwcm90bykgeworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm90by0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc3RvcmVkUHJv
dG90eXBlKCkpOworICAgICAgICBQcm9wZXJ0eU5hbWUgY29uc3RydWN0b3IoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yKTsKKyAgICAgICAgaWYgKHByb3RvLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgY29uc3RydWN0b3IsIHNsb3QpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBpcyBhIGN1c3RvbSBwcm9wZXJ0eSBzbG90PworICAgICAgICAgICAgaWYgKHNsb3QuaXNWYWx1
ZSgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZhbHVlID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVj
dG9yVmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpTQ2VsbCogY29u
c3RydWN0b3JDZWxsID0gY29uc3RydWN0b3JWYWx1ZS5hc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBjdG9yT2JqZWN0ID0gY29uc3RydWN0b3JDZWxsLT5n
ZXRPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9u
KiBjb25zdHJ1Y3RvckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oY3Rvck9i
amVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldENvbnN0
cnVjdG9yTmFtZShjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoZXhl
YykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEN0b3JOYW1lID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVybmFsRnVuY3Rp
b24qIGNvbnN0cnVjdG9yRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
PihjdG9yT2JqZWN0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS0+
c2V0Q29uc3RydWN0b3JOYW1lKGNvbnN0cnVjdG9yRnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5
TmFtZShleGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ3Rvck5h
bWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZm91bmRDdG9yTmFtZSkK
KyAgICAgICAgc2hhcGUtPnNldENvbnN0cnVjdG9yTmFtZShjbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KTsKIAogICAgIHNoYXBlLT5tYXJrQXNGaW5hbCgpOwogICAgIHJldHVybiBzaGFwZS5yZWxlYXNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2
aXNpb24gMTcxMDE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUeXBlU2V0LmgiCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTM5LDYgKzQwLDcgQEAgVHlw
ZVNldDo6VHlwZVNldCgpCiAgICAgOiBtX3NlZW5UeXBlcyhUeXBlTm90aGluZykKICAgICAsIG1f
c3RydWN0dXJlSGlzdG9yeShuZXcgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KQogewor
CiB9CiAKIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1
ZSB2KQpAQCAtNzMsNyArNzUsNyBAQCB2b2lkIFR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZShKU1Zh
bHVlIHYsCiAgICAgUnVudGltZVR5cGUgdCA9IGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUodik7CiAg
ICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHQ7CiAKLSAgICBpZiAoaWQgJiYgc2hhcGUp
IHsKKyAgICBpZiAoaWQgJiYgc2hhcGUgJiYgIXYuaXNTdHJpbmcoKSAmJiAhdi5pc0Z1bmN0aW9u
KCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlSURIaXN0b3J5LmlzVmFsaWRLZXkoaWQp
KTsKICAgICAgICAgYXV0byBpdGVyID0gbV9zdHJ1Y3R1cmVJREhpc3RvcnkuZmluZChpZCk7CiAg
ICAgICAgIGlmIChpdGVyID09IG1fc3RydWN0dXJlSURIaXN0b3J5LmVuZCgpKSB7CkBAIC0xNDAs
MTIgKzE0MiwxMDQgQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAogCiAgICAgaWYgKG1f
c3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpKSB7CiAgICAgICAgIHNlZW4uYXBwZW5kKCJcbkxVQjog
Iik7Ci0gICAgICAgIHNlZW4uYXBwZW5kKFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQo
bV9zdHJ1Y3R1cmVIaXN0b3J5KSk7CisgICAgICAgIHNlZW4uYXBwZW5kKFN0cnVjdHVyZVNoYXBl
OjpsZWFzdFVwcGVyQm91bmRBc1N0cmluZyhtX3N0cnVjdHVyZUhpc3RvcnkpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gc2Vlbi50b1N0cmluZygpOworfQorCitTdHJpbmcgVHlwZVNldDo6ZGlzcGxh
eU5hbWUoKQoreworICAgIFN0cmluZ0J1aWxkZXIgc2VlbjsKKworICAgIGlmIChtX3NlZW5UeXBl
cyAmIFR5cGVGdW5jdGlvbikKKyAgICAgICAgIHNlZW4uYXBwZW5kKCJGdW5jdGlvbiAiKTsKKyAg
ICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlVW5kZWZpbmVkKQorICAgICAgICAgc2Vlbi5hcHBlbmQo
IlVuZGVmaW5lZCAiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkKKyAgICAgICAg
IHNlZW4uYXBwZW5kKCJOdWxsICIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVCb29sZWFu
KQorICAgICAgICAgc2Vlbi5hcHBlbmQoIkJvb2wgIik7CisgICAgaWYgKG1fc2VlblR5cGVzICYg
VHlwZU1hY2hpbmVJbnQpCisgICAgICAgICBzZWVuLmFwcGVuZCgiSW50ICIpOworICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVOdW1iZXIpCisgICAgICAgICBzZWVuLmFwcGVuZCgiTnVtYmVyICIp
OworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVTdHJpbmcpCisgICAgICAgICBzZWVuLmFwcGVu
ZCgiU3RyaW5nICIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVQcmltaXRpdmUpCisgICAg
ICAgICBzZWVuLmFwcGVuZCgiUHJpbWl0aXZlICIpOworCisgICAgYm9vbCBoYXNBcHBlbmVkZWRP
bmVDb25zdHJ1Y3RvciA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1
Y3R1cmVIaXN0b3J5LT5zaXplKCk7IGkrKykgeworICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hh
cGU+IHNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKTsKKyAgICAgICAgaWYgKCFzaGFw
ZS0+bV9jb25zdHJ1Y3Rvck5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAoc2hhcGUt
Pm1fY29uc3RydWN0b3JOYW1lICE9ICJGdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICBzZWVu
LmFwcGVuZChzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOworICAgICAgICAgICAgICAgIHNlZW4u
YXBwZW5kKCIgIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYXNBcHBlbmVkZWRPbmVD
b25zdHJ1Y3RvciA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWhhc0FwcGVu
ZWRlZE9uZUNvbnN0cnVjdG9yICYmIG1fc2VlblR5cGVzICYgVHlwZU9iamVjdCkKKyAgICAgICAg
IHNlZW4uYXBwZW5kKCJPYmplY3QgIik7CisKICAgICByZXR1cm4gc2Vlbi50b1N0cmluZygpOwog
fQogCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5
cGVTZXQ6OmFsbFR5cGVOYW1lcygpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+OjpjcmVhdGUoKTsKKworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVGdW5jdGlvbikK
KyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkZ1bmN0aW9uIik7CisgICAgaWYgKG1fc2VlblR5cGVz
ICYgVHlwZVVuZGVmaW5lZCkKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIlVuZGVmaW5lZCIpOwor
ICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdWxsKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgi
TnVsbCIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVCb29sZWFuKQorICAgICAgICAgc2Vl
bi0+YWRkSXRlbSgiQm9vbCIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVNYWNoaW5lSW50
KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiSW50Iik7CisgICAgaWYgKG1fc2VlblR5cGVzICYg
VHlwZU51bWJlcikKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIk51bWJlciIpOworICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVTdHJpbmcpCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJTdHJpbmci
KTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlUHJpbWl0aXZlKQorICAgICAgICAgc2Vlbi0+
YWRkSXRlbSgiUHJpbWl0aXZlIik7CisKKyAgICBib29sIGhhc0FwcGVuZWRlZE9uZUNvbnN0cnVj
dG9yID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rv
cnktPnNpemUoKTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUg
PSBtX3N0cnVjdHVyZUhpc3RvcnktPmF0KGkpOworICAgICAgICBpZiAoIXNoYXBlLT5tX2NvbnN0
cnVjdG9yTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChzaGFwZS0+bV9jb25zdHJ1
Y3Rvck5hbWUgIT0gIkZ1bmN0aW9uIikKKyAgICAgICAgICAgICAgICBzZWVuLT5hZGRJdGVtKHNo
YXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgICAgICAgICBoYXNBcHBlbmVkZWRPbmVDb25z
dHJ1Y3RvciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWhhc0FwcGVuZWRl
ZE9uZUNvbnN0cnVjdG9yICYmIG1fc2VlblR5cGVzICYgVHlwZU9iamVjdCkKKyAgICAgICAgIHNl
ZW4tPmFkZEl0ZW0oIk9iamVjdCIpOworCisgICAgcmV0dXJuIHNlZW4ucmVsZWFzZSgpOworfQor
CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRh
dGlvbnMoKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+Pj4gcmV0ID0gSW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj46OmNy
ZWF0ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3Rvcnkt
PnNpemUoKTsgaSsrKQorICAgICAgICByZXQtPmFkZEl0ZW0obV9zdHJ1Y3R1cmVIaXN0b3J5LT5h
dChpKS0+aW5zcGVjdG9yUmVwcmVzZW50YXRpb24oKSk7CisKKyAgICByZXR1cm4gcmV0LnJlbGVh
c2UoKTsKK30KKworCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+IFR5cGVTZXQ6OmxlYXN0VXBwZXJCb3VuZCgpCit7CisgICAgcmV0dXJuIFN0cnVjdHVy
ZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQobV9zdHJ1Y3R1cmVIaXN0b3J5KTsKK30KKwogdm9pZCBU
eXBlU2V0OjpkdW1wU2VlblR5cGVzKCkKIHsKICAgICBkYXRhTG9nKHNlZW5UeXBlcygpLCAiXG4i
KTsKQEAgLTE4Nyw3ICsyODEsMzEgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhh
c2goKSAKICAgICByZXR1cm4gKm1fcHJvcGVydHlIYXNoOwogfQogCi1TdHJpbmcgU3RydWN0dXJl
U2hhcGU6OmxlYXN0VXBwZXJCb3VuZChWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIHNo
YXBlcykKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
U3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZChWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNo
YXBlPj4qIHNoYXBlcykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8U3RyaW5nPj4gbHViID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6
Y3JlYXRlKCk7CisKKyAgICBpZiAoIXNoYXBlcy0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gbHVi
LnJlbGVhc2UoKTsKKworICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gb3JpZ2luID0gc2hhcGVz
LT5hdCgwKTsKKyAgICBmb3IgKGF1dG8gaXRlciA9IG9yaWdpbi0+bV9maWVsZHMuYmVnaW4oKSwg
ZW5kID0gb3JpZ2luLT5tX2ZpZWxkcy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBib29sIHNob3VsZEFkZCA9IHRydWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxLCBz
aXplID0gc2hhcGVzLT5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIC8vIElm
IGFsbCBvdGhlciBTaGFwZXMgaGF2ZSB0aGUgc2FtZSBmaWVsZCBhcyBvcmlnaW4sIGFkZCBpdCB0
byB0aGUgbGVhc3QgdXBwZXIgYm91bmQuCisgICAgICAgICAgICBpZiAoIXNoYXBlcy0+YXQoaSkt
Pm1fZmllbGRzLmNvbnRhaW5zKGl0ZXItPmtleSkpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRB
ZGQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoc2hvdWxkQWRkKQorICAgICAgICAgICAgbHViLT5hZGRJdGVtKFN0
cmluZyhpdGVyLT5rZXkuZ2V0KCkpKTsgCisgICAgfQorCisgICAgcmV0dXJuIGx1Yi5yZWxlYXNl
KCk7Cit9CisKK1N0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmco
VmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBzaGFwZXMpCiB7CiAgICAgaWYgKCFzaGFw
ZXMtPnNpemUoKSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMjM0LDQgKzM1MiwxMyBAQCBTdHJp
bmcgU3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0CiAgICAgcmV0dXJuIHJlcHJlc2Vu
dGF0aW9uLnRvU3RyaW5nKCk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9u
KCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4g
cmV0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7Cisg
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBtX2ZpZWxkcy5lbmQo
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgcmV0LT5hZGRJdGVtKGl0ZXItPmtleS5n
ZXQoKSk7CisKKyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKK30KKwogfSAvL25hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9u
IDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyBu
YW1lc3BhY2UgVHlwZUJ1aWxkZXIgIHsgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXJy
YXk7Cit9fQorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNWYWx1ZTsKQEAgLTU5LDkgKzY0
LDEyIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcHJvcGVydHlIYXNoKCk7CiAgICAgdm9pZCBtYXJr
QXNGaW5hbCgpOwogICAgIHZvaWQgYWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGxlYXN0VXBwZXJCb3VuZChWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNo
YXBlPj4qKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxTdHJpbmc+PiBsZWFzdFVwcGVyQm91bmQoVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4+Kik7CisgICAgc3RhdGljIFN0cmluZyBsZWFzdFVwcGVyQm91bmRBc1N0cmluZyhWZWN0b3I8
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIHNoYXBlcyk7CiAgICAgU3RyaW5nIHN0cmluZ1JlcHJl
c2VudGF0aW9uKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxTdHJpbmc+PiBpbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpOwogICAgIHZvaWQgc2V0Q29uc3Ry
dWN0b3JOYW1lKFN0cmluZyBuYW1lKSB7IG1fY29uc3RydWN0b3JOYW1lID0gbmFtZTsgfQorICAg
IFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUoKSB7IHJldHVybiBtX2NvbnN0cnVjdG9yTmFtZTsgfQog
CiBwcml2YXRlOgogICAgIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBib29sPiBtX2ZpZWxk
czsgICAgICAgICAKQEAgLTc4LDYgKzg2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZFR5cGVG
b3JWYWx1ZShKU1ZhbHVlIHYsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJ
RCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1
ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNlZW5UeXBlcygpOworICAgIFN0cmlu
ZyBkaXNwbGF5TmFtZSgpOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nPj4gYWxsVHlwZU5hbWVzKCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6
OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBsZWFzdFVwcGVyQm91bmQoKTsKKyAgICBQYXNz
UmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKTsKIAogcHJp
dmF0ZToKICAgICB1aW50MzJfdCBtX3NlZW5UeXBlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI2LDQzICs5MjYsMTYgQEAgdm9p
ZCBWTTo6c2V0RW5hYmxlZFByb2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAotU3RyaW5n
IFZNOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBjb25zdCBT
dHJpbmcmIHZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nKQotewot
ICAgIGlmICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgcmV0
dXJuICIoTm90IFByb2ZpbGluZykiOwotCi0gICAgYm9vbCBva2F5OwotICAgIGludHB0cl90IHNv
dXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0cmljdCgmb2theSk7Ci0gICAgaWYg
KCFva2F5KQotICAgICAgICBDUkFTSCgpOwotCi0gICAgdXBkYXRlSGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVTdGF0ZSgpOwotICAgIHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci0+Z2V0
VHlwZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQob2Zmc2V0LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlE
KTsKLX0KLQotdm9pZCBWTTo6dXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpCi17
Ci0gICAgaWYgKCFpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBoaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhm
YWxzZSwgIlZNIFVwZGF0ZSIpOwotfQotCiB2b2lkIFZNOjpkdW1wSGlnaEZpZGVsaXR5UHJvZmls
aW5nVHlwZXMoKQogewogICAgIGlmICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHko
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVT
dGF0ZSgpOworICAgIGhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJW
TSBEdW1wIFR5cGVzIik7CiAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBwcm9maWxlciA9
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOwogICAgIGZvciAoQmFnPFR5cGVMb2Nh
dGlvbj46Oml0ZXJhdG9yIGl0ZXIgPSBtX2xvY2F0aW9uSW5mby5iZWdpbigpOyAhIWl0ZXI7ICsr
aXRlcikgewogICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gKml0ZXI7Ci0gICAgICAg
IGRhdGFMb2dGKCJbU3RhcnQsIEVuZF06OlsldSwgJXVdICIsIGxvY2F0aW9uLT5tX2Rpdm90U3Rh
cnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKLSAgICAgICAgZGF0YUxvZygiXG5cdFx0I0xvY2Fs
I1xuXHRcdCIsCi0gICAgICAgICAgICAgICAgcHJvZmlsZXItPmdldExvY2FsVHlwZXNGb3JWYXJp
YWJsZUF0T2Zmc2V0KGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsICIiLCBsb2NhdGlvbi0+bV9zb3Vy
Y2VJRCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksCi0gICAgICAgICAgICAgICAgIlxuXHRcdCNH
bG9iYWwjXG5cdFx0IiwKLSAgICAgICAgICAgICAgICBwcm9maWxlci0+Z2V0R2xvYmFsVHlwZXNG
b3JWYXJpYWJsZUF0T2Zmc2V0KGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsICIiLCBsb2NhdGlvbi0+
bV9zb3VyY2VJRCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksCi0gICAgICAgICAgICAgICAgIlxu
Iik7CisgICAgICAgIHByb2ZpbGVyLT5sb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihsb2NhdGlvbik7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE3MTAxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUxNSwxMCArNTE1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ1aWx0
aW5FeGVjdXRhYmxlcyogYnVpbHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWlsdGluRXhl
Y3V0YWJsZXMuZ2V0KCk7IH0KIAogICAgICAgICBib29sIGlzUHJvZmlsaW5nVHlwZXNXaXRoSGln
aEZpZGVsaXR5KCkgeyByZXR1cm4gISFtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjsgfQotICAg
ICAgICBTdHJpbmcgZ2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBj
b25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAgICAg
ICAgIEhpZ2hGaWRlbGl0eUxvZyogaGlnaEZpZGVsaXR5TG9nKCkgeyByZXR1cm4gbV9oaWdoRmlk
ZWxpdHlMb2cuZ2V0KCk7IH0KICAgICAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBoaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIoKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
ci5nZXQoKTsgfQotICAgICAgICB2b2lkIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3Rh
dGUoKTsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBuZXh0TG9jYXRpb24oKSB7IHJldHVybiBtX2xv
Y2F0aW9uSW5mby5hZGQoKTsgfSAvL1RPRE86IHBvc3NpYmxlIG9wdG1pemF0aW9uOiB3aGVuIGNv
ZGVibG9ja3MgZGllLCByZXBvcnQgd2hpY2ggbG9jYXRpb25zIGFyZSBubyBsb25nZXIgYmVpbmcg
Y2hhbmdlZCBzbyB3ZSBkb24ndCB3YWxrIG92ZXIgdGhlbQogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpOwogICAgICAgICBpbnQ2
NF90IGdldE5leHRVbmlxdWVWYXJpYWJsZUlEKCkgeyByZXR1cm4gbV9uZXh0VW5pcXVlVmFyaWFi
bGVJRCsrOyB9CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MTAxNikK
KysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNTAgQEAKKzIwMTQtMDctMDMgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+
CisKKyAgICAgICAgTmVlZCBhIHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5l
ZWQgdGhlIGJ1ZyBVUkwgKE9PUFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJy
b3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5wcm90b3R5cGUuX3Byb2Nlc3NOZXdIb3ZlcmVkVG9r
ZW4pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvZXNwcmltYS5qczogQWRkZWQu
CisgICAgICAgICguKToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJv
dG90eXBlLmFubm90YXRlQVNULnByZXR0eSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZS5wcm90b3R5cGUuYW5ub3RhdGVBU1QpOgorICAgICAgICAoLmZpbmlzaCk6CisgICAgICAg
ICguZm9yRWFjaCk6CisgICAgICAgIChnYXRoZXJUeXBlcyk6CisgICAgICAgICguZGlzcGxheVR5
cGUpOgorICAgICAgICAoLnRyaW1UcmFpbGluZ0NoYXIpOgorICAgICAgICAoLnRyaW1UcmFpbGlu
Z0NvbW1hKToKKyAgICAgICAgKC50cmltVHJhaWxpbmdOZXdsaW5lKToKKyAgICAgICAgKHByZXR0
eVByaW50ZXIpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVBU1Qu
anM6IEFkZGVkLgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QucHJvdG90eXBlLmZvckVhY2hOb2RlKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULnByb3RvdHlwZS5fY3JlYXRlSW50ZXJu
YWxBU1QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QucHJvdG90eXBlLl9y
ZWN1cnNlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULnByb3RvdHlwZS4p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QucHJvdG90eXBlLl9yZWN1cnNl
QXJyYXkpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU291cmNlQ29kZVRleHRFZGl0
b3IuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlLl91cGRhdGVUb2tlblRyYWNraW5nQ29udHJvbGxlclN0YXRlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUudG9rZW5UcmFja2luZ0NvbnRy
b2xsZXJOZXdIaWdobGlnaHRDYW5kaWRhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGln
aHRlZEphdmFTY3JpcHRFeHByZXNzaW9uLmRhdGEuZ2V0IGRlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tp
bmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbi5fZGlzcGxheSk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tl
blRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4cHJlc3Npb24uaGFuZGxl
cik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBl
Ll90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4cHJlc3Npb24u
cG9wdWxhdGUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZS5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHBy
ZXNzaW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3R5cGUuX3Nob3dQb3BvdmVyRm9yT2JqZWN0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1Zp
ZXdzL1RleHRFZGl0b3IuanM6CisgICAgICAgICgubW91c2VVcFRlc3QuKToKKyAgICAgICAgKC5t
b3VzZVVwVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVkaXRvcik6CisKKzIwMTQt
MDctMDEgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTmVlZCBh
IHNob3J0IGRlc2NyaXB0aW9uIChPT1BTISkuCisgICAgICAgIE5lZWQgdGhlIGJ1ZyBVUkwgKE9P
UFMhKS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29u
dHJvbGxlci5wcm90b3R5cGUuX3Byb2Nlc3NOZXdIb3ZlcmVkVG9rZW4pOgorICAgICAgICAqIFVz
ZXJJbnRlcmZhY2UvRXh0ZXJuYWwvZXNwcmltYS5qczogQWRkZWQuCisgICAgICAgICguKToKKyAg
ICAgICAgKiBVc2VySW50ZXJmYWNlL01haW4uaHRtbDoKKyAgICAgICAgKiBVc2VySW50ZXJmYWNl
L01vZGVscy9Tb3VyY2VDb2RlLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuU291cmNlQ29kZS5wcm90b3R5cGUucmFuZ2VGb3JDaGFyYWN0ZXJPZmZz
ZXQpOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvTW9kZWxzL1NvdXJjZUNvZGVSYW5nZVRyZWUu
anM6IEFkZGVkLgorICAgICAgICAoLik6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9T
b3VyY2VDb2RlVGV4dEVkaXRvci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
VGV4dEVkaXRvci5wcm90b3R5cGUuX3VwZGF0ZVRva2VuVHJhY2tpbmdDb250cm9sbGVyU3RhdGUp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS50
b2tlblRyYWNraW5nQ29udHJvbGxlck5ld0hpZ2hsaWdodENhbmRpZGF0ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRyYWNraW5n
Q29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4cHJlc3Npb24uZGF0YS5nZXQgZGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZS5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNz
aW9uLl9kaXNwbGF5KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0
RXhwcmVzc2lvbi5oYW5kbGVyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4
dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZh
U2NyaXB0RXhwcmVzc2lvbi5wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
Q29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdo
dGVkSmF2YVNjcmlwdEV4cHJlc3Npb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNv
ZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fc2hvd1BvcG92ZXJGb3JPYmplY3QpOgorICAgICAgICAq
IFVzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qczoKKyAgICAgICAgKC5tb3VzZVVwVGVz
dC4pOgorICAgICAgICAoLm1vdXNlVXBUZXN0KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5UZXh0
RWRpdG9yKToKKworMjAxNC0wNi0zMCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4K
KworICAgICAgICBOZWVkIGEgc2hvcnQgZGVzY3JpcHRpb24gKE9PUFMhKS4KKyAgICAgICAgTmVl
ZCB0aGUgYnVnIFVSTCAoT09QUyEpLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ29kZU1pcnJv
clRva2VuVHJhY2tpbmdDb250cm9sbGVyLnByb3RvdHlwZS5fcHJvY2Vzc05ld0hvdmVyZWRUb2tl
bik6CisgICAgICAgICogVXNlckludGVyZmFjZS9NYWluLmh0bWw6CisgICAgICAgICogVXNlcklu
dGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS4pOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGUucHJvdG90eXBlLnJhbmdlRm9yQ2hhcmFj
dGVyT2Zmc2V0KToKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0
RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnBy
b3RvdHlwZS5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRyb2xsZXJTdGF0ZSk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyTmV3SGlnaGxpZ2h0Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5T
b3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGln
aGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbi5kYXRhLmdldCBkZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl90b2tlblRy
YWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4cHJlc3Npb24uX2Rpc3BsYXkp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5f
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNzaW9uLmhh
bmRsZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3Rv
dHlwZS5fdG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNz
aW9uLnBvcHVsYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRv
ci5wcm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0
RXhwcmVzc2lvbik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlLl9zaG93UG9wb3ZlckZvck9iamVjdCk6CisgICAgICAgICogVXNlckludGVyZmFj
ZS9WaWV3cy9UZXh0RWRpdG9yLmpzOgorICAgICAgICAoLm1vdXNlVXBUZXN0Lik6CisgICAgICAg
ICgubW91c2VVcFRlc3QpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgorCisy
MDE0LTA2LTI0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE5l
ZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJM
IChPT1BTISkuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29u
dHJvbGxlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIucHJvdG90eXBlLl9wcm9jZXNzTmV3SG92ZXJlZFRva2VuKToKKyAgICAgICAg
KiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlVG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IucHJvdG90eXBlLnRva2VuVHJhY2tpbmdDb250cm9sbGVyTmV3SGlnaGxpZ2h0
Q2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5w
cm90b3R5cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhw
cmVzc2lvbi5kaXNwbGF5Ll9kaXNwbGF5LmJpbmQuZGF0YS5nZXQgZGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdG9rZW5U
cmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNzaW9uLmVsc2UuZGF0
YS5XZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkLl9kaXNwbGF5KToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rva2VuVHJh
Y2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbi4pOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdG9rZW5UcmFj
a2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNzaW9uLnBvcHVsYXRlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rv
a2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbik6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90eXBlLl9zaG93
UG9wb3ZlckZvck9iamVjdCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRp
dG9yLmpzOgorICAgICAgICAoLm1vdXNlVXBUZXN0Lik6CisgICAgICAgICgubW91c2VVcFRlc3Qp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOgorCisyMDE0LTA2LTIzICBTYWFt
IEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE5lZWQgYSBzaG9ydCBkZXNj
cmlwdGlvbiAoT09QUyEpLgorICAgICAgICBOZWVkIHRoZSBidWcgVVJMIChPT1BTISkuCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJm
YWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdHlwZS5fdXBkYXRlVG9rZW5UcmFja2luZ0NvbnRy
b2xsZXJTdGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlLnRva2VuVHJhY2tpbmdDb250cm9sbGVyTmV3SGlnaGxpZ2h0Q2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5cGUuX3Rv
a2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lvbi5fZGlz
cGxheSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IucHJvdG90
eXBlLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4cHJlc3Np
b24uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3R5
cGUuX3Rva2VuVHJhY2tpbmdDb250cm9sbGVySGlnaGxpZ2h0ZWRKYXZhU2NyaXB0RXhwcmVzc2lv
bi5wb3B1bGF0ZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90eXBlLl90b2tlblRyYWNraW5nQ29udHJvbGxlckhpZ2hsaWdodGVkSmF2YVNjcmlwdEV4
cHJlc3Npb24pOgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvVGV4dEVkaXRvci5qczoK
KyAgICAgICAgKC5tb3VzZVVwVGVzdC50b2tlbi5yZXR1cm4udG9rZW4udG9rZW5JbmZvLnRva2Vu
KToKKyAgICAgICAgKC5tb3VzZVVwVGVzdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuVGV4dEVk
aXRvcik6CisKIDIwMTQtMDUtMDggIEpvbm8gV2VsbHMgIDxqb25vd2VsbHNAYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENvbnNvbGUgZXJyb3Igd2hlbiBsYXVuY2hpbmcgV2Vi
IEluc3BlY3RvciAiTW9kZSBodG1sbWl4ZWQgZmFpbGVkIHRvIGFkdmFuY2Ugc3RyZWFtIgpJbmRl
eDogU291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMvUHJldHR5UHJpbnRp
bmcvRm9ybWF0dGVyLmpzCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0y
MywxMiArMjMsMTIgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci1mdW5jdGlvbiBGb3JtYXR0ZXIoY29kZU1pcnJvciwgYnVpbGRlcikKK2Z1bmN0aW9uIEZvcm1h
dHRlcihzY3JpcHQsIGJ1aWxkZXIpCiB7Ci0gICAgY29uc29sZS5hc3NlcnQoY29kZU1pcnJvcik7
CisgICAgY29uc29sZS5hc3NlcnQoc2NyaXB0KTsKICAgICBjb25zb2xlLmFzc2VydChidWlsZGVy
KTsKIAotICAgIHRoaXMuX2NvZGVNaXJyb3IgPSBjb2RlTWlycm9yOworICAgIHRoaXMuX3Njcmlw
dCA9IHNjcmlwdDsKICAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKIAogICAgIHRoaXMuX2xh
c3RUb2tlbiA9IG51bGw7CkBAIC00Myw0MCArNDMsNDcgQEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9
IHsKICAgICBmb3JtYXQ6IGZ1bmN0aW9uKGZyb20sIHRvKQogICAgIHsKICAgICAgICAgY29uc29s
ZS5hc3NlcnQodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgPT09IG51bGwpOwotICAgICAg
ICBpZiAodGhpcy5fYnVpbGRlci5vcmlnaW5hbENvbnRlbnQgIT09IG51bGwpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgdmFyIG91dGVyTW9kZSA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0
TW9kZSgpOwotICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX2NvZGVNaXJyb3IuZ2V0UmFuZ2Uo
ZnJvbSwgdG8pOwotICAgICAgICB2YXIgc3RhdGUgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShvdXRl
ck1vZGUsIHRoaXMuX2NvZGVNaXJyb3IuZ2V0VG9rZW5BdChmcm9tKS5zdGF0ZSk7Ci0gICAgICAg
IHRoaXMuX2J1aWxkZXIuc2V0T3JpZ2luYWxDb250ZW50KGNvbnRlbnQpOwotCi0gICAgICAgIHZh
ciBsaW5lT2Zmc2V0ID0gMDsKLSAgICAgICAgdmFyIGxpbmVzID0gY29udGVudC5zcGxpdCgiXG4i
KTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7ICsraSkgewotICAg
ICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsKLSAgICAgICAgICAgIHZhciBzdGFydE9mTmV3
TGluZSA9IHRydWU7Ci0gICAgICAgICAgICB2YXIgZmlyc3RUb2tlbk9uTGluZSA9IHRydWU7Ci0g
ICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtKGxpbmUp
OwotICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKLSAgICAgICAgICAgICAgICB2
YXIgaW5uZXJNb2RlID0gQ29kZU1pcnJvci5pbm5lck1vZGUob3V0ZXJNb2RlLCBzdGF0ZSk7Ci0g
ICAgICAgICAgICAgICAgdmFyIHRva2VuID0gb3V0ZXJNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUp
OwotICAgICAgICAgICAgICAgIHZhciBpc1doaXRlU3BhY2UgPSB0b2tlbiA9PT0gbnVsbCAmJiAv
XlxzKiQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgdGhpcy5faGFu
ZGxlVG9rZW4oaW5uZXJNb2RlLm1vZGUsIHRva2VuLCBzdGF0ZSwgc3RyZWFtLCBsaW5lT2Zmc2V0
ICsgc3RyZWFtLnN0YXJ0LCBpc1doaXRlU3BhY2UsIHN0YXJ0T2ZOZXdMaW5lLCBmaXJzdFRva2Vu
T25MaW5lKTsKLSAgICAgICAgICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwotICAg
ICAgICAgICAgICAgIHN0YXJ0T2ZOZXdMaW5lID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgaWYg
KGZpcnN0VG9rZW5PbkxpbmUgJiYgIWlzV2hpdGVTcGFjZSkKLSAgICAgICAgICAgICAgICAgICAg
Zmlyc3RUb2tlbk9uTGluZSA9IGZhbHNlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAoZmlyc3RUb2tlbk9uTGluZSkKLSAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVFbXB0eUxp
bmUoKTsKLQotICAgICAgICAgICAgbGluZU9mZnNldCArPSBsaW5lLmxlbmd0aCArIDE7IC8vICsx
IGZvciB0aGUgIlxuIiByZW1vdmVkIGluIHNwbGl0LgotICAgICAgICAgICAgdGhpcy5faGFuZGxl
TGluZUVuZGluZyhsaW5lT2Zmc2V0IC0gMSk7IC8vIC0xIGZvciB0aGUgaW5kZXggb2YgdGhlICJc
biIuCi0gICAgICAgIH0KLQorICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zY3JpcHQuX3Nv
dXJjZUNvZGVBU1QpOworICAgICAgICBjb25zb2xlLmFzc2VydCh0aGlzLl9zY3JpcHQuX3NvdXJj
ZUNvZGVBU1QuX2FzdCk7CisgICAgICAgIHZhciBwcmV0dHlQcmludGVyID0gbWFrZVByZXR0eVBy
aW50ZXIodGhpcy5fYnVpbGRlcik7CisgICAgICAgIHByZXR0eVByaW50ZXIodGhpcy5fc2NyaXB0
Ll9zb3VyY2VDb2RlQVNULl9hc3QpOwogICAgICAgICB0aGlzLl9idWlsZGVyLmZpbmlzaCgpOwor
ICAgICAgICAKKyAgICAgICAgLy9jb25zb2xlLmFzc2VydCh0aGlzLl9idWlsZGVyLm9yaWdpbmFs
Q29udGVudCA9PT0gbnVsbCk7CisgICAgICAgIC8vaWYgKHRoaXMuX2J1aWxkZXIub3JpZ2luYWxD
b250ZW50ICE9PSBudWxsKQorICAgICAgICAvLyAgICByZXR1cm47CisKKyAgICAgICAgLy92YXIg
b3V0ZXJNb2RlID0gdGhpcy5fY29kZU1pcnJvci5nZXRNb2RlKCk7CisgICAgICAgIC8vdmFyIGNv
bnRlbnQgPSB0aGlzLl9jb2RlTWlycm9yLmdldFJhbmdlKGZyb20sIHRvKTsKKyAgICAgICAgLy92
YXIgc3RhdGUgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShvdXRlck1vZGUsIHRoaXMuX2NvZGVNaXJy
b3IuZ2V0VG9rZW5BdChmcm9tKS5zdGF0ZSk7CisgICAgICAgIC8vdGhpcy5fYnVpbGRlci5zZXRP
cmlnaW5hbENvbnRlbnQoY29udGVudCk7CisKKyAgICAgICAgLy92YXIgbGluZU9mZnNldCA9IDA7
CisgICAgICAgIC8vdmFyIGxpbmVzID0gY29udGVudC5zcGxpdCgiXG4iKTsKKyAgICAgICAgLy9m
b3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIC8vICAgIHZh
ciBsaW5lID0gbGluZXNbaV07CisgICAgICAgIC8vICAgIHZhciBzdGFydE9mTmV3TGluZSA9IHRy
dWU7CisgICAgICAgIC8vICAgIHZhciBmaXJzdFRva2VuT25MaW5lID0gdHJ1ZTsKKyAgICAgICAg
Ly8gICAgdmFyIHN0cmVhbSA9IG5ldyBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbShsaW5lKTsKKyAg
ICAgICAgLy8gICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKKyAgICAgICAgLy8gICAgICAgIHZh
ciBpbm5lck1vZGUgPSBDb2RlTWlycm9yLmlubmVyTW9kZShvdXRlck1vZGUsIHN0YXRlKTsKKyAg
ICAgICAgLy8gICAgICAgIHZhciB0b2tlbiA9IG91dGVyTW9kZS50b2tlbihzdHJlYW0sIHN0YXRl
KTsKKyAgICAgICAgLy8gICAgICAgIHZhciBpc1doaXRlU3BhY2UgPSB0b2tlbiA9PT0gbnVsbCAm
JiAvXlxzKiQvLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSk7CisgICAgICAgIC8vICAgICAgICB0aGlz
Ll9oYW5kbGVUb2tlbihpbm5lck1vZGUubW9kZSwgdG9rZW4sIHN0YXRlLCBzdHJlYW0sIGxpbmVP
ZmZzZXQgKyBzdHJlYW0uc3RhcnQsIGlzV2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0
VG9rZW5PbkxpbmUpOworICAgICAgICAvLyAgICAgICAgc3RyZWFtLnN0YXJ0ID0gc3RyZWFtLnBv
czsKKyAgICAgICAgLy8gICAgICAgIHN0YXJ0T2ZOZXdMaW5lID0gZmFsc2U7CisgICAgICAgIC8v
ICAgICAgICBpZiAoZmlyc3RUb2tlbk9uTGluZSAmJiAhaXNXaGl0ZVNwYWNlKQorICAgICAgICAv
LyAgICAgICAgICAgIGZpcnN0VG9rZW5PbkxpbmUgPSBmYWxzZTsKKyAgICAgICAgLy8gICAgfQor
CisgICAgICAgIC8vICAgIGlmIChmaXJzdFRva2VuT25MaW5lKQorICAgICAgICAvLyAgICAgICAg
dGhpcy5faGFuZGxlRW1wdHlMaW5lKCk7CisKKyAgICAgICAgLy8gICAgbGluZU9mZnNldCArPSBs
aW5lLmxlbmd0aCArIDE7IC8vICsxIGZvciB0aGUgIlxuIiByZW1vdmVkIGluIHNwbGl0LgorICAg
ICAgICAvLyAgICB0aGlzLl9oYW5kbGVMaW5lRW5kaW5nKGxpbmVPZmZzZXQgLSAxKTsgLy8gLTEg
Zm9yIHRoZSBpbmRleCBvZiB0aGUgIlxuIi4KKyAgICAgICAgLy99CisKKyAgICAgICAgLy90aGlz
Ll9idWlsZGVyLmZpbmlzaCgpOwogICAgIH0sCiAKICAgICAvLyBQcml2YXRlCkBAIC0xNjIsMyAr
MTY5LDMxMSBAQCBGb3JtYXR0ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9idWlsZGVy
LmFkZE9yaWdpbmFsTGluZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbik7CiAgICAgfQog
fTsKKworZnVuY3Rpb24gbWFrZVByZXR0eVByaW50ZXIoYnVpbGRlcikgCit7CisgICAgZnVuY3Rp
b24gZGlzcGxheVR5cGUodHlwZSkgCisgICAgeworICAgICAgICB0eXBlID0gdHJpbVRyYWlsaW5n
Q2hhcih0eXBlLCAiICIpOworICAgICAgICByZXR1cm4gIiA6IDwiICsgdHlwZSArICI+IgorICAg
IH0KKworICAgIGZ1bmN0aW9uIHRyaW1UcmFpbGluZ0NoYXIocywgY2hhcikgCisgICAgeworICAg
ICAgICBpZiAoc1tzLmxlbmd0aCAtIDFdID09PSBjaGFyKQorICAgICAgICAgICAgcmV0dXJuIHMu
c2xpY2UoMCwgLTEpOworCisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHRyaW1UcmFpbGluZ0NvbW1hKHMpCisgICAgeworICAgICAgICByZXR1cm4gdHJpbVRyYWlsaW5n
Q2hhcihzLCAiLCIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRyaW1UcmFpbGluZ05ld2xpbmUo
cykKKyAgICB7CisgICAgICAgIHJldHVybiB0cmltVHJhaWxpbmdDaGFyKHMsICJcbiIpOworICAg
IH0KKworICAgIHZhciBJTkRFTlQgPSAiICAgICI7CisgICAgdmFyIE5PX0lOREVOVCA9IG51bGw7
CisKKyAgICBmdW5jdGlvbiBwcmV0dHlQcmludGVyKG5vZGUsIGluZGVudCwgaWdub3JlSW5kZW50
KQorICAgIHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisg
ICAgICAgIHZhciBUeXBlcyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGU7Cisg
ICAgICAgIHZhciBvdXQgPSAiIjsKKyAgICAgICAgc3dpdGNoKG5vZGUudHlwZSkgeworICAgICAg
ICBjYXNlIFR5cGVzLkFzc2lnbm1lbnRFeHByZXNzaW9uOgorICAgICAgICAgICAgcHJldHR5UHJp
bnRlcihub2RlLmxlZnQpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbihkaXNwbGF5
VHlwZShub2RlLl90eXBlcyksIC0xKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5y
aWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vb3V0ICs9IHByZXR0eVBy
aW50ZXIobm9kZS5sZWZ0LCBpbmRlbnQsIGlnbm9yZUluZGVudCkgKyBkaXNwbGF5VHlwZShub2Rl
Ll90eXBlcykgKyAgIiAiICsgbm9kZS5vcGVyYXRvciArICIgIiArIHByZXR0eVByaW50ZXIobm9k
ZS5yaWdodCwgaW5kZW50LCBpZ25vcmVJbmRlbnQpOworICAgICAgICAgICAgLy9yZXR1cm4gb3V0
OworICAgICAgICBjYXNlIFR5cGVzLkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIG5vZGUu
ZWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbihleHByLCBpZHgpIHsKKyAgICAgICAgICAgICAgICBw
cmV0dHlQcmludGVyKGV4cHIpOyAKKyAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSBub2RlLmVs
ZW1lbnRzLmxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4o
IiwgIiwgLTEpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIC8vbm9kZS5lbGVtZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICAg
IC8vICAgIG91dCArPSBwcmV0dHlQcmludGVyKGV4cHIsIGluZGVudCkgKyAiLCAiOworICAgICAg
ICAgICAgLy99KTsKKyAgICAgICAgICAgIC8vb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihvdXQsICIg
Iik7CisgICAgICAgICAgICAvL291dCA9IHRyaW1UcmFpbGluZ0NvbW1hKG91dCk7CisgICAgICAg
ICAgICAvL3JldHVybiBvdXQ7CisgICAgICAgIGNhc2UgVHlwZXMuQmxvY2tTdGF0ZW1lbnQ6Cisg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCJ7IiwgLTEpOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmROZXdsaW5lKCk7CisgICAgICAgICAgICBub2RlLmJvZHkuZm9yRWFjaChmdW5j
dGlvbihleHByKSB7CisgICAgICAgICAgICAgICAgcHJldHR5UHJpbnRlcihleHByKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigifSIsIC0xKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy9vdXQgKz0gIntcbiI7CisgICAgICAgICAg
ICAvL25vZGUuYm9keS5mb3JFYWNoKGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAgICAgICAgIC8vICAg
IG91dCArPSBwcmV0dHlQcmludGVyKGV4cHIsIGluZGVudCArIElOREVOVCk7CisgICAgICAgICAg
ICAvL30pOworICAgICAgICAgICAgLy9vdXQgKz0gaW5kZW50ICsgIn0iOworICAgICAgICAgICAg
Ly9yZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246CisgICAg
ICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLmxlZnQsIE5PX0lOREVOVCk7CisgICAg
ICAgICAgICBvdXQgKz0gIiAiICsgbm9kZS5vcGVyYXRvciArICIgIjsKKyAgICAgICAgICAgIG91
dCArPSBwcmV0dHlQcmludGVyKG5vZGUucmlnaHQsIE5PX0lOREVOVCk7CisgICAgICAgICAgICBy
ZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVtZW50OgorICAgICAgICAg
ICAgb3V0ICs9IGluZGVudCArICJicmVhayI7CisgICAgICAgICAgICBpZiAobm9kZS5sYWJlbCkK
KyAgICAgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLmxhYmVsLCBOT19JTkRF
TlQpOworICAgICAgICAgICAgb3V0ICs9ICI7IjsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7Cisg
ICAgICAgIGNhc2UgVHlwZXMuQ2F0Y2hDbGF1c2U6CisgICAgICAgICAgICByZXR1cm4gIiI7Cisg
ICAgICAgIGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBvdXQgKz0g
aW5kZW50ICsgImNvbnRpbnVlIjsKKyAgICAgICAgICAgIGlmIChub2RlLmxhYmVsKQorICAgICAg
ICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKG5vZGUubGFiZWwsIE5PX0lOREVOVCk7Cisg
ICAgICAgICAgICBvdXQgKz0gIjsiOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAg
Y2FzZSBUeXBlcy5Eb1doaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgb3V0ICs9ICJkbyAiOwor
ICAgICAgICAgICAgb3V0ICs9IHByZXR0eVByaW50ZXIobm9kZS5ib2R5LCBpbmRlbnQpOworICAg
ICAgICAgICAgb3V0ICs9ICIgd2hpbGUoIiArIHByZXR0eVByaW50ZXIobm9kZS5wcmVkaWNhdGUs
IE5PX0lOREVOVCkgKyAiKSI7CisgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICBjYXNl
IFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAgICAgICAgcmV0dXJuIGluZGVudCArICJk
ZWJ1Z2dlciI7CisgICAgICAgIGNhc2UgVHlwZXMuRW1wdHlTdGF0ZW1lbnQ6CisgICAgICAgICAg
ICByZXR1cm4gIiI7CisgICAgICAgIGNhc2UgVHlwZXMuRXhwcmVzc2lvblN0YXRlbWVudDoKKyAg
ICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5leHByZXNzaW9uKTsKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kVG9rZW4oIjsiLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5l
d2xpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy9yZXR1cm4gaW5kZW50
ICsgcHJldHR5UHJpbnRlcihub2RlLmV4cHJlc3Npb24sIGluZGVudCkgKyAiO1xuIjsKKyAgICAg
ICAgY2FzZSBUeXBlcy5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICBvdXQgKz0gaW5kZW50ICsg
ImZvciAoIjsKKyAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKG5vZGUuaW5pdCwgTk9f
SU5ERU5UKSArICI7ICI7CisgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLnBy
ZWRpY2F0ZSwgTk9fSU5ERU5UKSArICI7ICI7CisgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJp
bnRlcihub2RlLnVwZGF0ZSwgTk9fSU5ERU5UKSArICIpICI7IAorICAgICAgICAgICAgb3V0ICs9
IHByZXR0eVByaW50ZXIobm9kZS5ib2R5LCBpbmRlbnQpOworICAgICAgICAgICAgcmV0dXJuIG91
dDsKKyAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkNhbGw6CisgICAgICAgICAgICBvdXQgKz0g
cHJldHR5UHJpbnRlcihub2RlLmNhbGxlZSwgaW5kZW50KSArICIoIiAKKyAgICAgICAgICAgIG5v
ZGUuYXJndW1lbnRzLmZvckVhY2goZnVuY3Rpb24oYXJnKSB7CisgICAgICAgICAgICAgICAgb3V0
ICs9IHByZXR0eVByaW50ZXIoYXJnLCBpbmRlbnQpICsgIiwgIjsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihvdXQsICIgIik7CisgICAgICAgICAg
ICBvdXQgPSB0cmltVHJhaWxpbmdDb21tYShvdXQpOworICAgICAgICAgICAgb3V0ICs9ICIpIjsK
KyAgICAgICAgICAgIG91dCArPSBkaXNwbGF5VHlwZShub2RlLl90eXBlcyk7CisgICAgICAgICAg
ICByZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLkZvckluU3RhdGVtZW50OgorICAgICAg
ICAgICAgb3V0ICs9ICJmb3IgKCIgKyBwcmV0dHlQcmludGVyKG5vZGUubGVmdCwgTk9fSU5ERU5U
KSArICIgaW4gIiArIHByZXR0eVByaW50ZXIobm9kZS5yaWdodCwgTk9fSU5ERU5UKSArICIpICI7
CisgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLmJvZHksIE5PX0lOREVOVCk7
CisgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVj
bGFyYXRpb246CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAg
ICAgICAgb3V0ICs9ICJmdW5jdGlvbiAiICsgcHJldHR5UHJpbnRlcihub2RlLmlkLCBOT19JTkRF
TlQpICsgIigiOworICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFy
YW0pIHsKKyAgICAgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihwYXJhbSwgTk9fSU5E
RU5UKSArIGRpc3BsYXlUeXBlKHBhcmFtLl90eXBlcykgKyAiLCAiOworICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICBvdXQgPSB0cmltVHJhaWxpbmdDaGFyKG91dCwgIiAiKTsKKyAgICAgICAg
ICAgIG91dCA9IHRyaW1UcmFpbGluZ0NvbW1hKG91dCk7CisgICAgICAgICAgICBvdXQgKz0gIikg
IjsKKyAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKG5vZGUuYm9keSwgaW5kZW50KTsK
KyAgICAgICAgICAgIGlmIChub2RlLnR5cGUgPT09IFR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb24p
IAorICAgICAgICAgICAgICAgIG91dCArPSAiXG4iOworICAgICAgICAgICAgcmV0dXJuIG91dDsK
KyAgICAgICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0dXJuIG5vZGUu
bmFtZTsKKyAgICAgICAgY2FzZSBUeXBlcy5JZlN0YXRlbWVudDoKKyAgICAgICAgICAgIG91dCAr
PSBpbmRlbnQgKyAiaWYgKCI7CisgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2Rl
LnByZWRpY2F0ZSwgTk9fSU5ERU5UKTsKKyAgICAgICAgICAgIG91dCArPSAiKSAiOworICAgICAg
ICAgICAgb3V0ICs9IHByZXR0eVByaW50ZXIobm9kZS5jb25zZXF1ZW50LCBpbmRlbnQpOworICAg
ICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlKSB7CisgICAgICAgICAgICAgICAgb3V0ICs9ICIg
ZWxzZSAiOworICAgICAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKG5vZGUuYWx0ZXJu
YXRlLCBpbmRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0ICs9ICJcbiI7Cisg
ICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLkxpdGVyYWw6CisgICAg
ICAgICAgICByZXR1cm4gbm9kZS5yYXc7CisgICAgICAgIGNhc2UgVHlwZXMuTGFiZWxlZFN0YXRl
bWVudDoKKyAgICAgICAgICAgIG91dCArPSBpbmRlbnQgKyBwcmV0dHlQcmludGVyKG5vZGUubGFi
ZWwsIE5PX0lOREVOVCkgKyAiOiAiOworICAgICAgICAgICAgb3V0ICs9IHByZXR0eVByaW50ZXIo
bm9kZS5ib2R5LCBpbmRlbnQpOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2Fz
ZSBUeXBlcy5Mb2dpY2FsRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmlu
dGVyKG5vZGUubGVmdCwgTk9fSU5ERU5UKSArICIgIiArIG5vZGUub3BlcmF0b3IgKyAiICIgKyBw
cmV0dHlQcmludGVyKG5vZGUucmlnaHQsIE5PX0lOREVOVCk7CisgICAgICAgICAgICByZXR1cm4g
b3V0OworICAgICAgICBjYXNlIFR5cGVzLk1lbWJlckV4cHJlc3Npb246CisgICAgICAgICAgICBv
dXQgKz0gcHJldHR5UHJpbnRlcihub2RlLm9iamVjdCwgaW5kZW50KTsKKyAgICAgICAgICAgIGlm
IChub2RlLnByb3BlcnR5LnR5cGUgPT09IFR5cGVzLkxpdGVyYWwpIHsKKyAgICAgICAgICAgICAg
ICBvdXQgKz0gIlsiICsgcHJldHR5UHJpbnRlcihub2RlLnByb3BlcnR5LCBOT19JTkRFTlQpICsg
Il0iOworICAgICAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgIG91dCArPSAiLiIgKyBw
cmV0dHlQcmludGVyKG5vZGUucHJvcGVydHksIE5PX0lOREVOVCk7CisgICAgICAgICAgICByZXR1
cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICBv
dXQgKz0gIm5ldyAiICsgcHJldHR5UHJpbnRlcihub2RlLmNhbGxlZSwgTk9fSU5ERU5UKSArICIo
IjsKKyAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLmZvckVhY2goZnVuY3Rpb24oYXJnKSB7Cisg
ICAgICAgICAgICAgICAgb3V0ICs9IHByZXR0eVByaW50ZXIoYXJnLCBpbmRlbnQpICsgIiwgIjsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihvdXQs
ICIgIik7CisgICAgICAgICAgICBvdXQgPSB0cmltVHJhaWxpbmdDb21tYShvdXQpOworICAgICAg
ICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2FzZSBUeXBlcy5PYmplY3RFeHByZXNzaW9uOgor
ICAgICAgICAgICAgb3V0ICs9ICJ7IFxuIjsKKyAgICAgICAgICAgIG5vZGUucHJvcGVydGllcy5m
b3JFYWNoKGZ1bmN0aW9uKHByb3ApIHsKKyAgICAgICAgICAgICAgICBvdXQgKz0gaW5kZW50ICsg
SU5ERU5UICsgcHJldHR5UHJpbnRlcihwcm9wLCBpbmRlbnQpICsgIiwiOworICAgICAgICAgICAg
ICAgIGlmIChpbmRlbnQgPT09IE5PX0lOREVOVCkKKyAgICAgICAgICAgICAgICAgICAgb3V0ICs9
ICIgIjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG91dCArPSAi
XG4iOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBpZiAoaW5kZW50ID09PSBOT19JTkRF
TlQpCisgICAgICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihvdXQsICIgIik7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihv
dXQsICJcbiIpOworICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ29tbWEob3V0KTsKKyAg
ICAgICAgICAgIG91dCArPSAiIH0iOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAg
Y2FzZSBUeXBlcy5Qcm9ncmFtOgorICAgICAgICAgICAgbm9kZS5ib2R5LmZvckVhY2goZnVuY3Rp
b24oYm9keSkgeworICAgICAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKGJvZHksIGlu
ZGVudCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAg
IGNhc2UgVHlwZXMuUHJvcGVydHk6CisgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihu
b2RlLmtleSwgTk9fSU5ERU5UKSArICIgOiAiICsgcHJldHR5UHJpbnRlcihub2RlLnZhbHVlLCBp
bmRlbnQpOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2FzZSBUeXBlcy5QcmVm
aXhFeHByZXNzaW9uOgorICAgICAgICAgICAgb3V0ICs9IG5vZGUub3BlcmF0b3I7CisgICAgICAg
ICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLmFyZ3VtZW50LCBOT19JTkRFTlQpOworICAg
ICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVzc2lv
bjoKKyAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKG5vZGUuYXJndW1lbnQsIE5PX0lO
REVOVCk7CisgICAgICAgICAgICBvdXQgKz0gbm9kZS5vcGVyYXRvcjsKKyAgICAgICAgICAgIHJl
dHVybiBvdXQ7CisgICAgICAgIGNhc2UgVHlwZXMuUmV0dXJuU3RhdGVtZW50OgorICAgICAgICAg
ICAgb3V0ICs9IGluZGVudCArICJyZXR1cm4gIiArIHByZXR0eVByaW50ZXIobm9kZS5hcmd1bWVu
dCwgaW5kZW50KSArICI7XG4iOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2Fz
ZSBUeXBlcy5TZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICBvdXQgKz0gIigiOworICAg
ICAgICAgICAgbm9kZS5leHByZXNzaW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGV4cHIpIHsKKyAgICAg
ICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihleHByLCBOT19JTkRFTlQpICsgIiwgIjsK
KyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgb3V0ID0gdHJpbVRyYWlsaW5nQ2hhcihvdXQs
ICIgIik7CisgICAgICAgICAgICBvdXQgPSB0cmltVHJhaWxpbmdDb21tYShvdXQpOworICAgICAg
ICAgICAgb3V0ICs9ICIpIjsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIGNhc2Ug
VHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICAgICAgICAgICAgb3V0ICs9IGluZGVudCArICJzd2l0
Y2ggKCIgKyBwcmV0dHlQcmludGVyKG5vZGUuZGlzY3JpbWluYW50LCBOT19JTkRFTlQpICsgIikg
IiArICJ7XG4iOworICAgICAgICAgICAgbm9kZS5jYXNlcy5mb3JFYWNoKGZ1bmN0aW9uIChhQ2Fz
ZSkgeworICAgICAgICAgICAgICAgIG91dCArPSBwcmV0dHlQcmludGVyKGFDYXNlLCBpbmRlbnQg
KyBJTkRFTlQpICsgIlxuIjsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgb3V0ID0gdHJp
bVRyYWlsaW5nQ2hhcihvdXQsICJcbiIpOworICAgICAgICAgICAgb3V0ICs9IGluZGVudCArICJ9
XG4iOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2FzZSBUeXBlcy5Td2l0Y2hD
YXNlOgorICAgICAgICAgICAgb3V0ICs9IGluZGVudDsKKyAgICAgICAgICAgIGlmIChub2RlLnBy
ZWRpY2F0ZSkKKyAgICAgICAgICAgICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihub2RlLnByZWRp
Y2F0ZSwgTk9fSU5ERU5UKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvdXQg
Kz0gImRlZmF1bHQiOworICAgICAgICAgICAgb3V0ICs9ICI6XG4iOworICAgICAgICAgICAgbm9k
ZS5jb25zZXF1ZW50LmZvckVhY2goZnVuY3Rpb24gKGNvbnNlcXVlbnQpIHsKKyAgICAgICAgICAg
ICAgICBvdXQgKz0gcHJldHR5UHJpbnRlcihjb25zZXF1ZW50LCBpbmRlbnQgKyBJTkRFTlQpOwor
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5
cGVzLlRlcm5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgb3V0ICs9IHByZXR0eVByaW50ZXIo
bm9kZS5wcmVkaWNhdGUsIE5PX0lOREVOVCkgKyAiID8gIiArIHByZXR0eVByaW50ZXIobm9kZS5j
b25zZXF1ZW50LCBOT19JTkRFTlQpICsgIiA6ICIgKyBwcmV0dHlQcmludGVyKG5vZGUuYWx0ZXJu
YXRlLCBOT19JTkRFTlQpOworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgY2FzZSBU
eXBlcy5UaGlzRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHJldHVybiAidGhpcyI7CisgICAgICAg
IGNhc2UgVHlwZXMuVGhyb3dTdGF0ZW1lbnQ6CisgICAgICAgICAgICBvdXQgKz0gaW5kZW50ICsg
InRocm93ICIgKyBwcmV0dHlQcmludGVyKG5vZGUuYXJndW1lbnQsIE5PX0lOREVOVCk7CisgICAg
ICAgICAgICByZXR1cm4gb3V0OworICAgICAgICBjYXNlIFR5cGVzLlRyeVN0YXRlbWVudDoKKyAg
ICAgICAgICAgIC8vZnVuYyhub2RlKTsKKyAgICAgICAgICAgIC8vcmVjdXJzZShub2RlLmJsb2Nr
LCBmdW5jKTsKKyAgICAgICAgICAgIC8vLy8gVE9ETzogd2hhdCBpcyBndWFyZGVkSGFuZGxlcnMg
b24gdGhlIEFTVD8KKyAgICAgICAgICAgIC8vcmVjdXJzZUFycmF5T2ZOb2Rlcyhub2RlLmhhbmRs
ZXJzLCBmdW5jKTsKKyAgICAgICAgICAgIC8vcmVjdXJzZShub2RlLmZpbmFsaXplciwgZnVuYyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5VbmFyeUV4cHJlc3Npb246
CisgICAgICAgICAgICBvdXQgKz0gbm9kZS5vcGVyYXRvciArIHByZXR0eVByaW50ZXIobm9kZS5h
cmd1bWVudCwgTk9fSU5ERU5UKTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIGNh
c2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
VG9rZW4oInZhcihTQikiLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLmZvckVhY2goZnVuY3Rp
b24oZGVjbGFyYXRpb24sIGlkeCkgeworICAgICAgICAgICAgICAgIGlmIChpZHggIT09IDApCisg
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIiAgICIsIC0xKTsKKyAgICAg
ICAgICAgICAgICBwcmV0dHlQcmludGVyKGRlY2xhcmF0aW9uKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaWR4ICE9PSBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggLSAxKQorICAgICAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCIsIiwgLTEpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOyIsIC0xKTsKKyAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvL291dCA9IGluZGVudCArICJ2YXIgIgorICAg
ICAgICAgICAgLy9ub2RlLmRlY2xhcmF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKGRlY2xhcmF0aW9u
LCBpKSB7CisgICAgICAgICAgICAvLyAgICBpZiAoaSAhPT0gMCkKKyAgICAgICAgICAgIC8vICAg
ICAgICBvdXQgKz0gaW5kZW50ICsgIiAgICAiCisgICAgICAgICAgICAvLyAgICBvdXQgKz0gcHJl
dHR5UHJpbnRlcihkZWNsYXJhdGlvbiwgaW5kZW50KSArICIsXG4iOworICAgICAgICAgICAgLy99
KTsKKyAgICAgICAgICAgIC8vb3V0ID0gdHJpbVRyYWlsaW5nTmV3bGluZShvdXQpOworICAgICAg
ICAgICAgLy9vdXQgPSB0cmltVHJhaWxpbmdDb21tYShvdXQpOworICAgICAgICAgICAgLy9vdXQg
Kz0gIjtcbiI7CisgICAgICAgICAgICAvL3JldHVybiBvdXQ7CisgICAgICAgIGNhc2UgVHlwZXMu
VmFyaWFibGVEZWNsYXJhdG9yOgorICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmlkKTsg
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKGRpc3BsYXlUeXBlKG5vZGUuX3R5cGVz
KSwgLTEpOworICAgICAgICAgICAgaWYgKG5vZGUuaW5pdCkgeworICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kVG9rZW4oIiA9ICIsIC0xKTsKKyAgICAgICAgICAgICAgICBwcmV0dHlQcmlu
dGVyKG5vZGUuaW5pdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIC8vb3V0ICs9IHByZXR0eVByaW50ZXIobm9kZS5pZCwgaW5kZW50KSArIGRpc3BsYXlU
eXBlKG5vZGUuX3R5cGVzLCBpbmRlbnQpOworICAgICAgICAgICAgLy9pZiAobm9kZS5pbml0KQor
ICAgICAgICAgICAgLy8gICAgb3V0ICs9ICIgPSAiICsgcHJldHR5UHJpbnRlcihub2RlLmluaXQs
IGluZGVudCk7CisgICAgICAgICAgICAvL3JldHVybiBvdXQ7CisgICAgICAgIGNhc2UgVHlwZXMu
V2hpbGVTdGF0ZW1lbnQ6CisgICAgICAgICAgICBvdXQgKz0gaW5kZW50ICsgIndoaWxlICgiICsg
cHJldHR5UHJpbnRlcihub2RlLnByZWRpY2F0ZSwgTk9fSU5ERU5UKSArICIpICIgKyBwcmV0dHlQ
cmludGVyKG5vZGUuYm9keSwgaW5kZW50KTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAg
ICAgIGNhc2UgVHlwZXMuV2l0aFN0YXRlbWVudDoKKyAgICAgICAgICAgIG91dCArPSBpbmRlbnQg
KyAid2l0aCAoIiArIHByZXR0eVByaW50ZXIobm9kZS5vYmplY3QsIE5PX0lOREVOVCkgKyAiKSAi
ICsgcHJldHR5UHJpbnRlcihub2RlLmJvZHksIGluZGVudCk7CisgICAgICAgICAgICByZXR1cm4g
b3V0OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKworICAgIHJldHVy
biBwcmV0dHlQcmludGVyOworfQorCkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVG9vbHMv
UHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkluc3BlY3RvclVJL1Rvb2xzL1ByZXR0eVByaW50aW5nL0Zvcm1hdHRlckNvbnRl
bnRCdWlsZGVyLmpzCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VG9vbHMvUHJldHR5UHJpbnRpbmcvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTIxMSw2ICsyMTEsOSBAQCBGb3JtYXR0ZXJDb250ZW50QnVpbGRlci5wcm90b3R5
cGUgPSB7CiAKICAgICBfYWRkTWFwcGluZ0lmTmVlZGVkOiBmdW5jdGlvbihvcmlnaW5hbFBvc2l0
aW9uKQogICAgIHsKKyAgICAgICAgaWYgKG9yaWdpbmFsUG9zaXRpb24gPT09IC0xKQorICAgICAg
ICAgICAgcmV0dXJuOworCiAgICAgICAgIGlmIChvcmlnaW5hbFBvc2l0aW9uIC0gdGhpcy5fbGFz
dE9yaWdpbmFsUG9zaXRpb24gPT09IHRoaXMuX2Zvcm1hdHRlZENvbnRlbnRMZW5ndGggLSB0aGlz
Ll9sYXN0Rm9ybWF0dGVkUG9zaXRpb24pCiAgICAgICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwJKHJldmlzaW9u
IDE3MTAxNikKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01haW4uaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw4IEBACiAgICAgPHNjcmlwdCBzcmM9IkV4
dGVybmFsL0NvZGVNaXJyb3Ivc3FsLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iRXh0
ZXJuYWwvQ29kZU1pcnJvci94bWwuanMiPjwvc2NyaXB0PgogCisKKwogICAgIDxzY3JpcHQgc3Jj
PSJCYXNlL1dlYkluc3BlY3Rvci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2Uv
T2JqZWN0LmpzIj48L3NjcmlwdD4KIApAQCAtMTcxLDYgKzE3Myw4IEBACiAgICAgPHNjcmlwdCBz
cmM9IkJhc2UvVVJMVXRpbGl0aWVzLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQmFz
ZS9VdGlsaXRpZXMuanMiPjwvc2NyaXB0PgogCisgICAgPHNjcmlwdCBzcmM9IkV4dGVybmFsL2Vz
cHJpbWEuanMiPjwvc2NyaXB0PgorCiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sL0FwcGxpY2F0
aW9uQ2FjaGVPYnNlcnZlci5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IlByb3RvY29s
L0NTU09ic2VydmVyLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wvQ29u
c29sZU9ic2VydmVyLmpzIj48L3NjcmlwdD4KQEAgLTI1Niw2ICsyNjAsNyBAQAogICAgIDxzY3Jp
cHQgc3JjPSJNb2RlbHMvU2V0dGluZy5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9Ik1v
ZGVscy9Tb3VyY2VDb2RlTG9jYXRpb24uanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJN
b2RlbHMvU291cmNlQ29kZVBvc2l0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
TW9kZWxzL1NvdXJjZUNvZGVBU1QuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJNb2Rl
bHMvU291cmNlQ29kZVJldmlzaW9uLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iTW9k
ZWxzL1NvdXJjZUNvZGVUZXh0UmFuZ2UuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJN
b2RlbHMvU291cmNlQ29kZVRpbWVsaW5lLmpzIj48L3NjcmlwdD4KSW5kZXg6IFNvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Db250cm9sbGVycy9Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIu
anMJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0NvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5qcwkod29y
a2luZyBjb3B5KQpAQCAtNDksNyArNDksOCBAQCBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250CiAgICAgTm9uZTogIm5vbmUiLAogICAgIE5vblN5bWJvbFRva2VuczogIm5v
bi1zeW1ib2wtdG9rZW5zIiwKICAgICBKYXZhU2NyaXB0RXhwcmVzc2lvbjogImphdmFzY3JpcHQt
ZXhwcmVzc2lvbiIsCi0gICAgTWFya2VkVG9rZW5zOiAibWFya2VkLXRva2VucyIKKyAgICBNYXJr
ZWRUb2tlbnM6ICJtYXJrZWQtdG9rZW5zIiwKKyAgICBQb3N0SmF2YVNjcmlwdEV4cHJlc3Npb246
ICJQb3N0SmF2YVNjcmlwdEV4cHJlc3Npb24iCiB9CiAKIFdlYkluc3BlY3Rvci5Db2RlTWlycm9y
VG9rZW5UcmFja2luZ0NvbnRyb2xsZXIucHJvdG90eXBlID0gewpAQCAtMzg5LDYgKzM5MCw3IEBA
IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnQKICAgICAgICAgICAgIHRo
aXMuX2NhbmRpZGF0ZSA9IHRoaXMuX3Byb2Nlc3NOb25TeW1ib2xUb2tlbigpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNr
aW5nQ29udHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uOgorICAgICAgICBjYXNlIFdl
Ykluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5Qb3N0SmF2
YVNjcmlwdEV4cHJlc3Npb246CiAgICAgICAgICAgICB0aGlzLl9jYW5kaWRhdGUgPSB0aGlzLl9w
cm9jZXNzSmF2YVNjcmlwdEV4cHJlc3Npb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9k
ZS5NYXJrZWRUb2tlbnM6CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9Gb3JtYXR0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3Bl
Y3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyLmpzCShyZXZpc2lvbiAx
NzEwMTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVy
cy9Gb3JtYXR0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxMiBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLWZ1bmN0aW9uIEZvcm1hdHRlcihj
b2RlTWlycm9yLCBidWlsZGVyKQorZnVuY3Rpb24gRm9ybWF0dGVyKC8qc2NyaXB0Ki8gY29kZU1p
cnJvciwgYnVpbGRlcikKIHsKLSAgICBjb25zb2xlLmFzc2VydChjb2RlTWlycm9yKTsKKyAgICAv
L2NvbnNvbGUuYXNzZXJ0KHNjcmlwdCk7CiAgICAgY29uc29sZS5hc3NlcnQoYnVpbGRlcik7CiAK
KyAgICAvL3RoaXMuX3NjcmlwdCA9IHNjcmlwdDsKICAgICB0aGlzLl9jb2RlTWlycm9yID0gY29k
ZU1pcnJvcjsKICAgICB0aGlzLl9idWlsZGVyID0gYnVpbGRlcjsKIApAQCAtNDIsNiArNDMsMjEg
QEAgRm9ybWF0dGVyLnByb3RvdHlwZSA9IHsKIAogICAgIGZvcm1hdDogZnVuY3Rpb24oZnJvbSwg
dG8pCiAgICAgeworICAgICAgICAvL2NvbnNvbGUuYXNzZXJ0KHRoaXMuX2J1aWxkZXIub3JpZ2lu
YWxDb250ZW50ID09PSBudWxsKTsKKworICAgICAgICAvL2lmICghdGhpcy5fc2NyaXB0Ll9zb3Vy
Y2VDb2RlQVNUKQorICAgICAgICAvLyAgICByZXR1cm47CisKKyAgICAgICAgLy9pZiAoIXRoaXMu
X3NjcmlwdC5fc291cmNlQ29kZUFTVC5fYXN0KSAKKyAgICAgICAgLy8gICAgcmV0dXJuOworCisg
ICAgICAgIC8vdmFyIHByZXR0eVByaW50ZXIgPSBtYWtlUHJldHR5UHJpbnRlcih0aGlzLl9idWls
ZGVyLCB0aGlzLl9nZXROZXdsaW5lUG9zaXRpb25zKHRoaXMuX2J1aWxkZXIpKTsKKyAgICAgICAg
Ly9wcmV0dHlQcmludGVyKHRoaXMuX3NjcmlwdC5fc291cmNlQ29kZUFTVC5fYXN0KTsKKyAgICAg
ICAgLy90aGlzLl9idWlsZGVyLmZpbmlzaCgpOworICAgICAgICAvL2NvbnNvbGUubG9nKCJmaW5p
c2hlZCBwcmV0dGlmeWluZzpcbiIgKyB0aGlzLl9idWlsZGVyLmZvcm1hdHRlZENvbnRlbnQpOwor
ICAgICAgICAKKworICAgICAgICAvL09SSUdJTkFMOgogICAgICAgICBjb25zb2xlLmFzc2VydCh0
aGlzLl9idWlsZGVyLm9yaWdpbmFsQ29udGVudCA9PT0gbnVsbCk7CiAgICAgICAgIGlmICh0aGlz
Ll9idWlsZGVyLm9yaWdpbmFsQ29udGVudCAhPT0gbnVsbCkKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTgxLDYgKzk3LDIwIEBAIEZvcm1hdHRlci5wcm90b3R5cGUgPSB7CiAKICAgICAvLyBQcml2
YXRlCiAKKyAgICBfZ2V0TmV3bGluZVBvc2l0aW9uczogZnVuY3Rpb24oYnVpbGRlcikgCisgICAg
eworICAgICAgICB2YXIgcG9zQXJyYXkgPSBbXTsKKyAgICAgICAgdmFyIHN0ciA9IHRoaXMuX3Nj
cmlwdC5fc291cmNlQ29kZUFTVC5fb3JpZ2luYWxTb3VyY2VUZXh0OworICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHN0cltpXSA9
PT0gIlxuIikgeworICAgICAgICAgICAgICAgIHBvc0FycmF5LnB1c2goaSk7CisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hZGRPcmlnaW5hbExpbmVFbmRpbmcoaSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gcG9zQXJyYXk7CisgICAgfSwKKwogICAgIF9oYW5k
bGVUb2tlbjogZnVuY3Rpb24obW9kZSwgdG9rZW4sIHN0YXRlLCBzdHJlYW0sIG9yaWdpbmFsUG9z
aXRpb24sIGlzV2hpdGVTcGFjZSwgc3RhcnRPZk5ld0xpbmUsIGZpcnN0VG9rZW5PbkxpbmUpCiAg
ICAgewogICAgICAgICAvLyBTdHJpbmcgY29udGVudCBvZiB0aGUgdG9rZW4uCkBAIC0xNjIsMyAr
MTkyLDQzNiBAQCBGb3JtYXR0ZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9idWlsZGVy
LmFkZE9yaWdpbmFsTGluZUVuZGluZyhvcmlnaW5hbE5ld0xpbmVQb3NpdGlvbik7CiAgICAgfQog
fTsKKworZnVuY3Rpb24gbWFrZVByZXR0eVByaW50ZXIoYnVpbGRlciwgbmV3bGluZVBvc2l0aW9u
cykgCit7CisgICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlw
ZTsKKyAgICB2YXIgbGFzdE5vZGUgPSBudWxsOworCisgICAgZnVuY3Rpb24gdHJpbVRyYWlsaW5n
Q2hhcihzLCBjaGFyKSAKKyAgICB7CisgICAgICAgIGlmIChzW3MubGVuZ3RoIC0gMV0gPT09IGNo
YXIpCisgICAgICAgICAgICByZXR1cm4gcy5zbGljZSgwLCAtMSk7CisKKyAgICAgICAgcmV0dXJu
IHM7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlzcGxheVR5cGUodHlwZSkgCisgICAgeworICAg
ICAgICB0eXBlID0gdHJpbVRyYWlsaW5nQ2hhcih0eXBlLCAiICIpOworICAgICAgICByZXR1cm4g
IiA6IDwiICsgdHlwZSArICI+IgorICAgIH0KKworICAgIGZ1bmN0aW9uIGNsZWFyTmV3bGluZXMo
cG9zKQorICAgIHsKKyAgICAgICAgd2hpbGUgKG5ld2xpbmVQb3NpdGlvbnMubGVuZ3RoICYmIG5l
d2xpbmVQb3NpdGlvbnNbMF0gPCBwb3MpIHsKKyAgICAgICAgICAgIGlmIChsYXN0Tm9kZSAmJiBu
ZXdsaW5lUG9zaXRpb25zWzBdID4gbGFzdE5vZGUucmFuZ2VbMV0gLSAxKQorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kTmV3bGluZSh0cnVlKTsKKyAgICAgICAgICAgIG5ld2xpbmVQb3Np
dGlvbnMuc2hpZnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIGlzSWdub3Jl
QnJhY2VUeXBlKHR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gdHlwZSA9PT0gVHlwZXMuSWZT
dGF0ZW1lbnQKKyAgICAgICAgICAgIHx8IHR5cGUgPT09IFR5cGVzLldoaWxlU3RhdGVtZW50Cisg
ICAgICAgICAgICB8fCB0eXBlID09PSBUeXBlcy5Gb3JTdGF0ZW1lbnQKKyAgICAgICAgICAgIHx8
IHR5cGUgPT09IFR5cGVzLkZvckluU3RhdGVtZW50OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBy
ZXR0eVByaW50ZXIobm9kZSwgcGFyZW50Tm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvL2NsZWFyTmV3bGluZXMobm9kZS5yYW5n
ZVswXSk7CisKKyAgICAgICAgdmFyIG91dCA9ICIiOworICAgICAgICBzd2l0Y2gobm9kZS50eXBl
KSB7CisgICAgICAgIGNhc2UgVHlwZXMuQXNzaWdubWVudEV4cHJlc3Npb246CisgICAgICAgICAg
ICBwcmV0dHlQcmludGVyKG5vZGUubGVmdCk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRv
a2VuKGRpc3BsYXlUeXBlKG5vZGUuX3R5cGVzKSwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRTcGFjZSgpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbihub2RlLm9wZXJh
dG9yLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAg
ICBwcmV0dHlQcmludGVyKG5vZGUucmlnaHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVHlwZXMuQXJyYXlFeHByZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5lbGVtZW50cy5m
b3JFYWNoKGZ1bmN0aW9uKGV4cHIsIGlkeCkgeworICAgICAgICAgICAgICAgIHByZXR0eVByaW50
ZXIoZXhwcik7IAorICAgICAgICAgICAgICAgIGlmIChpZHggIT09IG5vZGUuZWxlbWVudHMubGVu
Z3RoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCIsIiwg
LTEpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5CbG9ja1N0YXRlbWVudDoKKyAgICAgICAgICAgIHZhciBpZ25vcmVCcmFjZXMg
PSAocGFyZW50Tm9kZSAmJiBpc0lnbm9yZUJyYWNlVHlwZShwYXJlbnROb2RlLnR5cGUpICYmIG5v
ZGUuYm9keS5sZW5ndGggPT09IDEpOworICAgICAgICAgICAgaWYgKCFpZ25vcmVCcmFjZXMpCisg
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigieyIsIC0xKTsKKyAgICAgICAgICAg
IGNsZWFyTmV3bGluZXMobm9kZS5yYW5nZVswXSArIDIpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmROZXdsaW5lKCk7CisgICAgICAgICAgICBidWlsZGVyLmluZGVudCgpOworICAgICAgICAg
ICAgbm9kZS5ib2R5LmZvckVhY2goZnVuY3Rpb24oZXhwcikgeworICAgICAgICAgICAgICAgIHBy
ZXR0eVByaW50ZXIoZXhwcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJ1aWxkZXIu
ZGVkZW50KCk7CisgICAgICAgICAgICBpZiAoIWlnbm9yZUJyYWNlcykKKyAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZFRva2VuKCJ9IiwgLTEpOworICAgICAgICAgICAgY2xlYXJOZXdsaW5l
cyhub2RlLnJhbmdlWzFdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LkJpbmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUubGVmdCk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZFRva2VuKG5vZGUub3BlcmF0b3IsIC0xKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5yaWdodCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5CcmVha1N0YXRlbWVudDoKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oImJyZWFrIiwgbm9kZS5yYW5nZVswXSk7CisgICAg
ICAgICAgICBpZiAobm9kZS5sYWJlbCkKKyAgICAgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5v
ZGUubGFiZWwpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOyIsIC0xKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkNhdGNoQ2xhdXNlOgorICAgICAg
ICAgICAgcmV0dXJuICIiOworICAgICAgICBjYXNlIFR5cGVzLkNvbnRpbnVlU3RhdGVtZW50Ogor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiY29udGludWUiLCBub2RlLnJhbmdlWzBd
KTsKKyAgICAgICAgICAgIGlmIChub2RlLmxhYmVsKQorICAgICAgICAgICAgICAgIHByZXR0eVBy
aW50ZXIobm9kZS5sYWJlbCk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCI7Iiwg
LTEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRG9XaGlsZVN0YXRl
bWVudDoKKyAgICAgICAgICAgIGNsZWFyTmV3bGluZXMobm9kZS5yYW5nZVswXSk7CisgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCJkbyIsIG5vZGUucmFuZ2VbMF0pOworICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2Rl
LmJvZHkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOyAKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kVG9rZW4oIndoaWxlIik7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZFNwYWNlKCk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCIoIiwgLTEpOworICAg
ICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLnByZWRpY2F0ZSk7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZFRva2VuKCIpIiwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tl
bigiOyIsIC0xKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkRlYnVn
Z2VyU3RhdGVtZW50OgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiZGVidWdnZXIi
LCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LkVtcHR5U3RhdGVtZW50OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMu
RXhwcmVzc2lvblN0YXRlbWVudDoKKyAgICAgICAgICAgIGNsZWFyTmV3bGluZXMobm9kZS5yYW5n
ZVswXSk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuZXhwcmVzc2lvbik7CisgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCI7IiwgLTEpOworICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmROZXdsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBl
cy5Gb3JTdGF0ZW1lbnQ6CisgICAgICAgICAgICBjbGVhck5ld2xpbmVzKG5vZGUucmFuZ2VbMF0p
OworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiZm9yIiwgbm9kZS5yYW5nZVswXSk7
CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZFRva2VuKCIoIiwgLTEpOworICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmlu
aXQpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOyIsIC0xKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9k
ZS5wcmVkaWNhdGUpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOyIsIC0xKTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIHByZXR0eVBy
aW50ZXIobm9kZS51cGRhdGUpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiKSIs
IC0xKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIHBy
ZXR0eVByaW50ZXIobm9kZS5ib2R5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGVzLkZ1bmN0aW9uQ2FsbDoKKyAgICAgICAgICAgIGNsZWFyTmV3bGluZXMobm9kZS5yYW5n
ZVswXSk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuY2FsbGVlKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIigiLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAg
IG5vZGUuYXJndW1lbnRzLmZvckVhY2goZnVuY3Rpb24oYXJnLCBpZHgpIHsKKyAgICAgICAgICAg
ICAgICBwcmV0dHlQcmludGVyKGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0gbm9k
ZS5hcmd1bWVudHMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZFRva2VuKCIsIiwgLTEpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNw
YWNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFRva2VuKCIpIiwgLTEpOworICAgICAgICAgICAgLy9idWlsZGVyLmFwcGVu
ZFRva2VuKGRpc3BsYXlUeXBlKG5vZGUuX3R5cGVzKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVudDoKKyAgICAgICAgICAgIGNsZWFyTmV3bGlu
ZXMobm9kZS5yYW5nZVswXSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCJmb3Ii
LCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAg
ICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5sZWZ0KTsKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oImluIiwgLTEp
OworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgcHJldHR5
UHJpbnRlcihub2RlLnJpZ2h0KTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5ib2R5
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVjbGFy
YXRpb246CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAg
ICAgY2xlYXJOZXdsaW5lcyhub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kVG9rZW4oImZ1bmN0aW9uIiwgLTEpOyAKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3Bh
Y2UoKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5pZCk7IAorICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmRUb2tlbigiKCIsIC0xKTsKKyAgICAgICAgICAgIG5vZGUucGFyYW1zLmZv
ckVhY2goZnVuY3Rpb24gKHBhcmFtLCBpZHgpIHsKKyAgICAgICAgICAgICAgICBwcmV0dHlQcmlu
dGVyKHBhcmFtKTsgCisgICAgICAgICAgICAgICAgLy9idWlsZGVyLmFwcGVuZFRva2VuKGRpc3Bs
YXlUeXBlKHBhcmFtLl90eXBlcyksIC0xKTsgCisgICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0g
bm9kZS5wYXJhbXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZFRva2VuKCIsIiwgLTEpOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNw
YWNlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFRva2VuKCIpIiwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRT
cGFjZSgpOworICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmJvZHkpOworICAgICAgICAg
ICAgaWYgKG5vZGUudHlwZSA9PT0gVHlwZXMuRnVuY3Rpb25EZWNsYXJhdGlvbikgCisgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmROZXdsaW5lKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRU
b2tlbihub2RlLm5hbWUsIG5vZGUucmFuZ2VbMF0pOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVHlwZXMuSWZTdGF0ZW1lbnQ6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRv
a2VuKCJpZiIsIG5vZGUucmFuZ2VbMF0pOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFj
ZSgpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiKCIsIC0xKTsKKyAgICAgICAg
ICAgIHByZXR0eVByaW50ZXIobm9kZS5wcmVkaWNhdGUpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRUb2tlbigiKSIsIC0xKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsK
KyAgICAgICAgICAgIGlmIChub2RlLmNvbnNlcXVlbnQudHlwZSAhPT0gVHlwZXMuQmxvY2tTdGF0
ZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmluZGVudCgpOworICAgICAgICAgICAg
ICAgIGNsZWFyTmV3bGluZXMobm9kZS5jb25zZXF1ZW50LnJhbmdlWzBdKTsKKyAgICAgICAgICAg
ICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHByZXR0eVByaW50ZXIobm9kZS5jb25zZXF1ZW50LCBub2RlKTsKKyAgICAgICAgICAgIGlmIChu
b2RlLmNvbnNlcXVlbnQudHlwZSAhPT0gVHlwZXMuQmxvY2tTdGF0ZW1lbnQpCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5kZWRlbnQoKTsKKyAgICAgICAgICAgIGlmIChub2RlLmFsdGVybmF0ZSkg
eworICAgICAgICAgICAgICAgIGlmIChub2RlLmNvbnNlcXVlbnQudHlwZSA9PT0gVHlwZXMuQmxv
Y2tTdGF0ZW1lbnQgJiYgbm9kZS5jb25zZXF1ZW50LmJvZHkubGVuZ3RoID4gMSkKKyAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kVG9rZW4oImVsc2UiKTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNw
YWNlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09IFR5cGVz
LkJsb2NrU3RhdGVtZW50ICYmIG5vZGUuYWx0ZXJuYXRlLnR5cGUgIT09IFR5cGVzLklmU3RhdGVt
ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTmV3bGluZSgpOworICAg
ICAgICAgICAgICAgICAgICBidWlsZGVyLmluZGVudCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuYWx0ZXJuYXRlLCBub2RlKTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gVHlwZXMuQmxvY2tTdGF0ZW1l
bnQgJiYgbm9kZS5hbHRlcm5hdGUudHlwZSAhPT0gVHlwZXMuSWZTdGF0ZW1lbnQpCisgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuZGVkZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGVzLkxpdGVyYWw6CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKG5vZGUu
cmF3LCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkxhYmVsZWRTdGF0ZW1lbnQ6CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUubGFi
ZWwpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOiIsIC0xKTsKKyAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9k
ZS5ib2R5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkxvZ2ljYWxF
eHByZXNzaW9uOgorICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmxlZnQpOworICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRU
b2tlbihub2RlLm9wZXJhdG9yLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNl
KCk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUucmlnaHQpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuTWVtYmVyRXhwcmVzc2lvbjoKKyAgICAgICAgICAg
IHByZXR0eVByaW50ZXIobm9kZS5vYmplY3QpOworICAgICAgICAgICAgaWYgKG5vZGUucHJvcGVy
dHkudHlwZSA9PT0gVHlwZXMuTGl0ZXJhbCkgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kVG9rZW4oIlsiLCAtMSk7IAorICAgICAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5w
cm9wZXJ0eSk7IAorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIl0iLCAtMSk7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9r
ZW4oIi4iLCAtMSk7CisgICAgICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLnByb3BlcnR5
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
Lk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCJuZXciLCAt
MSk7IAorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgcHJl
dHR5UHJpbnRlcihub2RlLmNhbGxlZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2Vu
KCIoIiwgLTEpOworICAgICAgICAgICAgbm9kZS5hcmd1bWVudHMuZm9yRWFjaChmdW5jdGlvbihh
cmcsIGlkeCkgeworICAgICAgICAgICAgICAgIHByZXR0eVByaW50ZXIoYXJnKQorICAgICAgICAg
ICAgICAgIGlmIChpZHggIT09IG5vZGUuYXJndW1lbnRzLmxlbmd0aCAtIDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiLCIsIC0xKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuT2JqZWN0RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIHZhciBtYXhJbmxpbmVEaXNwbGF5ID0gNDsKKyAgICAgICAg
ICAgIHZhciBkZWxpbWl0ZXJGdW5jOworICAgICAgICAgICAgdmFyIHNob3VsZEluZGVudAorICAg
ICAgICAgICAgaWYgKG5vZGUucHJvcGVydGllcy5sZW5ndGggPiBtYXhJbmxpbmVEaXNwbGF5KSB7
CisgICAgICAgICAgICAgICAgZGVsaW1pdGVyRnVuYyA9IGJ1aWxkZXIuYXBwZW5kTmV3bGluZTsK
KyAgICAgICAgICAgICAgICBzaG91bGRJbmRlbnQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgZGVsaW1pdGVyRnVuYyA9IGJ1aWxkZXIuYXBwZW5kU3BhY2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oInsiLCBub2RlLnJh
bmdlWzBdKTsgCisgICAgICAgICAgICBkZWxpbWl0ZXJGdW5jKCk7CisgICAgICAgICAgICBpZiAo
c2hvdWxkSW5kZW50KQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuaW5kZW50KCk7CisgICAgICAg
ICAgICBub2RlLnByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbihwcm9wLCBpZHgpIHsKKyAgICAg
ICAgICAgICAgICBwcmV0dHlQcmludGVyKHByb3ApIDsKKyAgICAgICAgICAgICAgICBpZiAoaWR4
ICE9PSBub2RlLnByb3BlcnRpZXMubGVuZ3RoIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRUb2tlbigiLCIsIC0xKTsKKyAgICAgICAgICAgICAgICBkZWxpbWl0ZXJGdW5j
KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGlmIChzaG91bGRJbmRlbnQpCisgICAg
ICAgICAgICAgICAgYnVpbGRlci5kZWRlbnQoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
VG9rZW4oIn0iLCAtMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Q
cm9ncmFtOgorICAgICAgICAgICAgbm9kZS5ib2R5LmZvckVhY2goZnVuY3Rpb24oYm9keSkgewor
ICAgICAgICAgICAgICAgIHByZXR0eVByaW50ZXIoYm9keSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlByb3BlcnR5OgorICAgICAgICAg
ICAgcHJldHR5UHJpbnRlcihub2RlLmtleSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRv
a2VuKCI6IiwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAg
ICAgICAgcHJldHR5UHJpbnRlcihub2RlLnZhbHVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGVzLlByZWZpeEV4cHJlc3Npb246CisgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZFRva2VuKG5vZGUub3BlcmF0b3IsIC0xKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIo
bm9kZS5hcmd1bWVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Q
b3N0Zml4RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5hcmd1bWVu
dCk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKG5vZGUub3BlcmF0b3IsIC0xKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlJldHVyblN0YXRlbWVudDoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oInJldHVybiIsIG5vZGUucmFuZ2VbMF0p
OworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgcHJldHR5
UHJpbnRlcihub2RlLmFyZ3VtZW50KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4o
IjsiLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlNlcXVlbmNlRXhwcmVzc2lvbjoKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIigiLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAg
ICAgIG5vZGUuZXhwcmVzc2lvbnMuZm9yRWFjaChmdW5jdGlvbihleHByLCBpZHgpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaWR4ICE9PSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAtIDEpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcHJldHR5UHJpbnRlcihleHByKTsgCisgICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIiwiLCAtMSk7CisgICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIikiLCAtMSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Td2l0Y2hTdGF0ZW1lbnQ6CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFRva2VuKCJzd2l0Y2giLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4o
IigiLCAtMSk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuZGlzY3JpbWluYW50KTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIikiLCAtMSk7CisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCJ7
IiwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmROZXdsaW5lKCk7CisgICAgICAgICAg
ICBidWlsZGVyLmluZGVudCgpOworICAgICAgICAgICAgbm9kZS5jYXNlcy5mb3JFYWNoKGZ1bmN0
aW9uIChhQ2FzZSkgeworICAgICAgICAgICAgICAgIHByZXR0eVByaW50ZXIoYUNhc2UpOyAKKyAg
ICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgYnVpbGRlci5kZWRlbnQoKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
VG9rZW4oIn0iLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlN3aXRjaENhc2U6CisgICAgICAg
ICAgICBpZiAobm9kZS5wcmVkaWNhdGUpCisgICAgICAgICAgICAgICAgcHJldHR5UHJpbnRlcihu
b2RlLnByZWRpY2F0ZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmRUb2tlbigiZGVmYXVsdCIsIG5vZGUucmFuZ2VbMF0pOworICAgICAgICAgICAgYnVp
bGRlci5hcHBlbmRUb2tlbigiOiIsIC0xKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTmV3
bGluZSgpOworICAgICAgICAgICAgYnVpbGRlci5pbmRlbnQoKTsKKyAgICAgICAgICAgIG5vZGUu
Y29uc2VxdWVudC5mb3JFYWNoKGZ1bmN0aW9uIChjb25zZXF1ZW50KSB7CisgICAgICAgICAgICAg
ICAgcHJldHR5UHJpbnRlcihjb25zZXF1ZW50KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgYnVpbGRlci5kZWRlbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLlRlcm5hcnlFeHByZXNzaW9uOgorICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLnBy
ZWRpY2F0ZSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZFRva2VuKCI/IiwgLTEpOworICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmRTcGFjZSgpOworICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmNvbnNlcXVlbnQpOwor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmRUb2tlbigiOiIsIC0xKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsK
KyAgICAgICAgICAgIHByZXR0eVByaW50ZXIobm9kZS5hbHRlcm5hdGUpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGhpc0V4cHJlc3Npb246CisgICAgICAgICAgICBu
b2RlLmFwcGVuZFRva2VuKCJ0aGlzIiwgbm9kZS5yYW5nZVswXSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5UaHJvd1N0YXRlbWVudDoKKyAgICAgICAgICAgIG5vZGUu
YXBwZW5kVG9rZW4oInRocm93Iiwgbm9kZS5yYW5nZVswXSk7CisgICAgICAgICAgICBub2RlLmFw
cGVuZFNwYWNlKCk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuYXJndW1lbnQpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVHJ5U3RhdGVtZW50OgorICAg
ICAgICAgICAgLy9mdW5jKG5vZGUpOworICAgICAgICAgICAgLy9yZWN1cnNlKG5vZGUuYmxvY2ss
IGZ1bmMpOworICAgICAgICAgICAgLy8vLyBUT0RPOiB3aGF0IGlzIGd1YXJkZWRIYW5kbGVycyBv
biB0aGUgQVNUPworICAgICAgICAgICAgLy9yZWN1cnNlQXJyYXlPZk5vZGVzKG5vZGUuaGFuZGxl
cnMsIGZ1bmMpOworICAgICAgICAgICAgLy9yZWN1cnNlKG5vZGUuZmluYWxpemVyLCBmdW5jKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlVuYXJ5RXhwcmVzc2lvbjoK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4obm9kZS5vcGVyYXRvciwgbm9kZS5yYW5n
ZVswXSk7CisgICAgICAgICAgICBwcmV0dHlQcmludGVyKG5vZGUuYXJndW1lbnQpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAg
ICAgICAgICAgIGNsZWFyTmV3bGluZXMobm9kZS5yYW5nZVswXSk7CisgICAgICAgICAgICBidWls
ZGVyLmFwcGVuZFRva2VuKCJ2YXIiLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kU3BhY2UoKTsKKyAgICAgICAgICAgIG5vZGUuZGVjbGFyYXRpb25zLmZvckVhY2go
ZnVuY3Rpb24oZGVjbGFyYXRpb24sIGlkeCkgeworICAgICAgICAgICAgICAgIC8vY2xlYXJOZXds
aW5lcyhkZWNsYXJhdGlvbi5yYW5nZVswXSk7CisgICAgICAgICAgICAgICAgaWYgKGlkeCAhPT0g
MCkKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiICAgICIsIC0xKTsK
KyAgICAgICAgICAgICAgICBwcmV0dHlQcmludGVyKGRlY2xhcmF0aW9uKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaWR4ICE9PSBub2RlLmRlY2xhcmF0aW9ucy5sZW5ndGggLSAxKQorICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZFRva2VuKCIsIiwgLTEpOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRUb2tlbigiOyIsIC0xKTsK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZE5ld2xpbmUoKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJh
dG9yOgorICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmlkKTsgCisgICAgICAgICAgICAv
L2J1aWxkZXIuYXBwZW5kVG9rZW4oZGlzcGxheVR5cGUobm9kZS5fdHlwZXMpLCAtMSk7CisgICAg
ICAgICAgICBpZiAobm9kZS5pbml0KSB7CisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRT
cGFjZSgpOworICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIj0iLCAtMSk7Cisg
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmRTcGFjZSgpOworICAgICAgICAgICAgICAgIHBy
ZXR0eVByaW50ZXIobm9kZS5pbml0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFR5cGVzLldoaWxlU3RhdGVtZW50OgorICAgICAgICAgICAgY2xlYXJO
ZXdsaW5lcyhub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIG5vZGUuYXBwZW5kVG9rZW4oIndo
aWxlIiwgbm9kZS5yYW5nZVswXSk7CisgICAgICAgICAgICBub2RlLmFwcGVuZFNwYWNlKCk7Cisg
ICAgICAgICAgICBub2RlLmFwcGVuZCgiKCIsIC0xKTsKKyAgICAgICAgICAgIHByZXR0eVByaW50
ZXIobm9kZS5wcmVkaWNhdGUpOworICAgICAgICAgICAgcHJldHR5UHJpbnRlcihub2RlLmJvZHkp
OworICAgICAgICAgICAgbm9kZS5hcHBlbmROZXdsaW5lKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5XaXRoU3RhdGVtZW50OgorICAgICAgICAgICAgY2xlYXJOZXds
aW5lcyhub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIndp
dGgiLCBub2RlLnJhbmdlWzBdKTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kU3BhY2UoKTsK
KyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9rZW4oIigiLCAtMSk7CisgICAgICAgICAgICBw
cmV0dHlQcmludGVyKG5vZGUub2JqZWN0KTsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVG9r
ZW4oIikiLCAtMSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFNwYWNlKCk7CisgICAgICAg
ICAgICBwcmV0dHlQcmludGVyKG5vZGUuYm9keSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIGxhc3ROb2RlID0gbm9kZTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJl
dHR5UHJpbnRlcjsKK30KKwpJbmRleDogU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyQ29udGVudEJ1aWxkZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVy
Q29udGVudEJ1aWxkZXIuanMJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0Zvcm1hdHRlckNvbnRlbnRCdWlsZGVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDkgQEAgRm9ybWF0dGVyQ29udGVudEJ1aWxk
ZXIucHJvdG90eXBlID0gewogCiAgICAgX2FkZE1hcHBpbmdJZk5lZWRlZDogZnVuY3Rpb24ob3Jp
Z2luYWxQb3NpdGlvbikKICAgICB7CisgICAgICAgIGlmIChvcmlnaW5hbFBvc2l0aW9uID09PSAt
MSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAob3JpZ2luYWxQb3NpdGlvbiAt
IHRoaXMuX2xhc3RPcmlnaW5hbFBvc2l0aW9uID09PSB0aGlzLl9mb3JtYXR0ZWRDb250ZW50TGVu
Z3RoIC0gdGhpcy5fbGFzdEZvcm1hdHRlZFBvc2l0aW9uKQogICAgICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9G
b3JtYXR0ZXJTb3VyY2VNYXAuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJ
L1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvRm9ybWF0dGVyU291cmNlTWFwLmpzCShyZXZpc2lv
biAxNzEwMTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9Gb3JtYXR0ZXJTb3VyY2VNYXAuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDEz
IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90eXAKICAgICAgICAgcmV0
dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9mb3JtYXR0ZWRMaW5lRW5kaW5ncywg
Zm9ybWF0dGVkUG9zaXRpb24pOwogICAgIH0sCiAKKyAgICBvcmlnaW5hbFBvc2l0aW9uVG9Gb3Jt
YXR0ZWQ6IGZ1bmN0aW9uKG9yaWdpbmFsUG9zaXRpb24pCisgICAgeworICAgICAgICB2YXIgZm9y
bWF0dGVkUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0UG9zaXRpb24odGhpcy5fbWFwcGluZy5vcmln
aW5hbCwgdGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIG9yaWdpbmFsUG9zaXRpb24pOworICAgICAg
ICByZXR1cm4gdGhpcy5fcG9zaXRpb25Ub0xvY2F0aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRp
bmdzLCBmb3JtYXR0ZWRQb3NpdGlvbik7CisgICAgfSwKKworCiAgICAgZm9ybWF0dGVkVG9Pcmln
aW5hbDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQogICAgIHsKICAgICAgICAg
dmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0aW9uKHRoaXMuX2Zv
cm1hdHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51bWJlciB8fCAwKTsK
QEAgLTU2LDYgKzYzLDE0IEBAIFdlYkluc3BlY3Rvci5Gb3JtYXR0ZXJTb3VyY2VNYXAucHJvdG90
eXAKICAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uVG9Mb2NhdGlvbih0aGlzLl9vcmlnaW5h
bExpbmVFbmRpbmdzLCBvcmlnaW5hbFBvc2l0aW9uKTsKICAgICB9LAogCisgICAgZm9ybWF0dGVk
VG9PcmlnaW5hbE9mZnNldDogZnVuY3Rpb24obGluZU51bWJlciwgY29sdW1uTnVtYmVyKQorICAg
IHsKKyAgICAgICAgdmFyIGZvcm1hdHRlZFBvc2l0aW9uID0gdGhpcy5fbG9jYXRpb25Ub1Bvc2l0
aW9uKHRoaXMuX2Zvcm1hdHRlZExpbmVFbmRpbmdzLCBsaW5lTnVtYmVyIHx8IDAsIGNvbHVtbk51
bWJlciB8fCAwKTsKKyAgICAgICAgdmFyIG9yaWdpbmFsUG9zaXRpb24gPSB0aGlzLl9jb252ZXJ0
UG9zaXRpb24odGhpcy5fbWFwcGluZy5mb3JtYXR0ZWQsIHRoaXMuX21hcHBpbmcub3JpZ2luYWws
IGZvcm1hdHRlZFBvc2l0aW9uKTsKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsUG9zaXRpb247Cisg
ICAgfSwKKworCiAgICAgLy8gUHJpdmF0ZQogCiAgICAgX2xvY2F0aW9uVG9Qb3NpdGlvbjogZnVu
Y3Rpb24obGluZUVuZGluZ3MsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0V4dGVybmFsL2VzcHJpbWEuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvRXh0ZXJuYWwvZXNw
cmltYS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0V4dGVybmFsL2VzcHJpbWEuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzMxIEBA
CisvKgorICBDb3B5cmlnaHQgKEMpIDIwMTMgQXJpeWEgSGlkYXlhdCA8YXJpeWEuaGlkYXlhdEBn
bWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMyBUaGFkZGVlIFR5bCA8dGhhZGRlZS50eWxA
Z21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTMgTWF0aGlhcyBCeW5lbnMgPG1hdGhpYXNA
cWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5
YXRAZ21haWwuY29tPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgTWF0aGlhcyBCeW5lbnMgPG1hdGhp
YXNAcWl3aS5iZT4KKyAgQ29weXJpZ2h0IChDKSAyMDEyIEpvb3N0LVdpbSBCb2VrZXN0ZWlqbiA8
am9vc3Qtd2ltQGJvZWtlc3RlaWpuLm5sPgorICBDb3B5cmlnaHQgKEMpIDIwMTIgS3JpcyBLb3dh
bCA8a3Jpcy5rb3dhbEBjaXhhci5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBZdXN1a2UgU3V6
dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisgIENvcHlyaWdodCAoQykgMjAxMiBBcnBhZCBC
b3Jzb3MgPGFycGFkLmJvcnNvc0Bnb29nbGVtYWlsLmNvbT4KKyAgQ29weXJpZ2h0IChDKSAyMDEx
IEFyaXlhIEhpZGF5YXQgPGFyaXlhLmhpZGF5YXRAZ21haWwuY29tPgorCisgIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIgorICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCA8Q09QWVJJR0hUIEhPTERFUj4gQkUgTElB
QkxFIEZPUiBBTlkKKyAgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisqLworCitXZWJJbnNwZWN0b3IuX2VzcHJpbWEgPSB7fTsKKyhmdW5j
dGlvbiAoZXhwb3J0cykgeworICAgICd1c2Ugc3RyaWN0JzsKKworICAgIHZhciBUb2tlbiwKKyAg
ICAgICAgVG9rZW5OYW1lLAorICAgICAgICBGbkV4cHJUb2tlbnMsCisgICAgICAgIFN5bnRheCwK
KyAgICAgICAgUHJvcGVydHlLaW5kLAorICAgICAgICBNZXNzYWdlcywKKyAgICAgICAgUmVnZXgs
CisgICAgICAgIFN5bnRheFRyZWVEZWxlZ2F0ZSwKKyAgICAgICAgc291cmNlLAorICAgICAgICBz
dHJpY3QsCisgICAgICAgIGluZGV4LAorICAgICAgICBsaW5lTnVtYmVyLAorICAgICAgICBsaW5l
U3RhcnQsCisgICAgICAgIGxlbmd0aCwKKyAgICAgICAgZGVsZWdhdGUsCisgICAgICAgIGxvb2th
aGVhZCwKKyAgICAgICAgc3RhdGUsCisgICAgICAgIGV4dHJhOworCisgICAgVG9rZW4gPSB7Cisg
ICAgICAgIEJvb2xlYW5MaXRlcmFsOiAxLAorICAgICAgICBFT0Y6IDIsCisgICAgICAgIElkZW50
aWZpZXI6IDMsCisgICAgICAgIEtleXdvcmQ6IDQsCisgICAgICAgIE51bGxMaXRlcmFsOiA1LAor
ICAgICAgICBOdW1lcmljTGl0ZXJhbDogNiwKKyAgICAgICAgUHVuY3R1YXRvcjogNywKKyAgICAg
ICAgU3RyaW5nTGl0ZXJhbDogOCwKKyAgICAgICAgUmVndWxhckV4cHJlc3Npb246IDkKKyAgICB9
OworCisgICAgVG9rZW5OYW1lID0ge307CisgICAgVG9rZW5OYW1lW1Rva2VuLkJvb2xlYW5MaXRl
cmFsXSA9ICdCb29sZWFuJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uRU9GXSA9ICc8ZW5kPic7Cisg
ICAgVG9rZW5OYW1lW1Rva2VuLklkZW50aWZpZXJdID0gJ0lkZW50aWZpZXInOworICAgIFRva2Vu
TmFtZVtUb2tlbi5LZXl3b3JkXSA9ICdLZXl3b3JkJzsKKyAgICBUb2tlbk5hbWVbVG9rZW4uTnVs
bExpdGVyYWxdID0gJ051bGwnOworICAgIFRva2VuTmFtZVtUb2tlbi5OdW1lcmljTGl0ZXJhbF0g
PSAnTnVtZXJpYyc7CisgICAgVG9rZW5OYW1lW1Rva2VuLlB1bmN0dWF0b3JdID0gJ1B1bmN0dWF0
b3InOworICAgIFRva2VuTmFtZVtUb2tlbi5TdHJpbmdMaXRlcmFsXSA9ICdTdHJpbmcnOworICAg
IFRva2VuTmFtZVtUb2tlbi5SZWd1bGFyRXhwcmVzc2lvbl0gPSAnUmVndWxhckV4cHJlc3Npb24n
OworCisgICAgLy8gQSBmdW5jdGlvbiBmb2xsb3dpbmcgb25lIG9mIHRob3NlIHRva2VucyBpcyBh
biBleHByZXNzaW9uLgorICAgIEZuRXhwclRva2VucyA9IFsnKCcsICd7JywgJ1snLCAnaW4nLCAn
dHlwZW9mJywgJ2luc3RhbmNlb2YnLCAnbmV3JywKKyAgICAgICAgICAgICAgICAgICAgJ3JldHVy
bicsICdjYXNlJywgJ2RlbGV0ZScsICd0aHJvdycsICd2b2lkJywKKyAgICAgICAgICAgICAgICAg
ICAgLy8gYXNzaWdubWVudCBvcGVyYXRvcnMKKyAgICAgICAgICAgICAgICAgICAgJz0nLCAnKz0n
LCAnLT0nLCAnKj0nLCAnLz0nLCAnJT0nLCAnPDw9JywgJz4+PScsICc+Pj49JywKKyAgICAgICAg
ICAgICAgICAgICAgJyY9JywgJ3w9JywgJ149JywgJywnLAorICAgICAgICAgICAgICAgICAgICAv
LyBiaW5hcnkvdW5hcnkgb3BlcmF0b3JzCisgICAgICAgICAgICAgICAgICAgICcrJywgJy0nLCAn
KicsICcvJywgJyUnLCAnKysnLCAnLS0nLCAnPDwnLCAnPj4nLCAnPj4+JywgJyYnLAorICAgICAg
ICAgICAgICAgICAgICAnfCcsICdeJywgJyEnLCAnficsICcmJicsICd8fCcsICc/JywgJzonLCAn
PT09JywgJz09JywgJz49JywKKyAgICAgICAgICAgICAgICAgICAgJzw9JywgJzwnLCAnPicsICch
PScsICchPT0nXTsKKworICAgIFN5bnRheCA9IHsKKyAgICAgICAgQXNzaWdubWVudEV4cHJlc3Np
b246ICdBc3NpZ25tZW50RXhwcmVzc2lvbicsCisgICAgICAgIEFycmF5RXhwcmVzc2lvbjogJ0Fy
cmF5RXhwcmVzc2lvbicsCisgICAgICAgIEJsb2NrU3RhdGVtZW50OiAnQmxvY2tTdGF0ZW1lbnQn
LAorICAgICAgICBCaW5hcnlFeHByZXNzaW9uOiAnQmluYXJ5RXhwcmVzc2lvbicsCisgICAgICAg
IEJyZWFrU3RhdGVtZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgICAgICBDYWxsRXhwcmVzc2lv
bjogJ0NhbGxFeHByZXNzaW9uJywKKyAgICAgICAgQ2F0Y2hDbGF1c2U6ICdDYXRjaENsYXVzZScs
CisgICAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbjogJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbics
CisgICAgICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAorICAgICAg
ICBEb1doaWxlU3RhdGVtZW50OiAnRG9XaGlsZVN0YXRlbWVudCcsCisgICAgICAgIERlYnVnZ2Vy
U3RhdGVtZW50OiAnRGVidWdnZXJTdGF0ZW1lbnQnLAorICAgICAgICBFbXB0eVN0YXRlbWVudDog
J0VtcHR5U3RhdGVtZW50JywKKyAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudDogJ0V4cHJlc3Np
b25TdGF0ZW1lbnQnLAorICAgICAgICBGb3JTdGF0ZW1lbnQ6ICdGb3JTdGF0ZW1lbnQnLAorICAg
ICAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3RhdGVtZW50JywKKyAgICAgICAgRnVuY3Rpb25E
ZWNsYXJhdGlvbjogJ0Z1bmN0aW9uRGVjbGFyYXRpb24nLAorICAgICAgICBGdW5jdGlvbkV4cHJl
c3Npb246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgICAgICBJZGVudGlmaWVyOiAnSWRlbnRp
ZmllcicsCisgICAgICAgIElmU3RhdGVtZW50OiAnSWZTdGF0ZW1lbnQnLAorICAgICAgICBMaXRl
cmFsOiAnTGl0ZXJhbCcsCisgICAgICAgIExhYmVsZWRTdGF0ZW1lbnQ6ICdMYWJlbGVkU3RhdGVt
ZW50JywKKyAgICAgICAgTG9naWNhbEV4cHJlc3Npb246ICdMb2dpY2FsRXhwcmVzc2lvbicsCisg
ICAgICAgIE1lbWJlckV4cHJlc3Npb246ICdNZW1iZXJFeHByZXNzaW9uJywKKyAgICAgICAgTmV3
RXhwcmVzc2lvbjogJ05ld0V4cHJlc3Npb24nLAorICAgICAgICBPYmplY3RFeHByZXNzaW9uOiAn
T2JqZWN0RXhwcmVzc2lvbicsCisgICAgICAgIFByb2dyYW06ICdQcm9ncmFtJywKKyAgICAgICAg
UHJvcGVydHk6ICdQcm9wZXJ0eScsCisgICAgICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0
YXRlbWVudCcsCisgICAgICAgIFNlcXVlbmNlRXhwcmVzc2lvbjogJ1NlcXVlbmNlRXhwcmVzc2lv
bicsCisgICAgICAgIFN3aXRjaFN0YXRlbWVudDogJ1N3aXRjaFN0YXRlbWVudCcsCisgICAgICAg
IFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAgICAgICAgVGhpc0V4cHJlc3Npb246ICdUaGlz
RXhwcmVzc2lvbicsCisgICAgICAgIFRocm93U3RhdGVtZW50OiAnVGhyb3dTdGF0ZW1lbnQnLAor
ICAgICAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgICAgICBVbmFyeUV4cHJl
c3Npb246ICdVbmFyeUV4cHJlc3Npb24nLAorICAgICAgICBVcGRhdGVFeHByZXNzaW9uOiAnVXBk
YXRlRXhwcmVzc2lvbicsCisgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb246ICdWYXJpYWJsZURl
Y2xhcmF0aW9uJywKKyAgICAgICAgVmFyaWFibGVEZWNsYXJhdG9yOiAnVmFyaWFibGVEZWNsYXJh
dG9yJywKKyAgICAgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgICAg
IFdpdGhTdGF0ZW1lbnQ6ICdXaXRoU3RhdGVtZW50JworICAgIH07CisKKyAgICBQcm9wZXJ0eUtp
bmQgPSB7CisgICAgICAgIERhdGE6IDEsCisgICAgICAgIEdldDogMiwKKyAgICAgICAgU2V0OiA0
CisgICAgfTsKKworICAgIC8vIEVycm9yIG1lc3NhZ2VzIHNob3VsZCBiZSBpZGVudGljYWwgdG8g
VjguCisgICAgTWVzc2FnZXMgPSB7CisgICAgICAgIFVuZXhwZWN0ZWRUb2tlbjogICdVbmV4cGVj
dGVkIHRva2VuICUwJywKKyAgICAgICAgVW5leHBlY3RlZE51bWJlcjogICdVbmV4cGVjdGVkIG51
bWJlcicsCisgICAgICAgIFVuZXhwZWN0ZWRTdHJpbmc6ICAnVW5leHBlY3RlZCBzdHJpbmcnLAor
ICAgICAgICBVbmV4cGVjdGVkSWRlbnRpZmllcjogICdVbmV4cGVjdGVkIGlkZW50aWZpZXInLAor
ICAgICAgICBVbmV4cGVjdGVkUmVzZXJ2ZWQ6ICAnVW5leHBlY3RlZCByZXNlcnZlZCB3b3JkJywK
KyAgICAgICAgVW5leHBlY3RlZEVPUzogICdVbmV4cGVjdGVkIGVuZCBvZiBpbnB1dCcsCisgICAg
ICAgIE5ld2xpbmVBZnRlclRocm93OiAgJ0lsbGVnYWwgbmV3bGluZSBhZnRlciB0aHJvdycsCisg
ICAgICAgIEludmFsaWRSZWdFeHA6ICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbicsCisgICAg
ICAgIFVudGVybWluYXRlZFJlZ0V4cDogICdJbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbjogbWlz
c2luZyAvJywKKyAgICAgICAgSW52YWxpZExIU0luQXNzaWdubWVudDogICdJbnZhbGlkIGxlZnQt
aGFuZCBzaWRlIGluIGFzc2lnbm1lbnQnLAorICAgICAgICBJbnZhbGlkTEhTSW5Gb3JJbjogICdJ
bnZhbGlkIGxlZnQtaGFuZCBzaWRlIGluIGZvci1pbicsCisgICAgICAgIE11bHRpcGxlRGVmYXVs
dHNJblN3aXRjaDogJ01vcmUgdGhhbiBvbmUgZGVmYXVsdCBjbGF1c2UgaW4gc3dpdGNoIHN0YXRl
bWVudCcsCisgICAgICAgIE5vQ2F0Y2hPckZpbmFsbHk6ICAnTWlzc2luZyBjYXRjaCBvciBmaW5h
bGx5IGFmdGVyIHRyeScsCisgICAgICAgIFVua25vd25MYWJlbDogJ1VuZGVmaW5lZCBsYWJlbCBc
JyUwXCcnLAorICAgICAgICBSZWRlY2xhcmF0aW9uOiAnJTAgXCclMVwnIGhhcyBhbHJlYWR5IGJl
ZW4gZGVjbGFyZWQnLAorICAgICAgICBJbGxlZ2FsQ29udGludWU6ICdJbGxlZ2FsIGNvbnRpbnVl
IHN0YXRlbWVudCcsCisgICAgICAgIElsbGVnYWxCcmVhazogJ0lsbGVnYWwgYnJlYWsgc3RhdGVt
ZW50JywKKyAgICAgICAgSWxsZWdhbFJldHVybjogJ0lsbGVnYWwgcmV0dXJuIHN0YXRlbWVudCcs
CisgICAgICAgIFN0cmljdE1vZGVXaXRoOiAgJ1N0cmljdCBtb2RlIGNvZGUgbWF5IG5vdCBpbmNs
dWRlIGEgd2l0aCBzdGF0ZW1lbnQnLAorICAgICAgICBTdHJpY3RDYXRjaFZhcmlhYmxlOiAgJ0Nh
dGNoIHZhcmlhYmxlIG1heSBub3QgYmUgZXZhbCBvciBhcmd1bWVudHMgaW4gc3RyaWN0IG1vZGUn
LAorICAgICAgICBTdHJpY3RWYXJOYW1lOiAgJ1ZhcmlhYmxlIG5hbWUgbWF5IG5vdCBiZSBldmFs
IG9yIGFyZ3VtZW50cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFBhcmFtTmFtZTog
ICdQYXJhbWV0ZXIgbmFtZSBldmFsIG9yIGFyZ3VtZW50cyBpcyBub3QgYWxsb3dlZCBpbiBzdHJp
Y3QgbW9kZScsCisgICAgICAgIFN0cmljdFBhcmFtRHVwZTogJ1N0cmljdCBtb2RlIGZ1bmN0aW9u
IG1heSBub3QgaGF2ZSBkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWVzJywKKyAgICAgICAgU3RyaWN0
RnVuY3Rpb25OYW1lOiAgJ0Z1bmN0aW9uIG5hbWUgbWF5IG5vdCBiZSBldmFsIG9yIGFyZ3VtZW50
cyBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdE9jdGFsTGl0ZXJhbDogICdPY3RhbCBs
aXRlcmFscyBhcmUgbm90IGFsbG93ZWQgaW4gc3RyaWN0IG1vZGUuJywKKyAgICAgICAgU3RyaWN0
RGVsZXRlOiAgJ0RlbGV0ZSBvZiBhbiB1bnF1YWxpZmllZCBpZGVudGlmaWVyIGluIHN0cmljdCBt
b2RlLicsCisgICAgICAgIFN0cmljdER1cGxpY2F0ZVByb3BlcnR5OiAgJ0R1cGxpY2F0ZSBkYXRh
IHByb3BlcnR5IGluIG9iamVjdCBsaXRlcmFsIG5vdCBhbGxvd2VkIGluIHN0cmljdCBtb2RlJywK
KyAgICAgICAgQWNjZXNzb3JEYXRhUHJvcGVydHk6ICAnT2JqZWN0IGxpdGVyYWwgbWF5IG5vdCBo
YXZlIGRhdGEgYW5kIGFjY2Vzc29yIHByb3BlcnR5IHdpdGggdGhlIHNhbWUgbmFtZScsCisgICAg
ICAgIEFjY2Vzc29yR2V0U2V0OiAgJ09iamVjdCBsaXRlcmFsIG1heSBub3QgaGF2ZSBtdWx0aXBs
ZSBnZXQvc2V0IGFjY2Vzc29ycyB3aXRoIHRoZSBzYW1lIG5hbWUnLAorICAgICAgICBTdHJpY3RM
SFNBc3NpZ25tZW50OiAgJ0Fzc2lnbm1lbnQgdG8gZXZhbCBvciBhcmd1bWVudHMgaXMgbm90IGFs
bG93ZWQgaW4gc3RyaWN0IG1vZGUnLAorICAgICAgICBTdHJpY3RMSFNQb3N0Zml4OiAgJ1Bvc3Rm
aXggaW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3Bl
cmFuZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdExIU1ByZWZpeDogICdQcmVmaXgg
aW5jcmVtZW50L2RlY3JlbWVudCBtYXkgbm90IGhhdmUgZXZhbCBvciBhcmd1bWVudHMgb3BlcmFu
ZCBpbiBzdHJpY3QgbW9kZScsCisgICAgICAgIFN0cmljdFJlc2VydmVkV29yZDogICdVc2Ugb2Yg
ZnV0dXJlIHJlc2VydmVkIHdvcmQgaW4gc3RyaWN0IG1vZGUnCisgICAgfTsKKworICAgIC8vIFNl
ZSBhbHNvIHRvb2xzL2dlbmVyYXRlLXVuaWNvZGUtcmVnZXgucHkuCisgICAgUmVnZXggPSB7Cisg
ICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclN0YXJ0OiBuZXcgUmVnRXhwKCdbXHhBQVx4QjVceEJB
XHhDMC1ceEQ2XHhEOC1ceEY2XHhGOC1cdTAyQzFcdTAyQzYtXHUwMkQxXHUwMkUwLVx1MDJFNFx1
MDJFQ1x1MDJFRVx1MDM3MC1cdTAzNzRcdTAzNzZcdTAzNzdcdTAzN0EtXHUwMzdEXHUwMzg2XHUw
Mzg4LVx1MDM4QVx1MDM4Q1x1MDM4RS1cdTAzQTFcdTAzQTMtXHUwM0Y1XHUwM0Y3LVx1MDQ4MVx1
MDQ4QS1cdTA1MjdcdTA1MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDVEMC1cdTA1RUFc
dTA1RjAtXHUwNUYyXHUwNjIwLVx1MDY0QVx1MDY2RVx1MDY2Rlx1MDY3MS1cdTA2RDNcdTA2RDVc
dTA2RTVcdTA2RTZcdTA2RUVcdTA2RUZcdTA2RkEtXHUwNkZDXHUwNkZGXHUwNzEwXHUwNzEyLVx1
MDcyRlx1MDc0RC1cdTA3QTVcdTA3QjFcdTA3Q0EtXHUwN0VBXHUwN0Y0XHUwN0Y1XHUwN0ZBXHUw
ODAwLVx1MDgxNVx1MDgxQVx1MDgyNFx1MDgyOFx1MDg0MC1cdTA4NThcdTA4QTBcdTA4QTItXHUw
OEFDXHUwOTA0LVx1MDkzOVx1MDkzRFx1MDk1MFx1MDk1OC1cdTA5NjFcdTA5NzEtXHUwOTc3XHUw
OTc5LVx1MDk3Rlx1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFBLVx1
MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkRcdTA5Q0VcdTA5RENcdTA5RERcdTA5REYtXHUw
OUUxXHUwOUYwXHUwOUYxXHUwQTA1LVx1MEEwQVx1MEEwRlx1MEExMFx1MEExMy1cdTBBMjhcdTBB
MkEtXHUwQTMwXHUwQTMyXHUwQTMzXHUwQTM1XHUwQTM2XHUwQTM4XHUwQTM5XHUwQTU5LVx1MEE1
Q1x1MEE1RVx1MEE3Mi1cdTBBNzRcdTBBODUtXHUwQThEXHUwQThGLVx1MEE5MVx1MEE5My1cdTBB
QThcdTBBQUEtXHUwQUIwXHUwQUIyXHUwQUIzXHUwQUI1LVx1MEFCOVx1MEFCRFx1MEFEMFx1MEFF
MFx1MEFFMVx1MEIwNS1cdTBCMENcdTBCMEZcdTBCMTBcdTBCMTMtXHUwQjI4XHUwQjJBLVx1MEIz
MFx1MEIzMlx1MEIzM1x1MEIzNS1cdTBCMzlcdTBCM0RcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYx
XHUwQjcxXHUwQjgzXHUwQjg1LVx1MEI4QVx1MEI4RS1cdTBCOTBcdTBCOTItXHUwQjk1XHUwQjk5
XHUwQjlBXHUwQjlDXHUwQjlFXHUwQjlGXHUwQkEzXHUwQkE0XHUwQkE4LVx1MEJBQVx1MEJBRS1c
dTBCQjlcdTBCRDBcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMxMFx1MEMxMi1cdTBDMjhcdTBDMkEt
XHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRFx1MEM1OFx1MEM1OVx1MEM2MFx1MEM2MVx1MEM4NS1c
dTBDOENcdTBDOEUtXHUwQzkwXHUwQzkyLVx1MENBOFx1MENBQS1cdTBDQjNcdTBDQjUtXHUwQ0I5
XHUwQ0JEXHUwQ0RFXHUwQ0UwXHUwQ0UxXHUwQ0YxXHUwQ0YyXHUwRDA1LVx1MEQwQ1x1MEQwRS1c
dTBEMTBcdTBEMTItXHUwRDNBXHUwRDNEXHUwRDRFXHUwRDYwXHUwRDYxXHUwRDdBLVx1MEQ3Rlx1
MEQ4NS1cdTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZc
dTBFMDEtXHUwRTMwXHUwRTMyXHUwRTMzXHUwRTQwLVx1MEU0Nlx1MEU4MVx1MEU4Mlx1MEU4NFx1
MEU4N1x1MEU4OFx1MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1
MEVBM1x1MEVBNVx1MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjBcdTBFQjJcdTBFQjNcdTBF
QkRcdTBFQzAtXHUwRUM0XHUwRUM2XHUwRURDLVx1MEVERlx1MEYwMFx1MEY0MC1cdTBGNDdcdTBG
NDktXHUwRjZDXHUwRjg4LVx1MEY4Q1x1MTAwMC1cdTEwMkFcdTEwM0ZcdTEwNTAtXHUxMDU1XHUx
MDVBLVx1MTA1RFx1MTA2MVx1MTA2NVx1MTA2Nlx1MTA2RS1cdTEwNzBcdTEwNzUtXHUxMDgxXHUx
MDhFXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFcdTEwRkMtXHUxMjQ4XHUx
MjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVEXHUxMjYwLVx1MTI4OFx1
MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJCOC1cdTEyQkVcdTEyQzBc
dTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEzMTItXHUxMzE1XHUxMzE4
LVx1MTM1QVx1MTM4MC1cdTEzOEZcdTEzQTAtXHUxM0Y0XHUxNDAxLVx1MTY2Q1x1MTY2Ri1cdTE2
N0ZcdTE2ODEtXHUxNjlBXHUxNkEwLVx1MTZFQVx1MTZFRS1cdTE2RjBcdTE3MDAtXHUxNzBDXHUx
NzBFLVx1MTcxMVx1MTcyMC1cdTE3MzFcdTE3NDAtXHUxNzUxXHUxNzYwLVx1MTc2Q1x1MTc2RS1c
dTE3NzBcdTE3ODAtXHUxN0IzXHUxN0Q3XHUxN0RDXHUxODIwLVx1MTg3N1x1MTg4MC1cdTE4QThc
dTE4QUFcdTE4QjAtXHUxOEY1XHUxOTAwLVx1MTkxQ1x1MTk1MC1cdTE5NkRcdTE5NzAtXHUxOTc0
XHUxOTgwLVx1MTlBQlx1MTlDMS1cdTE5QzdcdTFBMDAtXHUxQTE2XHUxQTIwLVx1MUE1NFx1MUFB
N1x1MUIwNS1cdTFCMzNcdTFCNDUtXHUxQjRCXHUxQjgzLVx1MUJBMFx1MUJBRVx1MUJBRlx1MUJC
QS1cdTFCRTVcdTFDMDAtXHUxQzIzXHUxQzRELVx1MUM0Rlx1MUM1QS1cdTFDN0RcdTFDRTktXHUx
Q0VDXHUxQ0VFLVx1MUNGMVx1MUNGNVx1MUNGNlx1MUQwMC1cdTFEQkZcdTFFMDAtXHUxRjE1XHUx
RjE4LVx1MUYxRFx1MUYyMC1cdTFGNDVcdTFGNDgtXHUxRjREXHUxRjUwLVx1MUY1N1x1MUY1OVx1
MUY1Qlx1MUY1RFx1MUY1Ri1cdTFGN0RcdTFGODAtXHUxRkI0XHUxRkI2LVx1MUZCQ1x1MUZCRVx1
MUZDMi1cdTFGQzRcdTFGQzYtXHUxRkNDXHUxRkQwLVx1MUZEM1x1MUZENi1cdTFGREJcdTFGRTAt
XHUxRkVDXHUxRkYyLVx1MUZGNFx1MUZGNi1cdTFGRkNcdTIwNzFcdTIwN0ZcdTIwOTAtXHUyMDlD
XHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1MjExOS1cdTIxMURcdTIxMjRcdTIxMjZc
dTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5
XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVcdTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNF
NFx1MkNFQi1cdTJDRUVcdTJDRjJcdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3XHUyRDJEXHUyRDMw
LVx1MkQ2N1x1MkQ2Rlx1MkQ4MC1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4LVx1MkRBRVx1MkRC
MC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJEQ0VcdTJERDAtXHUy
REQ2XHUyREQ4LVx1MkRERVx1MkUyRlx1MzAwNS1cdTMwMDdcdTMwMjEtXHUzMDI5XHUzMDMxLVx1
MzAzNVx1MzAzOC1cdTMwM0NcdTMwNDEtXHUzMDk2XHUzMDlELVx1MzA5Rlx1MzBBMS1cdTMwRkFc
dTMwRkMtXHUzMEZGXHUzMTA1LVx1MzEyRFx1MzEzMS1cdTMxOEVcdTMxQTAtXHUzMUJBXHUzMUYw
LVx1MzFGRlx1MzQwMC1cdTREQjVcdTRFMDAtXHU5RkNDXHVBMDAwLVx1QTQ4Q1x1QTREMC1cdUE0
RkRcdUE1MDAtXHVBNjBDXHVBNjEwLVx1QTYxRlx1QTYyQVx1QTYyQlx1QTY0MC1cdUE2NkVcdUE2
N0YtXHVBNjk3XHVBNkEwLVx1QTZFRlx1QTcxNy1cdUE3MUZcdUE3MjItXHVBNzg4XHVBNzhCLVx1
QTc4RVx1QTc5MC1cdUE3OTNcdUE3QTAtXHVBN0FBXHVBN0Y4LVx1QTgwMVx1QTgwMy1cdUE4MDVc
dUE4MDctXHVBODBBXHVBODBDLVx1QTgyMlx1QTg0MC1cdUE4NzNcdUE4ODItXHVBOEIzXHVBOEYy
LVx1QThGN1x1QThGQlx1QTkwQS1cdUE5MjVcdUE5MzAtXHVBOTQ2XHVBOTYwLVx1QTk3Q1x1QTk4
NC1cdUE5QjJcdUE5Q0ZcdUFBMDAtXHVBQTI4XHVBQTQwLVx1QUE0Mlx1QUE0NC1cdUFBNEJcdUFB
NjAtXHVBQTc2XHVBQTdBXHVBQTgwLVx1QUFBRlx1QUFCMVx1QUFCNVx1QUFCNlx1QUFCOS1cdUFB
QkRcdUFBQzBcdUFBQzJcdUFBREItXHVBQUREXHVBQUUwLVx1QUFFQVx1QUFGMi1cdUFBRjRcdUFC
MDEtXHVBQjA2XHVBQjA5LVx1QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1
QUIyRVx1QUJDMC1cdUFCRTJcdUFDMDAtXHVEN0EzXHVEN0IwLVx1RDdDNlx1RDdDQi1cdUQ3RkJc
dUY5MDAtXHVGQTZEXHVGQTcwLVx1RkFEOVx1RkIwMC1cdUZCMDZcdUZCMTMtXHVGQjE3XHVGQjFE
XHVGQjFGLVx1RkIyOFx1RkIyQS1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQx
XHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJCMVx1RkJEMy1cdUZEM0RcdUZENTAtXHVGRDhGXHVGRDky
LVx1RkRDN1x1RkRGMC1cdUZERkJcdUZFNzAtXHVGRTc0XHVGRTc2LVx1RkVGQ1x1RkYyMS1cdUZG
M0FcdUZGNDEtXHVGRjVBXHVGRjY2LVx1RkZCRVx1RkZDMi1cdUZGQzdcdUZGQ0EtXHVGRkNGXHVG
RkQyLVx1RkZEN1x1RkZEQS1cdUZGRENdJyksCisgICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclBh
cnQ6IG5ldyBSZWdFeHAoJ1tceEFBXHhCNVx4QkFceEMwLVx4RDZceEQ4LVx4RjZceEY4LVx1MDJD
MVx1MDJDNi1cdTAyRDFcdTAyRTAtXHUwMkU0XHUwMkVDXHUwMkVFXHUwMzAwLVx1MDM3NFx1MDM3
Nlx1MDM3N1x1MDM3QS1cdTAzN0RcdTAzODZcdTAzODgtXHUwMzhBXHUwMzhDXHUwMzhFLVx1MDNB
MVx1MDNBMy1cdTAzRjVcdTAzRjctXHUwNDgxXHUwNDgzLVx1MDQ4N1x1MDQ4QS1cdTA1MjdcdTA1
MzEtXHUwNTU2XHUwNTU5XHUwNTYxLVx1MDU4N1x1MDU5MS1cdTA1QkRcdTA1QkZcdTA1QzFcdTA1
QzJcdTA1QzRcdTA1QzVcdTA1QzdcdTA1RDAtXHUwNUVBXHUwNUYwLVx1MDVGMlx1MDYxMC1cdTA2
MUFcdTA2MjAtXHUwNjY5XHUwNjZFLVx1MDZEM1x1MDZENS1cdTA2RENcdTA2REYtXHUwNkU4XHUw
NkVBLVx1MDZGQ1x1MDZGRlx1MDcxMC1cdTA3NEFcdTA3NEQtXHUwN0IxXHUwN0MwLVx1MDdGNVx1
MDdGQVx1MDgwMC1cdTA4MkRcdTA4NDAtXHUwODVCXHUwOEEwXHUwOEEyLVx1MDhBQ1x1MDhFNC1c
dTA4RkVcdTA5MDAtXHUwOTYzXHUwOTY2LVx1MDk2Rlx1MDk3MS1cdTA5NzdcdTA5NzktXHUwOTdG
XHUwOTgxLVx1MDk4M1x1MDk4NS1cdTA5OENcdTA5OEZcdTA5OTBcdTA5OTMtXHUwOUE4XHUwOUFB
LVx1MDlCMFx1MDlCMlx1MDlCNi1cdTA5QjlcdTA5QkMtXHUwOUM0XHUwOUM3XHUwOUM4XHUwOUNC
LVx1MDlDRVx1MDlEN1x1MDlEQ1x1MDlERFx1MDlERi1cdTA5RTNcdTA5RTYtXHUwOUYxXHUwQTAx
LVx1MEEwM1x1MEEwNS1cdTBBMEFcdTBBMEZcdTBBMTBcdTBBMTMtXHUwQTI4XHUwQTJBLVx1MEEz
MFx1MEEzMlx1MEEzM1x1MEEzNVx1MEEzNlx1MEEzOFx1MEEzOVx1MEEzQ1x1MEEzRS1cdTBBNDJc
dTBBNDdcdTBBNDhcdTBBNEItXHUwQTREXHUwQTUxXHUwQTU5LVx1MEE1Q1x1MEE1RVx1MEE2Ni1c
dTBBNzVcdTBBODEtXHUwQTgzXHUwQTg1LVx1MEE4RFx1MEE4Ri1cdTBBOTFcdTBBOTMtXHUwQUE4
XHUwQUFBLVx1MEFCMFx1MEFCMlx1MEFCM1x1MEFCNS1cdTBBQjlcdTBBQkMtXHUwQUM1XHUwQUM3
LVx1MEFDOVx1MEFDQi1cdTBBQ0RcdTBBRDBcdTBBRTAtXHUwQUUzXHUwQUU2LVx1MEFFRlx1MEIw
MS1cdTBCMDNcdTBCMDUtXHUwQjBDXHUwQjBGXHUwQjEwXHUwQjEzLVx1MEIyOFx1MEIyQS1cdTBC
MzBcdTBCMzJcdTBCMzNcdTBCMzUtXHUwQjM5XHUwQjNDLVx1MEI0NFx1MEI0N1x1MEI0OFx1MEI0
Qi1cdTBCNERcdTBCNTZcdTBCNTdcdTBCNUNcdTBCNURcdTBCNUYtXHUwQjYzXHUwQjY2LVx1MEI2
Rlx1MEI3MVx1MEI4Mlx1MEI4M1x1MEI4NS1cdTBCOEFcdTBCOEUtXHUwQjkwXHUwQjkyLVx1MEI5
NVx1MEI5OVx1MEI5QVx1MEI5Q1x1MEI5RVx1MEI5Rlx1MEJBM1x1MEJBNFx1MEJBOC1cdTBCQUFc
dTBCQUUtXHUwQkI5XHUwQkJFLVx1MEJDMlx1MEJDNi1cdTBCQzhcdTBCQ0EtXHUwQkNEXHUwQkQw
XHUwQkQ3XHUwQkU2LVx1MEJFRlx1MEMwMS1cdTBDMDNcdTBDMDUtXHUwQzBDXHUwQzBFLVx1MEMx
MFx1MEMxMi1cdTBDMjhcdTBDMkEtXHUwQzMzXHUwQzM1LVx1MEMzOVx1MEMzRC1cdTBDNDRcdTBD
NDYtXHUwQzQ4XHUwQzRBLVx1MEM0RFx1MEM1NVx1MEM1Nlx1MEM1OFx1MEM1OVx1MEM2MC1cdTBD
NjNcdTBDNjYtXHUwQzZGXHUwQzgyXHUwQzgzXHUwQzg1LVx1MEM4Q1x1MEM4RS1cdTBDOTBcdTBD
OTItXHUwQ0E4XHUwQ0FBLVx1MENCM1x1MENCNS1cdTBDQjlcdTBDQkMtXHUwQ0M0XHUwQ0M2LVx1
MENDOFx1MENDQS1cdTBDQ0RcdTBDRDVcdTBDRDZcdTBDREVcdTBDRTAtXHUwQ0UzXHUwQ0U2LVx1
MENFRlx1MENGMVx1MENGMlx1MEQwMlx1MEQwM1x1MEQwNS1cdTBEMENcdTBEMEUtXHUwRDEwXHUw
RDEyLVx1MEQzQVx1MEQzRC1cdTBENDRcdTBENDYtXHUwRDQ4XHUwRDRBLVx1MEQ0RVx1MEQ1N1x1
MEQ2MC1cdTBENjNcdTBENjYtXHUwRDZGXHUwRDdBLVx1MEQ3Rlx1MEQ4Mlx1MEQ4M1x1MEQ4NS1c
dTBEOTZcdTBEOUEtXHUwREIxXHUwREIzLVx1MERCQlx1MERCRFx1MERDMC1cdTBEQzZcdTBEQ0Fc
dTBEQ0YtXHUwREQ0XHUwREQ2XHUwREQ4LVx1MERERlx1MERGMlx1MERGM1x1MEUwMS1cdTBFM0Fc
dTBFNDAtXHUwRTRFXHUwRTUwLVx1MEU1OVx1MEU4MVx1MEU4Mlx1MEU4NFx1MEU4N1x1MEU4OFx1
MEU4QVx1MEU4RFx1MEU5NC1cdTBFOTdcdTBFOTktXHUwRTlGXHUwRUExLVx1MEVBM1x1MEVBNVx1
MEVBN1x1MEVBQVx1MEVBQlx1MEVBRC1cdTBFQjlcdTBFQkItXHUwRUJEXHUwRUMwLVx1MEVDNFx1
MEVDNlx1MEVDOC1cdTBFQ0RcdTBFRDAtXHUwRUQ5XHUwRURDLVx1MEVERlx1MEYwMFx1MEYxOFx1
MEYxOVx1MEYyMC1cdTBGMjlcdTBGMzVcdTBGMzdcdTBGMzlcdTBGM0UtXHUwRjQ3XHUwRjQ5LVx1
MEY2Q1x1MEY3MS1cdTBGODRcdTBGODYtXHUwRjk3XHUwRjk5LVx1MEZCQ1x1MEZDNlx1MTAwMC1c
dTEwNDlcdTEwNTAtXHUxMDlEXHUxMEEwLVx1MTBDNVx1MTBDN1x1MTBDRFx1MTBEMC1cdTEwRkFc
dTEwRkMtXHUxMjQ4XHUxMjRBLVx1MTI0RFx1MTI1MC1cdTEyNTZcdTEyNThcdTEyNUEtXHUxMjVE
XHUxMjYwLVx1MTI4OFx1MTI4QS1cdTEyOERcdTEyOTAtXHUxMkIwXHUxMkIyLVx1MTJCNVx1MTJC
OC1cdTEyQkVcdTEyQzBcdTEyQzItXHUxMkM1XHUxMkM4LVx1MTJENlx1MTJEOC1cdTEzMTBcdTEz
MTItXHUxMzE1XHUxMzE4LVx1MTM1QVx1MTM1RC1cdTEzNUZcdTEzODAtXHUxMzhGXHUxM0EwLVx1
MTNGNFx1MTQwMS1cdTE2NkNcdTE2NkYtXHUxNjdGXHUxNjgxLVx1MTY5QVx1MTZBMC1cdTE2RUFc
dTE2RUUtXHUxNkYwXHUxNzAwLVx1MTcwQ1x1MTcwRS1cdTE3MTRcdTE3MjAtXHUxNzM0XHUxNzQw
LVx1MTc1M1x1MTc2MC1cdTE3NkNcdTE3NkUtXHUxNzcwXHUxNzcyXHUxNzczXHUxNzgwLVx1MTdE
M1x1MTdEN1x1MTdEQ1x1MTdERFx1MTdFMC1cdTE3RTlcdTE4MEItXHUxODBEXHUxODEwLVx1MTgx
OVx1MTgyMC1cdTE4NzdcdTE4ODAtXHUxOEFBXHUxOEIwLVx1MThGNVx1MTkwMC1cdTE5MUNcdTE5
MjAtXHUxOTJCXHUxOTMwLVx1MTkzQlx1MTk0Ni1cdTE5NkRcdTE5NzAtXHUxOTc0XHUxOTgwLVx1
MTlBQlx1MTlCMC1cdTE5QzlcdTE5RDAtXHUxOUQ5XHUxQTAwLVx1MUExQlx1MUEyMC1cdTFBNUVc
dTFBNjAtXHUxQTdDXHUxQTdGLVx1MUE4OVx1MUE5MC1cdTFBOTlcdTFBQTdcdTFCMDAtXHUxQjRC
XHUxQjUwLVx1MUI1OVx1MUI2Qi1cdTFCNzNcdTFCODAtXHUxQkYzXHUxQzAwLVx1MUMzN1x1MUM0
MC1cdTFDNDlcdTFDNEQtXHUxQzdEXHUxQ0QwLVx1MUNEMlx1MUNENC1cdTFDRjZcdTFEMDAtXHUx
REU2XHUxREZDLVx1MUYxNVx1MUYxOC1cdTFGMURcdTFGMjAtXHUxRjQ1XHUxRjQ4LVx1MUY0RFx1
MUY1MC1cdTFGNTdcdTFGNTlcdTFGNUJcdTFGNURcdTFGNUYtXHUxRjdEXHUxRjgwLVx1MUZCNFx1
MUZCNi1cdTFGQkNcdTFGQkVcdTFGQzItXHUxRkM0XHUxRkM2LVx1MUZDQ1x1MUZEMC1cdTFGRDNc
dTFGRDYtXHUxRkRCXHUxRkUwLVx1MUZFQ1x1MUZGMi1cdTFGRjRcdTFGRjYtXHUxRkZDXHUyMDBD
XHUyMDBEXHUyMDNGXHUyMDQwXHUyMDU0XHUyMDcxXHUyMDdGXHUyMDkwLVx1MjA5Q1x1MjBEMC1c
dTIwRENcdTIwRTFcdTIwRTUtXHUyMEYwXHUyMTAyXHUyMTA3XHUyMTBBLVx1MjExM1x1MjExNVx1
MjExOS1cdTIxMURcdTIxMjRcdTIxMjZcdTIxMjhcdTIxMkEtXHUyMTJEXHUyMTJGLVx1MjEzOVx1
MjEzQy1cdTIxM0ZcdTIxNDUtXHUyMTQ5XHUyMTRFXHUyMTYwLVx1MjE4OFx1MkMwMC1cdTJDMkVc
dTJDMzAtXHUyQzVFXHUyQzYwLVx1MkNFNFx1MkNFQi1cdTJDRjNcdTJEMDAtXHUyRDI1XHUyRDI3
XHUyRDJEXHUyRDMwLVx1MkQ2N1x1MkQ2Rlx1MkQ3Ri1cdTJEOTZcdTJEQTAtXHUyREE2XHUyREE4
LVx1MkRBRVx1MkRCMC1cdTJEQjZcdTJEQjgtXHUyREJFXHUyREMwLVx1MkRDNlx1MkRDOC1cdTJE
Q0VcdTJERDAtXHUyREQ2XHUyREQ4LVx1MkRERVx1MkRFMC1cdTJERkZcdTJFMkZcdTMwMDUtXHUz
MDA3XHUzMDIxLVx1MzAyRlx1MzAzMS1cdTMwMzVcdTMwMzgtXHUzMDNDXHUzMDQxLVx1MzA5Nlx1
MzA5OVx1MzA5QVx1MzA5RC1cdTMwOUZcdTMwQTEtXHUzMEZBXHUzMEZDLVx1MzBGRlx1MzEwNS1c
dTMxMkRcdTMxMzEtXHUzMThFXHUzMUEwLVx1MzFCQVx1MzFGMC1cdTMxRkZcdTM0MDAtXHU0REI1
XHU0RTAwLVx1OUZDQ1x1QTAwMC1cdUE0OENcdUE0RDAtXHVBNEZEXHVBNTAwLVx1QTYwQ1x1QTYx
MC1cdUE2MkJcdUE2NDAtXHVBNjZGXHVBNjc0LVx1QTY3RFx1QTY3Ri1cdUE2OTdcdUE2OUYtXHVB
NkYxXHVBNzE3LVx1QTcxRlx1QTcyMi1cdUE3ODhcdUE3OEItXHVBNzhFXHVBNzkwLVx1QTc5M1x1
QTdBMC1cdUE3QUFcdUE3RjgtXHVBODI3XHVBODQwLVx1QTg3M1x1QTg4MC1cdUE4QzRcdUE4RDAt
XHVBOEQ5XHVBOEUwLVx1QThGN1x1QThGQlx1QTkwMC1cdUE5MkRcdUE5MzAtXHVBOTUzXHVBOTYw
LVx1QTk3Q1x1QTk4MC1cdUE5QzBcdUE5Q0YtXHVBOUQ5XHVBQTAwLVx1QUEzNlx1QUE0MC1cdUFB
NERcdUFBNTAtXHVBQTU5XHVBQTYwLVx1QUE3Nlx1QUE3QVx1QUE3Qlx1QUE4MC1cdUFBQzJcdUFB
REItXHVBQUREXHVBQUUwLVx1QUFFRlx1QUFGMi1cdUFBRjZcdUFCMDEtXHVBQjA2XHVBQjA5LVx1
QUIwRVx1QUIxMS1cdUFCMTZcdUFCMjAtXHVBQjI2XHVBQjI4LVx1QUIyRVx1QUJDMC1cdUFCRUFc
dUFCRUNcdUFCRURcdUFCRjAtXHVBQkY5XHVBQzAwLVx1RDdBM1x1RDdCMC1cdUQ3QzZcdUQ3Q0It
XHVEN0ZCXHVGOTAwLVx1RkE2RFx1RkE3MC1cdUZBRDlcdUZCMDAtXHVGQjA2XHVGQjEzLVx1RkIx
N1x1RkIxRC1cdUZCMjhcdUZCMkEtXHVGQjM2XHVGQjM4LVx1RkIzQ1x1RkIzRVx1RkI0MFx1RkI0
MVx1RkI0M1x1RkI0NFx1RkI0Ni1cdUZCQjFcdUZCRDMtXHVGRDNEXHVGRDUwLVx1RkQ4Rlx1RkQ5
Mi1cdUZEQzdcdUZERjAtXHVGREZCXHVGRTAwLVx1RkUwRlx1RkUyMC1cdUZFMjZcdUZFMzNcdUZF
MzRcdUZFNEQtXHVGRTRGXHVGRTcwLVx1RkU3NFx1RkU3Ni1cdUZFRkNcdUZGMTAtXHVGRjE5XHVG
RjIxLVx1RkYzQVx1RkYzRlx1RkY0MS1cdUZGNUFcdUZGNjYtXHVGRkJFXHVGRkMyLVx1RkZDN1x1
RkZDQS1cdUZGQ0ZcdUZGRDItXHVGRkQ3XHVGRkRBLVx1RkZEQ10nKQorICAgIH07CisKKyAgICAv
LyBFbnN1cmUgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBvdGhlcndpc2UgdGhyb3cgYW4gZXJyb3Iu
CisgICAgLy8gVGhpcyBpcyBvbmx5IHRvIGhhdmUgYSBiZXR0ZXIgY29udHJhY3Qgc2VtYW50aWMs
IGkuZS4gYW5vdGhlciBzYWZldHkgbmV0CisgICAgLy8gdG8gY2F0Y2ggYSBsb2dpYyBlcnJvci4g
VGhlIGNvbmRpdGlvbiBzaGFsbCBiZSBmdWxmaWxsZWQgaW4gbm9ybWFsIGNhc2UuCisgICAgLy8g
RG8gTk9UIHVzZSB0aGlzIHRvIGVuZm9yY2UgYSBjZXJ0YWluIGNvbmRpdGlvbiBvbiBhbnkgdXNl
ciBpbnB1dC4KKworICAgIGZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIG1lc3NhZ2UpIHsKKyAg
ICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovCisgICAgICAgIGlmICghY29uZGl0aW9uKSB7
CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FTU0VSVDogJyArIG1lc3NhZ2UpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNEZWNpbWFsRGlnaXQoY2gpIHsKKyAgICAg
ICAgcmV0dXJuIChjaCA+PSA0OCAmJiBjaCA8PSA1Nyk7ICAgLy8gMC4uOQorICAgIH0KKworICAg
IGZ1bmN0aW9uIGlzSGV4RGlnaXQoY2gpIHsKKyAgICAgICAgcmV0dXJuICcwMTIzNDU2Nzg5YWJj
ZGVmQUJDREVGJy5pbmRleE9mKGNoKSA+PSAwOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzT2N0
YWxEaWdpdChjaCkgeworICAgICAgICByZXR1cm4gJzAxMjM0NTY3Jy5pbmRleE9mKGNoKSA+PSAw
OworICAgIH0KKworCisgICAgLy8gNy4yIFdoaXRlIFNwYWNlCisKKyAgICBmdW5jdGlvbiBpc1do
aXRlU3BhY2UoY2gpIHsKKyAgICAgICAgcmV0dXJuIChjaCA9PT0gMHgyMCkgfHwgKGNoID09PSAw
eDA5KSB8fCAoY2ggPT09IDB4MEIpIHx8IChjaCA9PT0gMHgwQykgfHwgKGNoID09PSAweEEwKSB8
fAorICAgICAgICAgICAgKGNoID49IDB4MTY4MCAmJiBbMHgxNjgwLCAweDE4MEUsIDB4MjAwMCwg
MHgyMDAxLCAweDIwMDIsIDB4MjAwMywgMHgyMDA0LCAweDIwMDUsIDB4MjAwNiwgMHgyMDA3LCAw
eDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMkYsIDB4MjA1RiwgMHgzMDAwLCAweEZFRkZdLmlu
ZGV4T2YoY2gpID49IDApOworICAgIH0KKworICAgIC8vIDcuMyBMaW5lIFRlcm1pbmF0b3JzCisK
KyAgICBmdW5jdGlvbiBpc0xpbmVUZXJtaW5hdG9yKGNoKSB7CisgICAgICAgIHJldHVybiAoY2gg
PT09IDB4MEEpIHx8IChjaCA9PT0gMHgwRCkgfHwgKGNoID09PSAweDIwMjgpIHx8IChjaCA9PT0g
MHgyMDI5KTsKKyAgICB9CisKKyAgICAvLyA3LjYgSWRlbnRpZmllciBOYW1lcyBhbmQgSWRlbnRp
ZmllcnMKKworICAgIGZ1bmN0aW9uIGlzSWRlbnRpZmllclN0YXJ0KGNoKSB7CisgICAgICAgIHJl
dHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRvbGxhcikgYW5k
IF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDVBKSB8
fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNoIDw9IDB4N0Ep
IHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID09PSAweDVDKSB8fCAgICAgICAg
ICAgICAgICAgICAgICAvLyBcIChiYWNrc2xhc2gpCisgICAgICAgICAgICAoKGNoID49IDB4ODAp
ICYmIFJlZ2V4Lk5vbkFzY2lpSWRlbnRpZmllclN0YXJ0LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29k
ZShjaCkpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJQYXJ0KGNoKSB7Cisg
ICAgICAgIHJldHVybiAoY2ggPT09IDB4MjQpIHx8IChjaCA9PT0gMHg1RikgfHwgIC8vICQgKGRv
bGxhcikgYW5kIF8gKHVuZGVyc2NvcmUpCisgICAgICAgICAgICAoY2ggPj0gMHg0MSAmJiBjaCA8
PSAweDVBKSB8fCAgICAgICAgIC8vIEEuLloKKyAgICAgICAgICAgIChjaCA+PSAweDYxICYmIGNo
IDw9IDB4N0EpIHx8ICAgICAgICAgLy8gYS4uegorICAgICAgICAgICAgKGNoID49IDB4MzAgJiYg
Y2ggPD0gMHgzOSkgfHwgICAgICAgICAvLyAwLi45CisgICAgICAgICAgICAoY2ggPT09IDB4NUMp
IHx8ICAgICAgICAgICAgICAgICAgICAgIC8vIFwgKGJhY2tzbGFzaCkKKyAgICAgICAgICAgICgo
Y2ggPj0gMHg4MCkgJiYgUmVnZXguTm9uQXNjaWlJZGVudGlmaWVyUGFydC50ZXN0KFN0cmluZy5m
cm9tQ2hhckNvZGUoY2gpKSk7CisgICAgfQorCisgICAgLy8gNy42LjEuMiBGdXR1cmUgUmVzZXJ2
ZWQgV29yZHMKKworICAgIGZ1bmN0aW9uIGlzRnV0dXJlUmVzZXJ2ZWRXb3JkKGlkKSB7CisgICAg
ICAgIHN3aXRjaCAoaWQpIHsKKyAgICAgICAgY2FzZSAnY2xhc3MnOgorICAgICAgICBjYXNlICdl
bnVtJzoKKyAgICAgICAgY2FzZSAnZXhwb3J0JzoKKyAgICAgICAgY2FzZSAnZXh0ZW5kcyc6Cisg
ICAgICAgIGNhc2UgJ2ltcG9ydCc6CisgICAgICAgIGNhc2UgJ3N1cGVyJzoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gaXNTdHJpY3RNb2RlUmVzZXJ2ZWRX
b3JkKGlkKSB7CisgICAgICAgIHN3aXRjaCAoaWQpIHsKKyAgICAgICAgY2FzZSAnaW1wbGVtZW50
cyc6CisgICAgICAgIGNhc2UgJ2ludGVyZmFjZSc6CisgICAgICAgIGNhc2UgJ3BhY2thZ2UnOgor
ICAgICAgICBjYXNlICdwcml2YXRlJzoKKyAgICAgICAgY2FzZSAncHJvdGVjdGVkJzoKKyAgICAg
ICAgY2FzZSAncHVibGljJzoKKyAgICAgICAgY2FzZSAnc3RhdGljJzoKKyAgICAgICAgY2FzZSAn
eWllbGQnOgorICAgICAgICBjYXNlICdsZXQnOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBpc1Jlc3RyaWN0ZWRXb3JkKGlkKSB7CisgICAgICAgIHJldHVy
biBpZCA9PT0gJ2V2YWwnIHx8IGlkID09PSAnYXJndW1lbnRzJzsKKyAgICB9CisKKyAgICAvLyA3
LjYuMS4xIEtleXdvcmRzCisKKyAgICBmdW5jdGlvbiBpc0tleXdvcmQoaWQpIHsKKyAgICAgICAg
aWYgKHN0cmljdCAmJiBpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQoaWQpKSB7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vICdjb25zdCcgaXMgc3BlY2lh
bGl6ZWQgYXMgS2V5d29yZCBpbiBWOC4KKyAgICAgICAgLy8gJ3lpZWxkJyBhbmQgJ2xldCcgYXJl
IGZvciBjb21wYXRpYmxpdHkgd2l0aCBTcGlkZXJNb25rZXkgYW5kIEVTLm5leHQuCisgICAgICAg
IC8vIFNvbWUgb3RoZXJzIGFyZSBmcm9tIGZ1dHVyZSByZXNlcnZlZCB3b3Jkcy4KKworICAgICAg
ICBzd2l0Y2ggKGlkLmxlbmd0aCkgeworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAnaWYnKSB8fCAoaWQgPT09ICdpbicpIHx8IChpZCA9PT0gJ2RvJyk7CisgICAg
ICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICd2YXInKSB8fCAoaWQgPT09
ICdmb3InKSB8fCAoaWQgPT09ICduZXcnKSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3Ry
eScpIHx8IChpZCA9PT0gJ2xldCcpOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1
cm4gKGlkID09PSAndGhpcycpIHx8IChpZCA9PT0gJ2Vsc2UnKSB8fCAoaWQgPT09ICdjYXNlJykg
fHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICd2b2lkJykgfHwgKGlkID09PSAnd2l0aCcpIHx8
IChpZCA9PT0gJ2VudW0nKTsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgcmV0dXJuIChp
ZCA9PT0gJ3doaWxlJykgfHwgKGlkID09PSAnYnJlYWsnKSB8fCAoaWQgPT09ICdjYXRjaCcpIHx8
CisgICAgICAgICAgICAgICAgKGlkID09PSAndGhyb3cnKSB8fCAoaWQgPT09ICdjb25zdCcpIHx8
IChpZCA9PT0gJ3lpZWxkJykgfHwKKyAgICAgICAgICAgICAgICAoaWQgPT09ICdjbGFzcycpIHx8
IChpZCA9PT0gJ3N1cGVyJyk7CisgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgIHJldHVybiAo
aWQgPT09ICdyZXR1cm4nKSB8fCAoaWQgPT09ICd0eXBlb2YnKSB8fCAoaWQgPT09ICdkZWxldGUn
KSB8fAorICAgICAgICAgICAgICAgIChpZCA9PT0gJ3N3aXRjaCcpIHx8IChpZCA9PT0gJ2V4cG9y
dCcpIHx8IChpZCA9PT0gJ2ltcG9ydCcpOworICAgICAgICBjYXNlIDc6CisgICAgICAgICAgICBy
ZXR1cm4gKGlkID09PSAnZGVmYXVsdCcpIHx8IChpZCA9PT0gJ2ZpbmFsbHknKSB8fCAoaWQgPT09
ICdleHRlbmRzJyk7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09
ICdmdW5jdGlvbicpIHx8IChpZCA9PT0gJ2NvbnRpbnVlJykgfHwgKGlkID09PSAnZGVidWdnZXIn
KTsKKyAgICAgICAgY2FzZSAxMDoKKyAgICAgICAgICAgIHJldHVybiAoaWQgPT09ICdpbnN0YW5j
ZW9mJyk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyA3LjQgQ29tbWVudHMKKworICAgIGZ1bmN0aW9uIGFkZENv
bW1lbnQodHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxvYykgeworICAgICAgICB2YXIgY29tbWVu
dCwgYXR0YWNoZXI7CisKKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdGFydCA9PT0gJ251bWJlcics
ICdDb21tZW50IG11c3QgaGF2ZSB2YWxpZCBwb3NpdGlvbicpOworCisgICAgICAgIC8vIEJlY2F1
c2UgdGhlIHdheSB0aGUgYWN0dWFsIHRva2VuIGlzIHNjYW5uZWQsIG9mdGVuIHRoZSBjb21tZW50
cworICAgICAgICAvLyAoaWYgYW55KSBhcmUgc2tpcHBlZCB0d2ljZSBkdXJpbmcgdGhlIGxleGlj
YWwgYW5hbHlzaXMuCisgICAgICAgIC8vIFRodXMsIHdlIG5lZWQgdG8gc2tpcCBhZGRpbmcgYSBj
b21tZW50IGlmIHRoZSBjb21tZW50IGFycmF5IGFscmVhZHkKKyAgICAgICAgLy8gaGFuZGxlZCBp
dC4KKyAgICAgICAgaWYgKHN0YXRlLmxhc3RDb21tZW50U3RhcnQgPj0gc3RhcnQpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzdGF0ZS5sYXN0Q29tbWVudFN0YXJ0
ID0gc3RhcnQ7CisKKyAgICAgICAgY29tbWVudCA9IHsKKyAgICAgICAgICAgIHR5cGU6IHR5cGUs
CisgICAgICAgICAgICB2YWx1ZTogdmFsdWUKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKGV4dHJh
LnJhbmdlKSB7CisgICAgICAgICAgICBjb21tZW50LnJhbmdlID0gW3N0YXJ0LCBlbmRdOworICAg
ICAgICB9CisgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAgICAgICAgIGNvbW1lbnQubG9j
ID0gbG9jOworICAgICAgICB9CisgICAgICAgIGV4dHJhLmNvbW1lbnRzLnB1c2goY29tbWVudCk7
CisgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAgICBleHRyYS5s
ZWFkaW5nQ29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgICAgIGV4dHJhLnRyYWlsaW5n
Q29tbWVudHMucHVzaChjb21tZW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9u
IHNraXBTaW5nbGVMaW5lQ29tbWVudChvZmZzZXQpIHsKKyAgICAgICAgdmFyIHN0YXJ0LCBsb2Ms
IGNoLCBjb21tZW50OworCisgICAgICAgIHN0YXJ0ID0gaW5kZXggLSBvZmZzZXQ7CisgICAgICAg
IGxvYyA9IHsKKyAgICAgICAgICAgIHN0YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gb2Zm
c2V0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwg
bGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKyAg
ICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICBpZiAoaXNMaW5lVGVybWluYXRvcihjaCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWVudCA9IHNvdXJjZS5zbGljZShzdGFydCArIG9mZnNldCwgaW5kZXggLSAxKTsK
KyAgICAgICAgICAgICAgICAgICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4
IC0gbGluZVN0YXJ0IC0gMQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAg
ICAgICBhZGRDb21tZW50KCdMaW5lJywgY29tbWVudCwgc3RhcnQsIGluZGV4IC0gMSwgbG9jKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAxMyAmJiBzb3Vy
Y2UuY2hhckNvZGVBdChpbmRleCkgPT09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICsraW5k
ZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAg
ICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXh0cmEuY29tbWVudHMp
IHsKKyAgICAgICAgICAgIGNvbW1lbnQgPSBzb3VyY2Uuc2xpY2Uoc3RhcnQgKyBvZmZzZXQsIGlu
ZGV4KTsKKyAgICAgICAgICAgIGxvYy5lbmQgPSB7CisgICAgICAgICAgICAgICAgbGluZTogbGlu
ZU51bWJlciwKKyAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAg
ICAgICAgICB9OworICAgICAgICAgICAgYWRkQ29tbWVudCgnTGluZScsIGNvbW1lbnQsIHN0YXJ0
LCBpbmRleCwgbG9jKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHNraXBNdWx0
aUxpbmVDb21tZW50KCkgeworICAgICAgICB2YXIgc3RhcnQsIGxvYywgY2gsIGNvbW1lbnQ7CisK
KyAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRzKSB7CisgICAgICAgICAgICBzdGFydCA9IGluZGV4
IC0gMjsKKyAgICAgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgICAgICBzdGFydDogeworICAg
ICAgICAgICAgICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICBj
b2x1bW46IGluZGV4IC0gbGluZVN0YXJ0IC0gMgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAg
ICAgICAgICAgIGNoID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYg
KGlzTGluZVRlcm1pbmF0b3IoY2gpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBE
ICYmIHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMSkgPT09IDB4MEEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKyts
aW5lTnVtYmVyOworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgbGlu
ZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewor
ICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9r
ZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PT0gMHgyQSkgeworICAgICAgICAgICAgICAgIC8vIEJsb2NrIGNvbW1lbnQgZW5kcyB3
aXRoICcqLycuCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsg
MSkgPT09IDB4MkYpIHsKKyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhLmNvbW1lbnRz
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gc291cmNlLnNsaWNlKHN0YXJ0
ICsgMiwgaW5kZXggLSAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYy5lbmQgPSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICAg
ICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29tbWVudCgnQmxvY2sn
LCBjb21tZW50LCBzdGFydCwgaW5kZXgsIGxvYyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICArK2lu
ZGV4OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhyb3dFcnJvcih7fSwg
TWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIHNraXBDb21tZW50KCkgeworICAgICAgICB2YXIgY2gsIHN0YXJ0OworCisgICAgICAgIHN0
YXJ0ID0gKGluZGV4ID09PSAwKTsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Cisg
ICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsKKworICAgICAgICAgICAg
aWYgKGlzV2hpdGVTcGFjZShjaCkpIHsKKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoKSkgeworICAgICAgICAgICAgICAg
ICsraW5kZXg7CisgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBEICYmIHNvdXJjZS5jaGFy
Q29kZUF0KGluZGV4KSA9PT0gMHgwQSkgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7CisgICAgICAg
ICAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgc3RhcnQgPSB0cnVl
OworICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRikgeyAvLyBVKzAwMkYgaXMgJy8n
CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOworICAg
ICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRikgeworICAgICAgICAgICAgICAgICAgICArK2lu
ZGV4OworICAgICAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICBz
a2lwU2luZ2xlTGluZUNvbW1lbnQoMik7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDJBKSB7ICAvLyBVKzAwMkEg
aXMgJyonCisgICAgICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHNraXBNdWx0aUxpbmVDb21tZW50KCk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydCAmJiBjaCA9PT0gMHgy
RCkgeyAvLyBVKzAwMkQgaXMgJy0nCisgICAgICAgICAgICAgICAgLy8gVSswMDNFIGlzICc+Jwor
ICAgICAgICAgICAgICAgIGlmICgoc291cmNlLmNoYXJDb2RlQXQoaW5kZXggKyAxKSA9PT0gMHgy
RCkgJiYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4ICsgMikgPT09IDB4M0UpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vICctLT4nIGlzIGEgc2luZ2xlLWxpbmUgY29tbWVudAorICAgICAgICAg
ICAgICAgICAgICBpbmRleCArPSAzOworICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGlu
ZUNvbW1lbnQoMyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9
PT0gMHgzQykgeyAvLyBVKzAwM0MgaXMgJzwnCisgICAgICAgICAgICAgICAgaWYgKHNvdXJjZS5z
bGljZShpbmRleCArIDEsIGluZGV4ICsgNCkgPT09ICchLS0nKSB7CisgICAgICAgICAgICAgICAg
ICAgICsraW5kZXg7IC8vIGA8YAorICAgICAgICAgICAgICAgICAgICArK2luZGV4OyAvLyBgIWAK
KyAgICAgICAgICAgICAgICAgICAgKytpbmRleDsgLy8gYC1gCisgICAgICAgICAgICAgICAgICAg
ICsraW5kZXg7IC8vIGAtYAorICAgICAgICAgICAgICAgICAgICBza2lwU2luZ2xlTGluZUNvbW1l
bnQoNCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0
aW9uIHNjYW5IZXhFc2NhcGUocHJlZml4KSB7CisgICAgICAgIHZhciBpLCBsZW4sIGNoLCBjb2Rl
ID0gMDsKKworICAgICAgICBsZW4gPSAocHJlZml4ID09PSAndScpID8gNCA6IDI7CisgICAgICAg
IGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgaWYgKGluZGV4IDwgbGVu
Z3RoICYmIGlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBjaCA9
IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgICAgICBjb2RlID0gY29kZSAqIDE2ICsgJzAx
MjM0NTY3ODlhYmNkZWYnLmluZGV4T2YoY2gudG9Mb3dlckNhc2UoKSk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBnZXRFc2NhcGVkSWRlbnRpZmllcigpIHsKKyAgICAgICAgdmFyIGNoLCBp
ZDsKKworICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KyspOworICAgICAgICBp
ZCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpOworCisgICAgICAgIC8vICdcdScgKFUrMDA1Qywg
VSswMDc1KSBkZW5vdGVzIGFuIGVzY2FwZWQgY2hhcmFjdGVyLgorICAgICAgICBpZiAoY2ggPT09
IDB4NUMpIHsKKyAgICAgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4
NzUpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgY2ggPSBzY2FuSGV4RXNjYXBlKCd1Jyk7CisgICAgICAgICAgICBpZiAoIWNo
IHx8IGNoID09PSAnXFwnIHx8ICFpc0lkZW50aWZpZXJTdGFydChjaC5jaGFyQ29kZUF0KDApKSkg
eworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tl
biwgJ0lMTEVHQUwnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlkID0gY2g7CisgICAg
ICAgIH0KKworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGNo
ID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpOworICAgICAgICAgICAgaWYgKCFpc0lkZW50aWZp
ZXJQYXJ0KGNoKSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlkICs9IFN0cmluZy5mcm9tQ2hhckNvZGUo
Y2gpOworCisgICAgICAgICAgICAvLyAnXHUnIChVKzAwNUMsIFUrMDA3NSkgZGVub3RlcyBhbiBl
c2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAg
ICAgICAgICAgIGlkID0gaWQuc3Vic3RyKDAsIGlkLmxlbmd0aCAtIDEpOworICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgIT09IDB4NzUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdB
TCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICArK2luZGV4OworICAgICAg
ICAgICAgICAgIGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgIGlmICgh
Y2ggfHwgY2ggPT09ICdcXCcgfHwgIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNvZGVBdCgwKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3Rl
ZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZCArPSBjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBpZDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgc3Rh
cnQsIGNoOworCisgICAgICAgIHN0YXJ0ID0gaW5kZXgrKzsKKyAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KTsK
KyAgICAgICAgICAgIGlmIChjaCA9PT0gMHg1QykgeworICAgICAgICAgICAgICAgIC8vIEJsYWNr
c2xhc2ggKFUrMDA1QykgbWFya3MgVW5pY29kZSBlc2NhcGUgc2VxdWVuY2UuCisgICAgICAgICAg
ICAgICAgaW5kZXggPSBzdGFydDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0RXNjYXBlZElk
ZW50aWZpZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJQ
YXJ0KGNoKSkgeworICAgICAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZShzdGFydCwgaW5kZXgpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHNjYW5JZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgc3RhcnQsIGlkLCB0eXBlOwor
CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisKKyAgICAgICAgLy8gQmFja3NsYXNoIChVKzAwNUMp
IHN0YXJ0cyBhbiBlc2NhcGVkIGNoYXJhY3Rlci4KKyAgICAgICAgaWQgPSAoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpID09PSAweDVDKSA/IGdldEVzY2FwZWRJZGVudGlmaWVyKCkgOiBnZXRJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgLy8gVGhlcmUgaXMgbm8ga2V5d29yZCBvciBsaXRlcmFsIHdp
dGggb25seSBvbmUgY2hhcmFjdGVyLgorICAgICAgICAvLyBUaHVzLCBpdCBtdXN0IGJlIGFuIGlk
ZW50aWZpZXIuCisgICAgICAgIGlmIChpZC5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHR5
cGUgPSBUb2tlbi5JZGVudGlmaWVyOworICAgICAgICB9IGVsc2UgaWYgKGlzS2V5d29yZChpZCkp
IHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5LZXl3b3JkOworICAgICAgICB9IGVsc2UgaWYg
KGlkID09PSAnbnVsbCcpIHsKKyAgICAgICAgICAgIHR5cGUgPSBUb2tlbi5OdWxsTGl0ZXJhbDsK
KyAgICAgICAgfSBlbHNlIGlmIChpZCA9PT0gJ3RydWUnIHx8IGlkID09PSAnZmFsc2UnKSB7Cisg
ICAgICAgICAgICB0eXBlID0gVG9rZW4uQm9vbGVhbkxpdGVyYWw7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0eXBlID0gVG9rZW4uSWRlbnRpZmllcjsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgdmFsdWU6
IGlkLAorICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgIGxp
bmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAg
ICAgZW5kOiBpbmRleAorICAgICAgICB9OworICAgIH0KKworCisgICAgLy8gNy43IFB1bmN0dWF0
b3JzCisKKyAgICBmdW5jdGlvbiBzY2FuUHVuY3R1YXRvcigpIHsKKyAgICAgICAgdmFyIHN0YXJ0
ID0gaW5kZXgsCisgICAgICAgICAgICBjb2RlID0gc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpLAor
ICAgICAgICAgICAgY29kZTIsCisgICAgICAgICAgICBjaDEgPSBzb3VyY2VbaW5kZXhdLAorICAg
ICAgICAgICAgY2gyLAorICAgICAgICAgICAgY2gzLAorICAgICAgICAgICAgY2g0OworCisgICAg
ICAgIHN3aXRjaCAoY29kZSkgeworCisgICAgICAgIC8vIENoZWNrIGZvciBtb3N0IGNvbW1vbiBz
aW5nbGUtY2hhcmFjdGVyIHB1bmN0dWF0b3JzLgorICAgICAgICBjYXNlIDB4MkU6ICAvLyAuIGRv
dAorICAgICAgICBjYXNlIDB4Mjg6ICAvLyAoIG9wZW4gYnJhY2tldAorICAgICAgICBjYXNlIDB4
Mjk6ICAvLyApIGNsb3NlIGJyYWNrZXQKKyAgICAgICAgY2FzZSAweDNCOiAgLy8gOyBzZW1pY29s
b24KKyAgICAgICAgY2FzZSAweDJDOiAgLy8gLCBjb21tYQorICAgICAgICBjYXNlIDB4N0I6ICAv
LyB7IG9wZW4gY3VybHkgYnJhY2UKKyAgICAgICAgY2FzZSAweDdEOiAgLy8gfSBjbG9zZSBjdXJs
eSBicmFjZQorICAgICAgICBjYXNlIDB4NUI6ICAvLyBbCisgICAgICAgIGNhc2UgMHg1RDogIC8v
IF0KKyAgICAgICAgY2FzZSAweDNBOiAgLy8gOgorICAgICAgICBjYXNlIDB4M0Y6ICAvLyA/Cisg
ICAgICAgIGNhc2UgMHg3RTogIC8vIH4KKyAgICAgICAgICAgICsraW5kZXg7CisgICAgICAgICAg
ICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gMHgy
OCkgeworICAgICAgICAgICAgICAgICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IGV4dHJhLnRv
a2Vucy5sZW5ndGg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDdCKSB7
CisgICAgICAgICAgICAgICAgICAgIGV4dHJhLm9wZW5DdXJseVRva2VuID0gZXh0cmEudG9rZW5z
Lmxlbmd0aDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSksCisgICAgICAgICAgICAg
ICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAgICAgICAgICAgICBsaW5lU3RhcnQ6IGxp
bmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICAgICAg
ZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgY29kZTIgPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCArIDEpOworCisgICAgICAgICAgICAv
LyAnPScgKFUrMDAzRCkgbWFya3MgYW4gYXNzaWdubWVudCBvciBjb21wYXJpc29uIG9wZXJhdG9y
LgorICAgICAgICAgICAgaWYgKGNvZGUyID09PSAweDNEKSB7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChjb2RlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAweDJCOiAgLy8gKworICAgICAgICAg
ICAgICAgIGNhc2UgMHgyRDogIC8vIC0KKyAgICAgICAgICAgICAgICBjYXNlIDB4MkY6ICAvLyAv
CisgICAgICAgICAgICAgICAgY2FzZSAweDNDOiAgLy8gPAorICAgICAgICAgICAgICAgIGNhc2Ug
MHgzRTogIC8vID4KKyAgICAgICAgICAgICAgICBjYXNlIDB4NUU6ICAvLyBeCisgICAgICAgICAg
ICAgICAgY2FzZSAweDdDOiAgLy8gfAorICAgICAgICAgICAgICAgIGNhc2UgMHgyNTogIC8vICUK
KyAgICAgICAgICAgICAgICBjYXNlIDB4MjY6ICAvLyAmCisgICAgICAgICAgICAgICAgY2FzZSAw
eDJBOiAgLy8gKgorICAgICAgICAgICAgICAgICAgICBpbmRleCArPSAyOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVu
Y3R1YXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBTdHJpbmcuZnJvbUNoYXJD
b2RlKGNvZGUpICsgU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlMiksCisgICAgICAgICAgICAgICAg
ICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
bGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgICAgICBjYXNlIDB4MjE6IC8vICEKKyAgICAgICAgICAgICAg
ICBjYXNlIDB4M0Q6IC8vID0KKyAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMjsKKworICAg
ICAgICAgICAgICAgICAgICAvLyAhPT0gYW5kID09PQorICAgICAgICAgICAgICAgICAgICBpZiAo
c291cmNlLmNoYXJDb2RlQXQoaW5kZXgpID09PSAweDNEKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICArK2luZGV4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9y
LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNvdXJjZS5zbGljZShzdGFydCwgaW5k
ZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBp
bmRleAorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIDQtY2hhcmFjdGVyIHB1bmN0dWF0b3I6ID4+
Pj0KKworICAgICAgICBjaDQgPSBzb3VyY2Uuc3Vic3RyKGluZGV4LCA0KTsKKworICAgICAgICBp
ZiAoY2g0ID09PSAnPj4+PScpIHsKKyAgICAgICAgICAgIGluZGV4ICs9IDQ7CisgICAgICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFRva2VuLlB1bmN0dWF0b3IsCisgICAg
ICAgICAgICAgICAgdmFsdWU6IGNoNCwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAg
ICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAg
ICAgICB9OworICAgICAgICB9CisKKyAgICAgICAgLy8gMy1jaGFyYWN0ZXIgcHVuY3R1YXRvcnM6
ID09PSAhPT0gPj4+IDw8PSA+Pj0KKworICAgICAgICBjaDMgPSBjaDQuc3Vic3RyKDAsIDMpOwor
CisgICAgICAgIGlmIChjaDMgPT09ICc+Pj4nIHx8IGNoMyA9PT0gJzw8PScgfHwgY2gzID09PSAn
Pj49JykgeworICAgICAgICAgICAgaW5kZXggKz0gMzsKKyAgICAgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAgICAgICB2
YWx1ZTogY2gzLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAg
ICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgc3RhcnQ6
IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07CisgICAg
ICAgIH0KKworICAgICAgICAvLyBPdGhlciAyLWNoYXJhY3RlciBwdW5jdHVhdG9yczogKysgLS0g
PDwgPj4gJiYgfHwKKyAgICAgICAgY2gyID0gY2gzLnN1YnN0cigwLCAyKTsKKworICAgICAgICBp
ZiAoKGNoMSA9PT0gY2gyWzFdICYmICgnKy08PiZ8Jy5pbmRleE9mKGNoMSkgPj0gMCkpIHx8IGNo
MiA9PT0gJz0+JykgeworICAgICAgICAgICAgaW5kZXggKz0gMjsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUHVuY3R1YXRvciwKKyAgICAgICAgICAg
ICAgICB2YWx1ZTogY2gyLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIs
CisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICAgICAg
c3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgICAgIH07
CisgICAgICAgIH0KKworICAgICAgICAvLyAxLWNoYXJhY3RlciBwdW5jdHVhdG9yczogPCA+ID0g
ISArIC0gKiAlICYgfCBeIC8KKyAgICAgICAgaWYgKCc8Pj0hKy0qJSZ8Xi8nLmluZGV4T2YoY2gx
KSA+PSAwKSB7CisgICAgICAgICAgICArK2luZGV4OworICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBUb2tlbi5QdW5jdHVhdG9yLAorICAgICAgICAgICAgICAgIHZh
bHVlOiBjaDEsCisgICAgICAgICAgICAgICAgbGluZU51bWJlcjogbGluZU51bWJlciwKKyAgICAg
ICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgICAgICBzdGFydDog
c3RhcnQsCisgICAgICAgICAgICAgICAgZW5kOiBpbmRleAorICAgICAgICAgICAgfTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwg
J0lMTEVHQUwnKTsKKyAgICB9CisKKyAgICAvLyA3LjguMyBOdW1lcmljIExpdGVyYWxzCisKKyAg
ICBmdW5jdGlvbiBzY2FuSGV4TGl0ZXJhbChzdGFydCkgeworICAgICAgICB2YXIgbnVtYmVyID0g
Jyc7CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAo
IWlzSGV4RGlnaXQoc291cmNlW2luZGV4XSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgIH0KKworICAgICAgICBpZiAobnVtYmVyLmxlbmd0aCA9PT0gMCkgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0
KGluZGV4KSkpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0
ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICB0eXBlOiBUb2tlbi5OdW1lcmljTGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiBw
YXJzZUludCgnMHgnICsgbnVtYmVyLCAxNiksCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAgICBz
dGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAgfQor
CisgICAgZnVuY3Rpb24gc2Nhbk9jdGFsTGl0ZXJhbChzdGFydCkgeworICAgICAgICB2YXIgbnVt
YmVyID0gJzAnICsgc291cmNlW2luZGV4KytdOworICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5n
dGgpIHsKKyAgICAgICAgICAgIGlmICghaXNPY3RhbERpZ2l0KHNvdXJjZVtpbmRleF0pKSB7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBudW1iZXIg
Kz0gc291cmNlW2luZGV4KytdOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmll
clN0YXJ0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkgfHwgaXNEZWNpbWFsRGlnaXQoc291cmNl
LmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2Fn
ZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAorICAgICAgICAg
ICAgdmFsdWU6IHBhcnNlSW50KG51bWJlciwgOCksCisgICAgICAgICAgICBvY3RhbDogdHJ1ZSwK
KyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1iZXIsCisgICAgICAgICAgICBsaW5lU3Rh
cnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVu
ZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzY2FuTnVtZXJpY0xp
dGVyYWwoKSB7CisgICAgICAgIHZhciBudW1iZXIsIHN0YXJ0LCBjaDsKKworICAgICAgICBjaCA9
IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydChpc0RlY2ltYWxEaWdpdChjaC5jaGFyQ29k
ZUF0KDApKSB8fCAoY2ggPT09ICcuJyksCisgICAgICAgICAgICAnTnVtZXJpYyBsaXRlcmFsIG11
c3Qgc3RhcnQgd2l0aCBhIGRlY2ltYWwgZGlnaXQgb3IgYSBkZWNpbWFsIHBvaW50Jyk7CisKKyAg
ICAgICAgc3RhcnQgPSBpbmRleDsKKyAgICAgICAgbnVtYmVyID0gJyc7CisgICAgICAgIGlmIChj
aCAhPT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIgPSBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisKKyAgICAgICAgICAgIC8vIEhleCBudW1iZXIg
c3RhcnRzIHdpdGggJzB4Jy4KKyAgICAgICAgICAgIC8vIE9jdGFsIG51bWJlciBzdGFydHMgd2l0
aCAnMCcuCisgICAgICAgICAgICBpZiAobnVtYmVyID09PSAnMCcpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoY2ggPT09ICd4JyB8fCBjaCA9PT0gJ1gnKSB7CisgICAgICAgICAgICAgICAgICAgICsr
aW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuSGV4TGl0ZXJhbChzdGFydCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChpc09jdGFsRGlnaXQoY2gp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuT2N0YWxMaXRlcmFsKHN0YXJ0KTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBkZWNpbWFsIG51bWJlciBz
dGFydHMgd2l0aCAnMCcgc3VjaCBhcyAnMDknIGlzIGlsbGVnYWwuCisgICAgICAgICAgICAgICAg
aWYgKGNoICYmIGlzRGVjaW1hbERpZ2l0KGNoLmNoYXJDb2RlQXQoMCkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVH
QUwnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdo
aWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7CisgICAgICAg
ICAgICAgICAgbnVtYmVyICs9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjaCA9
PT0gJy4nKSB7CisgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAg
ICAgICAgd2hpbGUgKGlzRGVjaW1hbERpZ2l0KHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSkpIHsK
KyAgICAgICAgICAgICAgICBudW1iZXIgKz0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGNoID09PSAnZScgfHwgY2ggPT09ICdFJykgeworICAgICAgICAgICAgbnVtYmVyICs9IHNv
dXJjZVtpbmRleCsrXTsKKworICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXhdOworICAgICAg
ICAgICAgaWYgKGNoID09PSAnKycgfHwgY2ggPT09ICctJykgeworICAgICAgICAgICAgICAgIG51
bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
aXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAg
ICAgIHdoaWxlIChpc0RlY2ltYWxEaWdpdChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG51bWJlciArPSBzb3VyY2VbaW5kZXgrK107CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVkVG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNJZGVudGlmaWVyU3RhcnQoc291cmNlLmNoYXJD
b2RlQXQoaW5kZXgpKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW5l
eHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHR5cGU6IFRva2VuLk51bWVyaWNMaXRlcmFsLAorICAgICAgICAgICAgdmFs
dWU6IHBhcnNlRmxvYXQobnVtYmVyKSwKKyAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmVOdW1i
ZXIsCisgICAgICAgICAgICBsaW5lU3RhcnQ6IGxpbmVTdGFydCwKKyAgICAgICAgICAgIHN0YXJ0
OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAgICAgfTsKKyAgICB9CisKKyAg
ICAvLyA3LjguNCBTdHJpbmcgTGl0ZXJhbHMKKworICAgIGZ1bmN0aW9uIHNjYW5TdHJpbmdMaXRl
cmFsKCkgeworICAgICAgICB2YXIgc3RyID0gJycsIHF1b3RlLCBzdGFydCwgY2gsIGNvZGUsIHVu
ZXNjYXBlZCwgcmVzdG9yZSwgb2N0YWwgPSBmYWxzZSwgc3RhcnRMaW5lTnVtYmVyLCBzdGFydExp
bmVTdGFydDsKKyAgICAgICAgc3RhcnRMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAg
c3RhcnRMaW5lU3RhcnQgPSBsaW5lU3RhcnQ7CisKKyAgICAgICAgcXVvdGUgPSBzb3VyY2VbaW5k
ZXhdOworICAgICAgICBhc3NlcnQoKHF1b3RlID09PSAnXCcnIHx8IHF1b3RlID09PSAnIicpLAor
ICAgICAgICAgICAgJ1N0cmluZyBsaXRlcmFsIG11c3Qgc3RhcnRzIHdpdGggYSBxdW90ZScpOwor
CisgICAgICAgIHN0YXJ0ID0gaW5kZXg7CisgICAgICAgICsraW5kZXg7CisKKyAgICAgICAgd2hp
bGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsK
KworICAgICAgICAgICAgaWYgKGNoID09PSBxdW90ZSkgeworICAgICAgICAgICAgICAgIHF1b3Rl
ID0gJyc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNo
ID09PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgY2ggPSBzb3VyY2VbaW5kZXgrK107CisgICAg
ICAgICAgICAgICAgaWYgKCFjaCB8fCAhaXNMaW5lVGVybWluYXRvcihjaC5jaGFyQ29kZUF0KDAp
KSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgJ3UnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3RvcmUgPSBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVu
ZXNjYXBlZCA9IHNjYW5IZXhFc2NhcGUoY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHVuZXNjYXBlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSB1bmVzY2Fw
ZWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHIgKz0gY2g7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAg
ICAgICAgICAgICBzdHIgKz0gJ1xuJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
ciArPSAnXHInOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9ICdcdCc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
Yic6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xiJzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICdmJzoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ciArPSAnXGYnOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOgorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RyICs9ICdceDBCJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNP
Y3RhbERpZ2l0KGNoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAnMDEy
MzQ1NjcnLmluZGV4T2YoY2gpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXDAg
aXMgbm90IG9jdGFsIGVzY2FwZSBzZXF1ZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChjb2RlICE9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFs
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5kZXggPCBsZW5ndGggJiYgaXNPY3RhbERpZ2l0KHNvdXJjZVtp
bmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9jdGFsID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGNvZGUgKiA4ICsgJzAxMjM0
NTY3Jy5pbmRleE9mKHNvdXJjZVtpbmRleCsrXSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gMyBkaWdpdHMgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIHN0cmluZyBzdGFydHMK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2l0aCAwLCAxLCAyLCAzCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnMDEyMycuaW5kZXhPZihjaCkgPj0gMCAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4IDwgbGVuZ3Ro
ICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPY3RhbERpZ2l0
KHNvdXJjZVtpbmRleF0pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2RlID0gY29kZSAqIDggKyAnMDEyMzQ1NjcnLmluZGV4T2Yoc291cmNlW2luZGV4KytdKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFy
Q29kZShjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICArK2xpbmVOdW1iZXI7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gICdccicgJiYgc291cmNlW2luZGV4XSA9
PT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBsaW5lU3RhcnQgPSBpbmRleDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2gu
Y2hhckNvZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3RyICs9IGNoOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHF1b3RlICE9PSAnJykgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCAnSUxMRUdBTCcpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHR5cGU6IFRva2VuLlN0cmluZ0xpdGVyYWws
CisgICAgICAgICAgICB2YWx1ZTogc3RyLAorICAgICAgICAgICAgb2N0YWw6IG9jdGFsLAorICAg
ICAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBzdGFydExpbmVOdW1iZXIsCisgICAgICAgICAgICBz
dGFydExpbmVTdGFydDogc3RhcnRMaW5lU3RhcnQsCisgICAgICAgICAgICBsaW5lTnVtYmVyOiBs
aW5lTnVtYmVyLAorICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAgICAg
ICBzdGFydDogc3RhcnQsCisgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgIH07CisgICAg
fQorCisgICAgZnVuY3Rpb24gdGVzdFJlZ0V4cChwYXR0ZXJuLCBmbGFncykgeworICAgICAgICB2
YXIgdmFsdWU7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB2YWx1ZSA9IG5ldyBSZWdFeHAo
cGF0dGVybiwgZmxhZ3MpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yKHt9LCBNZXNzYWdlcy5JbnZhbGlkUmVnRXhwKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsdWU7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cEJvZHkoKSB7Cisg
ICAgICAgIHZhciBjaCwgc3RyLCBjbGFzc01hcmtlciwgdGVybWluYXRlZCwgYm9keTsKKworICAg
ICAgICBjaCA9IHNvdXJjZVtpbmRleF07CisgICAgICAgIGFzc2VydChjaCA9PT0gJy8nLCAnUmVn
dWxhciBleHByZXNzaW9uIGxpdGVyYWwgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2gnKTsKKyAgICAg
ICAgc3RyID0gc291cmNlW2luZGV4KytdOworCisgICAgICAgIGNsYXNzTWFya2VyID0gZmFsc2U7
CisgICAgICAgIHRlcm1pbmF0ZWQgPSBmYWxzZTsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVu
Z3RoKSB7CisgICAgICAgICAgICBjaCA9IHNvdXJjZVtpbmRleCsrXTsKKyAgICAgICAgICAgIHN0
ciArPSBjaDsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJykgeworICAgICAgICAgICAgICAg
IGNoID0gc291cmNlW2luZGV4KytdOworICAgICAgICAgICAgICAgIC8vIEVDTUEtMjYyIDcuOC41
CisgICAgICAgICAgICAgICAgaWYgKGlzTGluZVRlcm1pbmF0b3IoY2guY2hhckNvZGVBdCgwKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5h
dGVkUmVnRXhwKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3RyICs9IGNo
OworICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpbmVUZXJtaW5hdG9yKGNoLmNoYXJDb2RlQXQo
MCkpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuVW50ZXJtaW5h
dGVkUmVnRXhwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2xhc3NNYXJrZXIpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2ggPT09ICddJykgeworICAgICAgICAgICAgICAgICAgICBjbGFzc01h
cmtlciA9IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNoID09PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgdGVy
bWluYXRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2ggPT09ICdbJykgeworICAgICAgICAgICAgICAgICAgICBjbGFzc01h
cmtlciA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgaWYgKCF0ZXJtaW5hdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHt9
LCBNZXNzYWdlcy5VbnRlcm1pbmF0ZWRSZWdFeHApOworICAgICAgICB9CisKKyAgICAgICAgLy8g
RXhjbHVkZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaC4KKyAgICAgICAgYm9keSA9IHN0ci5z
dWJzdHIoMSwgc3RyLmxlbmd0aCAtIDIpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
dmFsdWU6IGJvZHksCisgICAgICAgICAgICBsaXRlcmFsOiBzdHIKKyAgICAgICAgfTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBzY2FuUmVnRXhwRmxhZ3MoKSB7CisgICAgICAgIHZhciBjaCwgc3Ry
LCBmbGFncywgcmVzdG9yZTsKKworICAgICAgICBzdHIgPSAnJzsKKyAgICAgICAgZmxhZ3MgPSAn
JzsKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBjaCA9IHNv
dXJjZVtpbmRleF07CisgICAgICAgICAgICBpZiAoIWlzSWRlbnRpZmllclBhcnQoY2guY2hhckNv
ZGVBdCgwKSkpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgKytpbmRleDsKKyAgICAgICAgICAgIGlmIChjaCA9PT0gJ1xcJyAmJiBpbmRleCA8
IGxlbmd0aCkgeworICAgICAgICAgICAgICAgIGNoID0gc291cmNlW2luZGV4XTsKKyAgICAgICAg
ICAgICAgICBpZiAoY2ggPT09ICd1JykgeworICAgICAgICAgICAgICAgICAgICArK2luZGV4Owor
ICAgICAgICAgICAgICAgICAgICByZXN0b3JlID0gaW5kZXg7CisgICAgICAgICAgICAgICAgICAg
IGNoID0gc2NhbkhleEVzY2FwZSgndScpOworICAgICAgICAgICAgICAgICAgICBpZiAoY2gpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IGNoOworICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChzdHIgKz0gJ1xcdSc7IHJlc3RvcmUgPCBpbmRleDsgKytyZXN0b3JlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IHNvdXJjZVtyZXN0b3JlXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcmVzdG9yZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZsYWdzICs9ICd1JzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSAnXFx1JzsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoe30sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgJ0lMTEVHQUwnKTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJ1xcJzsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5VbmV4cGVjdGVk
VG9rZW4sICdJTExFR0FMJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBmbGFncyArPSBjaDsKKyAgICAgICAgICAgICAgICBzdHIgKz0g
Y2g7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgdmFsdWU6IGZsYWdzLAorICAgICAgICAgICAgbGl0ZXJhbDogc3RyCisgICAgICAgIH07
CisgICAgfQorCisgICAgZnVuY3Rpb24gc2NhblJlZ0V4cCgpIHsKKyAgICAgICAgdmFyIHN0YXJ0
LCBib2R5LCBmbGFncywgcGF0dGVybiwgdmFsdWU7CisKKyAgICAgICAgbG9va2FoZWFkID0gbnVs
bDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAgc3RhcnQgPSBpbmRleDsKKworICAg
ICAgICBib2R5ID0gc2NhblJlZ0V4cEJvZHkoKTsKKyAgICAgICAgZmxhZ3MgPSBzY2FuUmVnRXhw
RmxhZ3MoKTsKKyAgICAgICAgdmFsdWUgPSB0ZXN0UmVnRXhwKGJvZHkudmFsdWUsIGZsYWdzLnZh
bHVlKTsKKworICAgICAgICBpZiAoZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW4uUmVndWxhckV4cHJlc3Npb24sCisgICAg
ICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIGxpbmVOdW1iZXI6IGxp
bmVOdW1iZXIsCisgICAgICAgICAgICAgICAgbGluZVN0YXJ0OiBsaW5lU3RhcnQsCisgICAgICAg
ICAgICAgICAgc3RhcnQ6IHN0YXJ0LAorICAgICAgICAgICAgICAgIGVuZDogaW5kZXgKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgbGl0
ZXJhbDogYm9keS5saXRlcmFsICsgZmxhZ3MubGl0ZXJhbCwKKyAgICAgICAgICAgIHZhbHVlOiB2
YWx1ZSwKKyAgICAgICAgICAgIHN0YXJ0OiBzdGFydCwKKyAgICAgICAgICAgIGVuZDogaW5kZXgK
KyAgICAgICAgfTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0UmVnZXgoKSB7CisgICAg
ICAgIHZhciBwb3MsIGxvYywgcmVnZXgsIHRva2VuOworCisgICAgICAgIHNraXBDb21tZW50KCk7
CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxvYyA9IHsKKyAgICAgICAgICAgIHN0
YXJ0OiB7CisgICAgICAgICAgICAgICAgbGluZTogbGluZU51bWJlciwKKyAgICAgICAgICAgICAg
ICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgICAgICB9CisgICAgICAgIH07CisK
KyAgICAgICAgcmVnZXggPSBzY2FuUmVnRXhwKCk7CisgICAgICAgIGxvYy5lbmQgPSB7CisgICAg
ICAgICAgICBsaW5lOiBsaW5lTnVtYmVyLAorICAgICAgICAgICAgY29sdW1uOiBpbmRleCAtIGxp
bmVTdGFydAorICAgICAgICB9OworCisgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICov
CisgICAgICAgIGlmICghZXh0cmEudG9rZW5pemUpIHsKKyAgICAgICAgICAgIC8vIFBvcCB0aGUg
cHJldmlvdXMgdG9rZW4sIHdoaWNoIGlzIGxpa2VseSAnLycgb3IgJy89JworICAgICAgICAgICAg
aWYgKGV4dHJhLnRva2Vucy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgICAgdG9rZW4gPSBl
eHRyYS50b2tlbnNbZXh0cmEudG9rZW5zLmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgIGlm
ICh0b2tlbi5yYW5nZVswXSA9PT0gcG9zICYmIHRva2VuLnR5cGUgPT09ICdQdW5jdHVhdG9yJykg
eworICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcvJyB8fCB0b2tlbi52
YWx1ZSA9PT0gJy89JykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEudG9rZW5zLnBv
cCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBleHRyYS50b2tlbnMucHVzaCh7CisgICAgICAgICAgICAgICAg
dHlwZTogJ1JlZ3VsYXJFeHByZXNzaW9uJywKKyAgICAgICAgICAgICAgICB2YWx1ZTogcmVnZXgu
bGl0ZXJhbCwKKyAgICAgICAgICAgICAgICByYW5nZTogW3BvcywgaW5kZXhdLAorICAgICAgICAg
ICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiByZWdleDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBpc0lkZW50aWZpZXJOYW1lKHRva2Vu
KSB7CisgICAgICAgIHJldHVybiB0b2tlbi50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyIHx8Cisg
ICAgICAgICAgICB0b2tlbi50eXBlID09PSBUb2tlbi5LZXl3b3JkIHx8CisgICAgICAgICAgICB0
b2tlbi50eXBlID09PSBUb2tlbi5Cb29sZWFuTGl0ZXJhbCB8fAorICAgICAgICAgICAgdG9rZW4u
dHlwZSA9PT0gVG9rZW4uTnVsbExpdGVyYWw7CisgICAgfQorCisgICAgZnVuY3Rpb24gYWR2YW5j
ZVNsYXNoKCkgeworICAgICAgICB2YXIgcHJldlRva2VuLAorICAgICAgICAgICAgY2hlY2tUb2tl
bjsKKyAgICAgICAgLy8gVXNpbmcgdGhlIGZvbGxvd2luZyBhbGdvcml0aG06CisgICAgICAgIC8v
IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3N3ZWV0LmpzL3dpa2kvZGVzaWduCisgICAgICAg
IHByZXZUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS50b2tlbnMubGVuZ3RoIC0gMV07CisgICAg
ICAgIGlmICghcHJldlRva2VuKSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIGJlZm9yZSB0aGF0
OiBpdCBjYW5ub3QgYmUgYSBkaXZpc2lvbi4KKyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVn
ZXgoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJldlRva2VuLnR5cGUgPT09ICdQdW5jdHVh
dG9yJykgeworICAgICAgICAgICAgaWYgKHByZXZUb2tlbi52YWx1ZSA9PT0gJ10nKSB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5jdHVhdG9yKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAocHJldlRva2VuLnZhbHVlID09PSAnKScpIHsKKyAgICAgICAgICAgICAgICBj
aGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5QYXJlblRva2VuIC0gMV07CisgICAg
ICAgICAgICAgICAgaWYgKGNoZWNrVG9rZW4gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrVG9rZW4udHlwZSA9PT0gJ0tleXdvcmQnICYmCisgICAgICAgICAgICAgICAgICAgICAgICAo
Y2hlY2tUb2tlbi52YWx1ZSA9PT0gJ2lmJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrVG9rZW4udmFsdWUgPT09ICd3aGlsZScgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja1Rva2VuLnZhbHVlID09PSAnZm9yJyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrVG9rZW4udmFsdWUgPT09ICd3aXRoJykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwcmV2
VG9rZW4udmFsdWUgPT09ICd9JykgeworICAgICAgICAgICAgICAgIC8vIERpdmlkaW5nIGEgZnVu
Y3Rpb24gYnkgYW55dGhpbmcgbWFrZXMgbGl0dGxlIHNlbnNlLAorICAgICAgICAgICAgICAgIC8v
IGJ1dCB3ZSBoYXZlIHRvIGNoZWNrIGZvciB0aGF0LgorICAgICAgICAgICAgICAgIGlmIChleHRy
YS50b2tlbnNbZXh0cmEub3BlbkN1cmx5VG9rZW4gLSAzXSAmJgorICAgICAgICAgICAgICAgICAg
ICAgICAgZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gM10udHlwZSA9PT0gJ0tl
eXdvcmQnKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEFub255bW91cyBmdW5jdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgY2hlY2tUb2tlbiA9IGV4dHJhLnRva2Vuc1tleHRyYS5vcGVuQ3Vy
bHlUb2tlbiAtIDRdOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrVG9rZW4pIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRyYS50b2tlbnNbZXh0
cmEub3BlbkN1cmx5VG9rZW4gLSA0XSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEu
dG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNF0udHlwZSA9PT0gJ0tleXdvcmQnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIE5hbWVkIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBjaGVja1Rva2VuID0gZXh0cmEudG9rZW5zW2V4dHJhLm9wZW5DdXJseVRva2VuIC0gNV07Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tUb2tlbikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGNvbGxlY3RSZWdleCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNjYW5QdW5j
dHVhdG9yKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIGNoZWNrVG9r
ZW4gZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcworICAgICAgICAgICAgICAgIC8v
IGEgZGVjbGFyYXRpb24gb3IgYW4gZXhwcmVzc2lvbi4KKyAgICAgICAgICAgICAgICBpZiAoRm5F
eHByVG9rZW5zLmluZGV4T2YoY2hlY2tUb2tlbi52YWx1ZSkgPj0gMCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBJdCBpcyBhbiBleHByZXNzaW9uLgorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Ly8gSXQgaXMgYSBkZWNsYXJhdGlvbi4KKyAgICAgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJl
Z2V4KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gY29sbGVjdFJlZ2V4KCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByZXZUb2tlbi50eXBlID09PSAnS2V5d29yZCcpIHsK
KyAgICAgICAgICAgIHJldHVybiBjb2xsZWN0UmVnZXgoKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZHZhbmNlKCkg
eworICAgICAgICB2YXIgY2g7CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKworICAgICAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFRva2VuLkVPRiwKKyAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lTnVt
YmVyLAorICAgICAgICAgICAgICAgIGxpbmVTdGFydDogbGluZVN0YXJ0LAorICAgICAgICAgICAg
ICAgIHN0YXJ0OiBpbmRleCwKKyAgICAgICAgICAgICAgICBlbmQ6IGluZGV4CisgICAgICAgICAg
ICB9OworICAgICAgICB9CisKKyAgICAgICAgY2ggPSBzb3VyY2UuY2hhckNvZGVBdChpbmRleCk7
CisKKyAgICAgICAgaWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkgeworICAgICAgICAgICAgcmV0
dXJuIHNjYW5JZGVudGlmaWVyKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBWZXJ5IGNvbW1v
bjogKCBhbmQgKSBhbmQgOworICAgICAgICBpZiAoY2ggPT09IDB4MjggfHwgY2ggPT09IDB4Mjkg
fHwgY2ggPT09IDB4M0IpIHsKKyAgICAgICAgICAgIHJldHVybiBzY2FuUHVuY3R1YXRvcigpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gU3RyaW5nIGxpdGVyYWwgc3RhcnRzIHdpdGggc2luZ2xl
IHF1b3RlIChVKzAwMjcpIG9yIGRvdWJsZSBxdW90ZSAoVSswMDIyKS4KKyAgICAgICAgaWYgKGNo
ID09PSAweDI3IHx8IGNoID09PSAweDIyKSB7CisgICAgICAgICAgICByZXR1cm4gc2NhblN0cmlu
Z0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisKKyAgICAgICAgLy8gRG90ICguKSBVKzAwMkUgY2Fu
IGFsc28gc3RhcnQgYSBmbG9hdGluZy1wb2ludCBudW1iZXIsIGhlbmNlIHRoZSBuZWVkCisgICAg
ICAgIC8vIHRvIGNoZWNrIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAgICAgICAgaWYgKGNoID09PSAw
eDJFKSB7CisgICAgICAgICAgICBpZiAoaXNEZWNpbWFsRGlnaXQoc291cmNlLmNoYXJDb2RlQXQo
aW5kZXggKyAxKSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gc2Nhbk51bWVyaWNMaXRlcmFs
KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc0RlY2ltYWxEaWdpdChjaCkpIHsKKyAgICAgICAg
ICAgIHJldHVybiBzY2FuTnVtZXJpY0xpdGVyYWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNsYXNoICgvKSBVKzAwMkYgY2FuIGFsc28gc3RhcnQgYSByZWdleC4KKyAgICAgICAgaWYgKGV4
dHJhLnRva2VuaXplICYmIGNoID09PSAweDJGKSB7CisgICAgICAgICAgICByZXR1cm4gYWR2YW5j
ZVNsYXNoKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gc2NhblB1bmN0dWF0b3IoKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBjb2xsZWN0VG9rZW4oKSB7CisgICAgICAgIHZhciBsb2Ms
IHRva2VuLCByYW5nZSwgdmFsdWU7CisKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAgICAgICAg
bG9jID0geworICAgICAgICAgICAgc3RhcnQ6IHsKKyAgICAgICAgICAgICAgICBsaW5lOiBsaW5l
TnVtYmVyLAorICAgICAgICAgICAgICAgIGNvbHVtbjogaW5kZXggLSBsaW5lU3RhcnQKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICB0b2tlbiA9IGFkdmFuY2UoKTsKKyAgICAg
ICAgbG9jLmVuZCA9IHsKKyAgICAgICAgICAgIGxpbmU6IGxpbmVOdW1iZXIsCisgICAgICAgICAg
ICBjb2x1bW46IGluZGV4IC0gbGluZVN0YXJ0CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHRv
a2VuLnR5cGUgIT09IFRva2VuLkVPRikgeworICAgICAgICAgICAgdmFsdWUgPSBzb3VyY2Uuc2xp
Y2UodG9rZW4uc3RhcnQsIHRva2VuLmVuZCk7CisgICAgICAgICAgICBleHRyYS50b2tlbnMucHVz
aCh7CisgICAgICAgICAgICAgICAgdHlwZTogVG9rZW5OYW1lW3Rva2VuLnR5cGVdLAorICAgICAg
ICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAgICAgICAgICAgICAgICByYW5nZTogW3Rva2VuLnN0
YXJ0LCB0b2tlbi5lbmRdLAorICAgICAgICAgICAgICAgIGxvYzogbG9jCisgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBsZXgoKSB7CisgICAgICAgIHZhciB0b2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2th
aGVhZDsKKyAgICAgICAgaW5kZXggPSB0b2tlbi5lbmQ7CisgICAgICAgIGxpbmVOdW1iZXIgPSB0
b2tlbi5saW5lTnVtYmVyOworICAgICAgICBsaW5lU3RhcnQgPSB0b2tlbi5saW5lU3RhcnQ7CisK
KyAgICAgICAgbG9va2FoZWFkID0gKHR5cGVvZiBleHRyYS50b2tlbnMgIT09ICd1bmRlZmluZWQn
KSA/IGNvbGxlY3RUb2tlbigpIDogYWR2YW5jZSgpOworCisgICAgICAgIGluZGV4ID0gdG9rZW4u
ZW5kOworICAgICAgICBsaW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjsKKyAgICAgICAgbGlu
ZVN0YXJ0ID0gdG9rZW4ubGluZVN0YXJ0OworCisgICAgICAgIHJldHVybiB0b2tlbjsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwZWVrKCkgeworICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydDsK
KworICAgICAgICBwb3MgPSBpbmRleDsKKyAgICAgICAgbGluZSA9IGxpbmVOdW1iZXI7CisgICAg
ICAgIHN0YXJ0ID0gbGluZVN0YXJ0OworICAgICAgICBsb29rYWhlYWQgPSAodHlwZW9mIGV4dHJh
LnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpID8gY29sbGVjdFRva2VuKCkgOiBhZHZhbmNlKCk7Cisg
ICAgICAgIGluZGV4ID0gcG9zOworICAgICAgICBsaW5lTnVtYmVyID0gbGluZTsKKyAgICAgICAg
bGluZVN0YXJ0ID0gc3RhcnQ7CisgICAgfQorCisgICAgZnVuY3Rpb24gUG9zaXRpb24obGluZSwg
Y29sdW1uKSB7CisgICAgICAgIHRoaXMubGluZSA9IGxpbmU7CisgICAgICAgIHRoaXMuY29sdW1u
ID0gY29sdW1uOworICAgIH0KKworICAgIGZ1bmN0aW9uIFNvdXJjZUxvY2F0aW9uKHN0YXJ0TGlu
ZSwgc3RhcnRDb2x1bW4sIGxpbmUsIGNvbHVtbikgeworICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3
IFBvc2l0aW9uKHN0YXJ0TGluZSwgc3RhcnRDb2x1bW4pOworICAgICAgICB0aGlzLmVuZCA9IG5l
dyBQb3NpdGlvbihsaW5lLCBjb2x1bW4pOworICAgIH0KKworICAgIFN5bnRheFRyZWVEZWxlZ2F0
ZSA9IHsKKworICAgICAgICBuYW1lOiAnU3ludGF4VHJlZScsCisKKyAgICAgICAgcHJvY2Vzc0Nv
bW1lbnQ6IGZ1bmN0aW9uIChub2RlKSB7CisgICAgICAgICAgICB2YXIgbGFzdENoaWxkLCB0cmFp
bGluZ0NvbW1lbnRzOworCisgICAgICAgICAgICBpZiAobm9kZS50eXBlID09PSBTeW50YXguUHJv
Z3JhbSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLmJvZHkubGVuZ3RoID4gMCkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpZiAoZXh0cmEudHJhaWxpbmdDb21tZW50cy5sZW5ndGggPiAwKSB7
CisgICAgICAgICAgICAgICAgaWYgKGV4dHJhLnRyYWlsaW5nQ29tbWVudHNbMF0ucmFuZ2VbMF0g
Pj0gbm9kZS5yYW5nZVsxXSkgeworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ0NvbW1lbnRz
ID0gZXh0cmEudHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICAgICAgZXh0cmEudHJh
aWxpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGV4dHJhLnRyYWlsaW5nQ29tbWVudHMubGVuZ3RoID0gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChleHRyYS5i
b3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4
dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5sZW5ndGggLSAxXS50
cmFpbGluZ0NvbW1lbnRzICYmCisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5ib3R0b21S
aWdodFN0YWNrW2V4dHJhLmJvdHRvbVJpZ2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21t
ZW50c1swXS5yYW5nZVswXSA+PSBub2RlLnJhbmdlWzFdKSB7CisgICAgICAgICAgICAgICAgICAg
IHRyYWlsaW5nQ29tbWVudHMgPSBleHRyYS5ib3R0b21SaWdodFN0YWNrW2V4dHJhLmJvdHRvbVJp
Z2h0U3RhY2subGVuZ3RoIC0gMV0udHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIGV4dHJhLmJvdHRvbVJpZ2h0U3RhY2tbZXh0cmEuYm90dG9tUmlnaHRTdGFjay5s
ZW5ndGggLSAxXS50cmFpbGluZ0NvbW1lbnRzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gRWF0aW5nIHRoZSBzdGFjay4KKyAgICAgICAgICAgIHdo
aWxlIChleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCA+IDAgJiYgZXh0cmEuYm90dG9tUmln
aHRTdGFja1tleHRyYS5ib3R0b21SaWdodFN0YWNrLmxlbmd0aCAtIDFdLnJhbmdlWzBdID49IG5v
ZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSBleHRyYS5ib3R0b21S
aWdodFN0YWNrLnBvcCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGFzdENo
aWxkKSB7CisgICAgICAgICAgICAgICAgaWYgKGxhc3RDaGlsZC5sZWFkaW5nQ29tbWVudHMgJiYg
bGFzdENoaWxkLmxlYWRpbmdDb21tZW50c1tsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzLmxlbmd0
aCAtIDFdLnJhbmdlWzFdIDw9IG5vZGUucmFuZ2VbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS5sZWFkaW5nQ29tbWVudHMgPSBsYXN0Q2hpbGQubGVhZGluZ0NvbW1lbnRzOworICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgbGFzdENoaWxkLmxlYWRpbmdDb21tZW50czsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV4dHJhLmxlYWRpbmdDb21tZW50cy5s
ZW5ndGggPiAwICYmIGV4dHJhLmxlYWRpbmdDb21tZW50c1tleHRyYS5sZWFkaW5nQ29tbWVudHMu
bGVuZ3RoIC0gMV0ucmFuZ2VbMV0gPD0gbm9kZS5yYW5nZVswXSkgeworICAgICAgICAgICAgICAg
IG5vZGUubGVhZGluZ0NvbW1lbnRzID0gZXh0cmEubGVhZGluZ0NvbW1lbnRzOworICAgICAgICAg
ICAgICAgIGV4dHJhLmxlYWRpbmdDb21tZW50cyA9IFtdOworICAgICAgICAgICAgfQorCisKKyAg
ICAgICAgICAgIGlmICh0cmFpbGluZ0NvbW1lbnRzKSB7CisgICAgICAgICAgICAgICAgbm9kZS50
cmFpbGluZ0NvbW1lbnRzID0gdHJhaWxpbmdDb21tZW50czsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjay5wdXNoKG5vZGUpOworICAgICAgICB9LAor
CisgICAgICAgIG1hcmtFbmQ6IGZ1bmN0aW9uIChub2RlLCBzdGFydFRva2VuKSB7CisgICAgICAg
ICAgICBpZiAoZXh0cmEucmFuZ2UpIHsKKyAgICAgICAgICAgICAgICBub2RlLnJhbmdlID0gW3N0
YXJ0VG9rZW4uc3RhcnQsIGluZGV4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChl
eHRyYS5sb2MpIHsKKyAgICAgICAgICAgICAgICBub2RlLmxvYyA9IG5ldyBTb3VyY2VMb2NhdGlv
bigKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydExpbmVOdW1iZXIgPT09IHVu
ZGVmaW5lZCA/ICBzdGFydFRva2VuLmxpbmVOdW1iZXIgOiBzdGFydFRva2VuLnN0YXJ0TGluZU51
bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3RhcnRUb2tlbi5zdGFydCAtIChzdGFydFRva2Vu
LnN0YXJ0TGluZVN0YXJ0ID09PSB1bmRlZmluZWQgPyAgc3RhcnRUb2tlbi5saW5lU3RhcnQgOiBz
dGFydFRva2VuLnN0YXJ0TGluZVN0YXJ0KSwKKyAgICAgICAgICAgICAgICAgICAgbGluZU51bWJl
ciwKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggLSBsaW5lU3RhcnQKKyAgICAgICAgICAgICAg
ICApOworICAgICAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3Mobm9kZSk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAg
ICAgICAgdGhpcy5wcm9jZXNzQ29tbWVudChub2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBub2RlOworICAgICAgICB9LAorCisgICAgICAgIHBvc3RQcm9jZXNzOiBmdW5j
dGlvbiAobm9kZSkgeworICAgICAgICAgICAgaWYgKGV4dHJhLnNvdXJjZSkgeworICAgICAgICAg
ICAgICAgIG5vZGUubG9jLnNvdXJjZSA9IGV4dHJhLnNvdXJjZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUFycmF5
RXhwcmVzc2lvbjogZnVuY3Rpb24gKGVsZW1lbnRzKSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5BcnJheUV4cHJlc3Npb24sCisgICAgICAgICAg
ICAgICAgZWxlbWVudHM6IGVsZW1lbnRzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZUFzc2lnbm1lbnRFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGxl
ZnQsIHJpZ2h0KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5Bc3NpZ25tZW50RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjog
b3BlcmF0b3IsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAgICAgICBy
aWdodDogcmlnaHQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRl
QmluYXJ5RXhwcmVzc2lvbjogZnVuY3Rpb24gKG9wZXJhdG9yLCBsZWZ0LCByaWdodCkgeworICAg
ICAgICAgICAgdmFyIHR5cGUgPSAob3BlcmF0b3IgPT09ICd8fCcgfHwgb3BlcmF0b3IgPT09ICcm
JicpID8gU3ludGF4LkxvZ2ljYWxFeHByZXNzaW9uIDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IFN5bnRheC5CaW5hcnlFeHByZXNzaW9uOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgICAgICB0eXBlOiB0eXBlLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwK
KyAgICAgICAgICAgICAgICBsZWZ0OiBsZWZ0LAorICAgICAgICAgICAgICAgIHJpZ2h0OiByaWdo
dAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVCbG9ja1N0YXRl
bWVudDogZnVuY3Rpb24gKGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LkJsb2NrU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6
IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQnJlYWtT
dGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguQnJlYWtTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
bGFiZWw6IGxhYmVsCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0
ZUNhbGxFeHByZXNzaW9uOiBmdW5jdGlvbiAoY2FsbGVlLCBhcmdzKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYWxsRXhwcmVzc2lvbiwKKyAg
ICAgICAgICAgICAgICBjYWxsZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAgICAnYXJndW1lbnRz
JzogYXJncworICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDYXRj
aENsYXVzZTogZnVuY3Rpb24gKHBhcmFtLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5DYXRjaENsYXVzZSwKKyAgICAgICAgICAgICAg
ICBwYXJhbTogcGFyYW0sCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAgICAgICAgICAg
fTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVDb25kaXRpb25hbEV4cHJlc3Npb246IGZ1
bmN0aW9uICh0ZXN0LCBjb25zZXF1ZW50LCBhbHRlcm5hdGUpIHsKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkNvbmRpdGlvbmFsRXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6
IGNvbnNlcXVlbnQsCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiBhbHRlcm5hdGUKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlQ29udGludWVTdGF0ZW1lbnQ6
IGZ1bmN0aW9uIChsYWJlbCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguQ29udGludWVTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6
IGxhYmVsCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZURlYnVn
Z2VyU3RhdGVtZW50OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5EZWJ1Z2dlclN0YXRlbWVudAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVEb1doaWxlU3RhdGVtZW50OiBmdW5jdGlvbiAo
Ym9keSwgdGVzdCkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguRG9XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAor
ICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlRW1wdHlTdGF0ZW1lbnQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LkVtcHR5U3RhdGVtZW50Cisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUV4cHJlc3Npb25TdGF0
ZW1lbnQ6IGZ1bmN0aW9uIChleHByZXNzaW9uKSB7CisgICAgICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5FeHByZXNzaW9uU3RhdGVtZW50LAorICAgICAgICAg
ICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24KKyAgICAgICAgICAgIH07CisgICAgICAgIH0s
CisKKyAgICAgICAgY3JlYXRlRm9yU3RhdGVtZW50OiBmdW5jdGlvbiAoaW5pdCwgdGVzdCwgdXBk
YXRlLCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6
IFN5bnRheC5Gb3JTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgaW5pdDogaW5pdCwKKyAgICAg
ICAgICAgICAgICB0ZXN0OiB0ZXN0LAorICAgICAgICAgICAgICAgIHVwZGF0ZTogdXBkYXRlLAor
ICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisK
KyAgICAgICAgY3JlYXRlRm9ySW5TdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCwgYm9k
eSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
Rm9ySW5TdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgbGVmdDogbGVmdCwKKyAgICAgICAgICAg
ICAgICByaWdodDogcmlnaHQsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAg
ICAgICAgICBlYWNoOiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVGdW5jdGlvbkRlY2xhcmF0aW9uOiBmdW5jdGlvbiAoaWQsIHBhcmFtcywgZGVmYXVs
dHMsIGJvZHkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LkZ1bmN0aW9uRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgaWQ6IGlkLAorICAg
ICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgICAgIGRlZmF1bHRzOiBk
ZWZhdWx0cywKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5LAorICAgICAgICAgICAgICAgIHJl
c3Q6IG51bGwsCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yOiBmYWxzZSwKKyAgICAgICAgICAg
ICAgICBleHByZXNzaW9uOiBmYWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVGdW5jdGlvbkV4cHJlc3Npb246IGZ1bmN0aW9uIChpZCwgcGFyYW1zLCBkZWZh
dWx0cywgYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBTeW50YXguRnVuY3Rpb25FeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGlkOiBpZCwKKyAg
ICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAgICAgICAgICAgICBkZWZhdWx0czog
ZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgYm9keTogYm9keSwKKyAgICAgICAgICAgICAgICBy
ZXN0OiBudWxsLAorICAgICAgICAgICAgICAgIGdlbmVyYXRvcjogZmFsc2UsCisgICAgICAgICAg
ICAgICAgZXhwcmVzc2lvbjogZmFsc2UKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAg
ICAgICAgY3JlYXRlSWRlbnRpZmllcjogZnVuY3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgIHJl
dHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LklkZW50aWZpZXIsCisgICAgICAg
ICAgICAgICAgbmFtZTogbmFtZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAg
ICBjcmVhdGVJZlN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGNvbnNlcXVlbnQsIGFsdGVybmF0
ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXgu
SWZTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgdGVzdDogdGVzdCwKKyAgICAgICAgICAgICAg
ICBjb25zZXF1ZW50OiBjb25zZXF1ZW50LAorICAgICAgICAgICAgICAgIGFsdGVybmF0ZTogYWx0
ZXJuYXRlCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZUxhYmVs
ZWRTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChsYWJlbCwgYm9keSkgeworICAgICAgICAgICAgcmV0dXJu
IHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTGFiZWxlZFN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBsYWJlbDogbGFiZWwsCisgICAgICAgICAgICAgICAgYm9keTogYm9keQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVMaXRlcmFsOiBmdW5jdGlv
biAodG9rZW4pIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6IHRva2VuLnZhbHVlLAorICAg
ICAgICAgICAgICAgIHJhdzogc291cmNlLnNsaWNlKHRva2VuLnN0YXJ0LCB0b2tlbi5lbmQpCisg
ICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZU1lbWJlckV4cHJlc3Np
b246IGZ1bmN0aW9uIChhY2Nlc3Nvciwgb2JqZWN0LCBwcm9wZXJ0eSkgeworICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBTeW50YXguTWVtYmVyRXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICBjb21wdXRlZDogYWNjZXNzb3IgPT09ICdbJywKKyAgICAgICAgICAg
ICAgICBvYmplY3Q6IG9iamVjdCwKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHkK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlTmV3RXhwcmVzc2lv
bjogZnVuY3Rpb24gKGNhbGxlZSwgYXJncykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgICAgICB0eXBlOiBTeW50YXguTmV3RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBj
YWxsZWU6IGNhbGxlZSwKKyAgICAgICAgICAgICAgICAnYXJndW1lbnRzJzogYXJncworICAgICAg
ICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVPYmplY3RFeHByZXNzaW9uOiBm
dW5jdGlvbiAocHJvcGVydGllcykgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0aWVzOiBwcm9wZXJ0aWVzCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAg
IGNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uOiBmdW5jdGlvbiAob3BlcmF0b3IsIGFyZ3VtZW50KSB7
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRh
dGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBvcGVyYXRvciwKKyAgICAg
ICAgICAgICAgICBhcmd1bWVudDogYXJndW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZml4OiBm
YWxzZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVQcm9ncmFt
OiBmdW5jdGlvbiAoYm9keSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAg
ICB0eXBlOiBTeW50YXguUHJvZ3JhbSwKKyAgICAgICAgICAgICAgICBib2R5OiBib2R5CisgICAg
ICAgICAgICB9OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVByb3BlcnR5OiBmdW5jdGlv
biAoa2luZCwga2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBTeW50YXguUHJvcGVydHksCisgICAgICAgICAgICAgICAga2V5OiBrZXksCisg
ICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQK
KyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlUmV0dXJuU3RhdGVt
ZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAg
ICAgICAgICAgdHlwZTogU3ludGF4LlJldHVyblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBh
cmd1bWVudDogYXJndW1lbnQKKyAgICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAg
Y3JlYXRlU2VxdWVuY2VFeHByZXNzaW9uOiBmdW5jdGlvbiAoZXhwcmVzc2lvbnMpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlNlcXVlbmNlRXhw
cmVzc2lvbiwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uczogZXhwcmVzc2lvbnMKKyAgICAg
ICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlU3dpdGNoQ2FzZTogZnVuY3Rp
b24gKHRlc3QsIGNvbnNlcXVlbnQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlN3aXRjaENhc2UsCisgICAgICAgICAgICAgICAgdGVzdDogdGVz
dCwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiBjb25zZXF1ZW50CisgICAgICAgICAgICB9
OworICAgICAgICB9LAorCisgICAgICAgIGNyZWF0ZVN3aXRjaFN0YXRlbWVudDogZnVuY3Rpb24g
KGRpc2NyaW1pbmFudCwgY2FzZXMpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogU3ludGF4LlN3aXRjaFN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBkaXNj
cmltaW5hbnQ6IGRpc2NyaW1pbmFudCwKKyAgICAgICAgICAgICAgICBjYXNlczogY2FzZXMKKyAg
ICAgICAgICAgIH07CisgICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVGhpc0V4cHJlc3Npb246
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogU3ludGF4LlRoaXNFeHByZXNzaW9uCisgICAgICAgICAgICB9OworICAgICAgICB9LAorCisg
ICAgICAgIGNyZWF0ZVRocm93U3RhdGVtZW50OiBmdW5jdGlvbiAoYXJndW1lbnQpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LlRocm93U3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBhcmd1bWVudAorICAgICAgICAgICAgfTsK
KyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVUcnlTdGF0ZW1lbnQ6IGZ1bmN0aW9uIChibG9j
aywgZ3VhcmRlZEhhbmRsZXJzLCBoYW5kbGVycywgZmluYWxpemVyKSB7CisgICAgICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5UcnlTdGF0ZW1lbnQsCisgICAg
ICAgICAgICAgICAgYmxvY2s6IGJsb2NrLAorICAgICAgICAgICAgICAgIGd1YXJkZWRIYW5kbGVy
czogZ3VhcmRlZEhhbmRsZXJzLAorICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBoYW5kbGVycywK
KyAgICAgICAgICAgICAgICBmaW5hbGl6ZXI6IGZpbmFsaXplcgorICAgICAgICAgICAgfTsKKyAg
ICAgICAgfSwKKworICAgICAgICBjcmVhdGVVbmFyeUV4cHJlc3Npb246IGZ1bmN0aW9uIChvcGVy
YXRvciwgYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gJysrJyB8fCBv
cGVyYXRvciA9PT0gJy0tJykgeworICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgICAgIHR5cGU6IFN5bnRheC5VcGRhdGVFeHByZXNzaW9uLAorICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRvcjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50OiBh
cmd1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgcHJlZml4OiB0cnVlCisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogU3ludGF4LlVuYXJ5RXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRv
cjogb3BlcmF0b3IsCisgICAgICAgICAgICAgICAgYXJndW1lbnQ6IGFyZ3VtZW50LAorICAgICAg
ICAgICAgICAgIHByZWZpeDogdHJ1ZQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uOiBmdW5jdGlvbiAoZGVjbGFyYXRpb25zLCBr
aW5kKSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRh
eC5WYXJpYWJsZURlY2xhcmF0aW9uLAorICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogZGVj
bGFyYXRpb25zLAorICAgICAgICAgICAgICAgIGtpbmQ6IGtpbmQKKyAgICAgICAgICAgIH07Cisg
ICAgICAgIH0sCisKKyAgICAgICAgY3JlYXRlVmFyaWFibGVEZWNsYXJhdG9yOiBmdW5jdGlvbiAo
aWQsIGluaXQpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
U3ludGF4LlZhcmlhYmxlRGVjbGFyYXRvciwKKyAgICAgICAgICAgICAgICBpZDogaWQsCisgICAg
ICAgICAgICAgICAgaW5pdDogaW5pdAorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAg
ICAgICBjcmVhdGVXaGlsZVN0YXRlbWVudDogZnVuY3Rpb24gKHRlc3QsIGJvZHkpIHsKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogU3ludGF4LldoaWxlU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3QsCisgICAgICAgICAgICAgICAgYm9keTog
Ym9keQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSwKKworICAgICAgICBjcmVhdGVXaXRoU3Rh
dGVtZW50OiBmdW5jdGlvbiAob2JqZWN0LCBib2R5KSB7CisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IFN5bnRheC5XaXRoU3RhdGVtZW50LAorICAgICAgICAgICAg
ICAgIG9iamVjdDogb2JqZWN0LAorICAgICAgICAgICAgICAgIGJvZHk6IGJvZHkKKyAgICAgICAg
ICAgIH07CisgICAgICAgIH0KKyAgICB9OworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlcmUg
aXMgYSBsaW5lIHRlcm1pbmF0b3IgYmVmb3JlIHRoZSBuZXh0IHRva2VuLgorCisgICAgZnVuY3Rp
b24gcGVla0xpbmVUZXJtaW5hdG9yKCkgeworICAgICAgICB2YXIgcG9zLCBsaW5lLCBzdGFydCwg
Zm91bmQ7CisKKyAgICAgICAgcG9zID0gaW5kZXg7CisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVy
OworICAgICAgICBzdGFydCA9IGxpbmVTdGFydDsKKyAgICAgICAgc2tpcENvbW1lbnQoKTsKKyAg
ICAgICAgZm91bmQgPSBsaW5lTnVtYmVyICE9PSBsaW5lOworICAgICAgICBpbmRleCA9IHBvczsK
KyAgICAgICAgbGluZU51bWJlciA9IGxpbmU7CisgICAgICAgIGxpbmVTdGFydCA9IHN0YXJ0Owor
CisgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICB9CisKKyAgICAvLyBUaHJvdyBhbiBleGNlcHRp
b24KKworICAgIGZ1bmN0aW9uIHRocm93RXJyb3IodG9rZW4sIG1lc3NhZ2VGb3JtYXQpIHsKKyAg
ICAgICAgdmFyIGVycm9yLAorICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGlj
ZS5jYWxsKGFyZ3VtZW50cywgMiksCisgICAgICAgICAgICBtc2cgPSBtZXNzYWdlRm9ybWF0LnJl
cGxhY2UoCisgICAgICAgICAgICAgICAgLyUoXGQpL2csCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24gKHdob2xlLCBpbmRleCkgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaW5kZXggPCBh
cmdzLmxlbmd0aCwgJ01lc3NhZ2UgcmVmZXJlbmNlIG11c3QgYmUgaW4gcmFuZ2UnKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICk7CisKKyAgICAgICAgaWYgKHR5cGVvZiB0b2tlbi5saW5lTnVtYmVyID09PSAn
bnVtYmVyJykgeworICAgICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0xpbmUgJyArIHRva2Vu
LmxpbmVOdW1iZXIgKyAnOiAnICsgbXNnKTsKKyAgICAgICAgICAgIGVycm9yLmluZGV4ID0gdG9r
ZW4uc3RhcnQ7CisgICAgICAgICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJl
cjsKKyAgICAgICAgICAgIGVycm9yLmNvbHVtbiA9IHRva2VuLnN0YXJ0IC0gbGluZVN0YXJ0ICsg
MTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVycm9yID0gbmV3IEVycm9yKCdMaW5l
ICcgKyBsaW5lTnVtYmVyICsgJzogJyArIG1zZyk7CisgICAgICAgICAgICBlcnJvci5pbmRleCA9
IGluZGV4OworICAgICAgICAgICAgZXJyb3IubGluZU51bWJlciA9IGxpbmVOdW1iZXI7CisgICAg
ICAgICAgICBlcnJvci5jb2x1bW4gPSBpbmRleCAtIGxpbmVTdGFydCArIDE7CisgICAgICAgIH0K
KworICAgICAgICBlcnJvci5kZXNjcmlwdGlvbiA9IG1zZzsKKyAgICAgICAgdGhyb3cgZXJyb3I7
CisgICAgfQorCisgICAgZnVuY3Rpb24gdGhyb3dFcnJvclRvbGVyYW50KCkgeworICAgICAgICB0
cnkgeworICAgICAgICAgICAgdGhyb3dFcnJvci5hcHBseShudWxsLCBhcmd1bWVudHMpOworICAg
ICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7CisgICAg
ICAgICAgICAgICAgZXh0cmEuZXJyb3JzLnB1c2goZSk7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKworICAgIC8vIFRocm93IGFuIGV4Y2VwdGlvbiBiZWNhdXNlIG9mIHRoZSB0b2tlbi4KKwor
ICAgIGZ1bmN0aW9uIHRocm93VW5leHBlY3RlZCh0b2tlbikgeworICAgICAgICBpZiAodG9rZW4u
dHlwZSA9PT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNz
YWdlcy5VbmV4cGVjdGVkRU9TKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0b2tlbi50eXBl
ID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih0b2tl
biwgTWVzc2FnZXMuVW5leHBlY3RlZE51bWJlcik7CisgICAgICAgIH0KKworICAgICAgICBpZiAo
dG9rZW4udHlwZSA9PT0gVG9rZW4uU3RyaW5nTGl0ZXJhbCkgeworICAgICAgICAgICAgdGhyb3dF
cnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFN0cmluZyk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAg
dGhyb3dFcnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZElkZW50aWZpZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAg
ICAgICAgIGlmIChpc0Z1dHVyZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5VbmV4cGVjdGVkUmVzZXJ2ZWQpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgaXNTdHJpY3RNb2RlUmVzZXJ2ZWRXb3Jk
KHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh0b2tl
biwgTWVzc2FnZXMuU3RyaWN0UmVzZXJ2ZWRXb3JkKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aHJvd0Vycm9yKHRva2VuLCBNZXNzYWdlcy5V
bmV4cGVjdGVkVG9rZW4sIHRva2VuLnZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEJv
b2xlYW5MaXRlcmFsLCBOdWxsTGl0ZXJhbCwgb3IgUHVuY3R1YXRvci4KKyAgICAgICAgdGhyb3dF
cnJvcih0b2tlbiwgTWVzc2FnZXMuVW5leHBlY3RlZFRva2VuLCB0b2tlbi52YWx1ZSk7CisgICAg
fQorCisgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNoIHRoZSBzcGVjaWZpZWQg
cHVuY3R1YXRvci4KKyAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4K
KworICAgIGZ1bmN0aW9uIGV4cGVjdCh2YWx1ZSkgeworICAgICAgICB2YXIgdG9rZW4gPSBsZXgo
KTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2VuLlB1bmN0dWF0b3IgfHwgdG9rZW4u
dmFsdWUgIT09IHZhbHVlKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQodG9rZW4pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gRXhwZWN0IHRoZSBuZXh0IHRva2VuIHRvIG1hdGNo
IHRoZSBzcGVjaWZpZWQga2V5d29yZC4KKyAgICAvLyBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxs
IGJlIHRocm93bi4KKworICAgIGZ1bmN0aW9uIGV4cGVjdEtleXdvcmQoa2V5d29yZCkgeworICAg
ICAgICB2YXIgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFRva2Vu
LktleXdvcmQgfHwgdG9rZW4udmFsdWUgIT09IGtleXdvcmQpIHsKKyAgICAgICAgICAgIHRocm93
VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgbmV4dCB0b2tlbiBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcHVuY3R1YXRvci4KKwor
ICAgIGZ1bmN0aW9uIG1hdGNoKHZhbHVlKSB7CisgICAgICAgIHJldHVybiBsb29rYWhlYWQudHlw
ZSA9PT0gVG9rZW4uUHVuY3R1YXRvciAmJiBsb29rYWhlYWQudmFsdWUgPT09IHZhbHVlOworICAg
IH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBuZXh0IHRva2VuIG1hdGNoZXMgdGhlIHNw
ZWNpZmllZCBrZXl3b3JkCisKKyAgICBmdW5jdGlvbiBtYXRjaEtleXdvcmQoa2V5d29yZCkgewor
ICAgICAgICByZXR1cm4gbG9va2FoZWFkLnR5cGUgPT09IFRva2VuLktleXdvcmQgJiYgbG9va2Fo
ZWFkLnZhbHVlID09PSBrZXl3b3JkOworICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIHRo
ZSBuZXh0IHRva2VuIGlzIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IKKworICAgIGZ1bmN0aW9uIG1h
dGNoQXNzaWduKCkgeworICAgICAgICB2YXIgb3A7CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50
eXBlICE9PSBUb2tlbi5QdW5jdHVhdG9yKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgb3AgPSBsb29rYWhlYWQudmFsdWU7CisgICAgICAgIHJldHVybiBv
cCA9PT0gJz0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyo9JyB8fAorICAgICAgICAgICAgb3Ag
PT09ICcvPScgfHwKKyAgICAgICAgICAgIG9wID09PSAnJT0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJys9JyB8fAorICAgICAgICAgICAgb3AgPT09ICctPScgfHwKKyAgICAgICAgICAgIG9wID09
PSAnPDw9JyB8fAorICAgICAgICAgICAgb3AgPT09ICc+Pj0nIHx8CisgICAgICAgICAgICBvcCA9
PT0gJz4+Pj0nIHx8CisgICAgICAgICAgICBvcCA9PT0gJyY9JyB8fAorICAgICAgICAgICAgb3Ag
PT09ICdePScgfHwKKyAgICAgICAgICAgIG9wID09PSAnfD0nOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGNvbnN1bWVTZW1pY29sb24oKSB7CisgICAgICAgIHZhciBsaW5lOworCisgICAgICAgIC8v
IENhdGNoIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlIGZpcnN0OiBpbW1lZGlhdGVseSBhIHNlbWljb2xv
biAoVSswMDNCKS4KKyAgICAgICAgaWYgKHNvdXJjZS5jaGFyQ29kZUF0KGluZGV4KSA9PT0gMHgz
QiB8fCBtYXRjaCgnOycpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGxpbmUgPSBsaW5lTnVtYmVyOworICAgICAgICBza2lw
Q29tbWVudCgpOworICAgICAgICBpZiAobGluZU51bWJlciAhPT0gbGluZSkgeworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlICE9PSBU
b2tlbi5FT0YgJiYgIW1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZChs
b29rYWhlYWQpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gUmV0dXJuIHRydWUgaWYgcHJv
dmlkZWQgZXhwcmVzc2lvbiBpcyBMZWZ0SGFuZFNpZGVFeHByZXNzaW9uCisKKyAgICBmdW5jdGlv
biBpc0xlZnRIYW5kU2lkZShleHByKSB7CisgICAgICAgIHJldHVybiBleHByLnR5cGUgPT09IFN5
bnRheC5JZGVudGlmaWVyIHx8IGV4cHIudHlwZSA9PT0gU3ludGF4Lk1lbWJlckV4cHJlc3Npb247
CisgICAgfQorCisgICAgLy8gMTEuMS40IEFycmF5IEluaXRpYWxpc2VyCisKKyAgICBmdW5jdGlv
biBwYXJzZUFycmF5SW5pdGlhbGlzZXIoKSB7CisgICAgICAgIHZhciBlbGVtZW50cyA9IFtdLCBz
dGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGV4
cGVjdCgnWycpOworCisgICAgICAgIHdoaWxlICghbWF0Y2goJ10nKSkgeworICAgICAgICAgICAg
aWYgKG1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAg
ICBlbGVtZW50cy5wdXNoKG51bGwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50cy5wdXNoKHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoIW1hdGNoKCddJykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0
KCcsJyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgbGV4KCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUu
Y3JlYXRlQXJyYXlFeHByZXNzaW9uKGVsZW1lbnRzKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisg
ICAgLy8gMTEuMS41IE9iamVjdCBJbml0aWFsaXNlcgorCisgICAgZnVuY3Rpb24gcGFyc2VQcm9w
ZXJ0eUZ1bmN0aW9uKHBhcmFtLCBmaXJzdCkgeworICAgICAgICB2YXIgcHJldmlvdXNTdHJpY3Qs
IGJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7Cisg
ICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0
aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAgaWYgKGZpcnN0ICYmIHN0cmljdCAmJiBpc1Jl
c3RyaWN0ZWRXb3JkKHBhcmFtWzBdLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9s
ZXJhbnQoZmlyc3QsIE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3RyaWN0ID0gcHJldmlvdXNTdHJpY3Q7CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJr
RW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9uRXhwcmVzc2lvbihudWxsLCBwYXJhbSwgW10sIGJv
ZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFByb3Bl
cnR5S2V5KCkgeworICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKworICAgICAgICAv
LyBOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IGZyb20gcGFyc2VPYmplY3RQcm9w
ZXJ0eSgpLCB3aGVyZQorICAgICAgICAvLyBFT0YgYW5kIFB1bmN0dWF0b3IgdG9rZW5zIGFyZSBh
bHJlYWR5IGZpbHRlcmVkIG91dC4KKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4u
U3RyaW5nTGl0ZXJhbCB8fCB0b2tlbi50eXBlID09PSBUb2tlbi5OdW1lcmljTGl0ZXJhbCkgewor
ICAgICAgICAgICAgaWYgKHN0cmljdCAmJiB0b2tlbi5vY3RhbCkgeworICAgICAgICAgICAgICAg
IHRocm93RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFsKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVn
YXRlLmNyZWF0ZUxpdGVyYWwodG9rZW4pLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9r
ZW4udmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVj
dFByb3BlcnR5KCkgeworICAgICAgICB2YXIgdG9rZW4sIGtleSwgaWQsIHZhbHVlLCBwYXJhbSwg
c3RhcnRUb2tlbjsKKworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgc3RhcnRU
b2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW4uSWRl
bnRpZmllcikgeworCisgICAgICAgICAgICBpZCA9IHBhcnNlT2JqZWN0UHJvcGVydHlLZXkoKTsK
KworICAgICAgICAgICAgLy8gUHJvcGVydHkgQXNzaWdubWVudDogR2V0dGVyIGFuZCBTZXR0ZXIu
CisKKyAgICAgICAgICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJ2dldCcgJiYgIW1hdGNoKCc6Jykp
IHsKKyAgICAgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAg
ICAgICAgICAgICAgZXhwZWN0KCcoJyk7CisgICAgICAgICAgICAgICAgZXhwZWN0KCcpJyk7Cisg
ICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZVByb3BlcnR5RnVuY3Rpb24oW10pOworICAgICAg
ICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5
KCdnZXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodG9rZW4udmFsdWUgPT09ICdzZXQnICYmICFtYXRjaCgnOicpKSB7CisgICAgICAg
ICAgICAgICAga2V5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eUtleSgpOworICAgICAgICAgICAgICAg
IGV4cGVjdCgnKCcpOworICAgICAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICAgICAgICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdCgnKScpOworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9y
VG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlVuZXhwZWN0ZWRUb2tlbiwgdG9rZW4udmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlUHJvcGVydHlGdW5jdGlvbihbXSk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFyYW0gPSBbIHBh
cnNlVmFyaWFibGVJZGVudGlmaWVyKCkgXTsKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0KCcp
Jyk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VQcm9wZXJ0eUZ1bmN0aW9uKHBh
cmFtLCB0b2tlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVByb3BlcnR5KCdzZXQnLCBrZXksIHZhbHVl
KSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoJzonKTsK
KyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlUHJvcGVydHkoJ2lu
aXQnLCBpZCwgdmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorICAgICAgICBpZiAodG9r
ZW4udHlwZSA9PT0gVG9rZW4uRU9GIHx8IHRva2VuLnR5cGUgPT09IFRva2VuLlB1bmN0dWF0b3Ip
IHsKKyAgICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBrZXkgPSBwYXJzZU9iamVjdFByb3BlcnR5S2V5KCk7CisgICAgICAgICAg
ICBleHBlY3QoJzonKTsKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50RXhwcmVz
c2lvbigpOworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3Jl
YXRlUHJvcGVydHkoJ2luaXQnLCBrZXksIHZhbHVlKSwgc3RhcnRUb2tlbik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU9iamVjdEluaXRpYWxpc2VyKCkgeworICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IFtdLCBwcm9wZXJ0eSwgbmFtZSwga2V5LCBraW5kLCBtYXAgPSB7
fSwgdG9TdHJpbmcgPSBTdHJpbmcsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9
IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICB3aGlsZSAoIW1h
dGNoKCd9JykpIHsKKyAgICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VPYmplY3RQcm9wZXJ0eSgp
OworCisgICAgICAgICAgICBpZiAocHJvcGVydHkua2V5LnR5cGUgPT09IFN5bnRheC5JZGVudGlm
aWVyKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IHByb3BlcnR5LmtleS5uYW1lOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gdG9TdHJpbmcocHJvcGVydHku
a2V5LnZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtpbmQgPSAocHJvcGVydHku
a2luZCA9PT0gJ2luaXQnKSA/IFByb3BlcnR5S2luZC5EYXRhIDogKHByb3BlcnR5LmtpbmQgPT09
ICdnZXQnKSA/IFByb3BlcnR5S2luZC5HZXQgOiBQcm9wZXJ0eUtpbmQuU2V0OworCisgICAgICAg
ICAgICBrZXkgPSAnJCcgKyBuYW1lOworICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUu
aGFzT3duUHJvcGVydHkuY2FsbChtYXAsIGtleSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobWFw
W2tleV0gPT09IFByb3BlcnR5S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChz
dHJpY3QgJiYga2luZCA9PT0gUHJvcGVydHlLaW5kLkRhdGEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RHVwbGljYXRlUHJv
cGVydHkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgIT09IFByb3BlcnR5
S2luZC5EYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQo
e30sIE1lc3NhZ2VzLkFjY2Vzc29yRGF0YVByb3BlcnR5KTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChraW5k
ID09PSBQcm9wZXJ0eUtpbmQuRGF0YSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KHt9LCBNZXNzYWdlcy5BY2Nlc3NvckRhdGFQcm9wZXJ0eSk7CisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwW2tleV0gJiBraW5kKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLkFjY2Vzc29yR2V0U2V0
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBtYXBba2V5XSB8PSBraW5kOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBtYXBba2V5XSA9IGtpbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3Bl
cnRpZXMucHVzaChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGlmICghbWF0Y2goJ30nKSkgewor
ICAgICAgICAgICAgICAgIGV4cGVjdCgnLCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgZXhwZWN0KCd9Jyk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQo
ZGVsZWdhdGUuY3JlYXRlT2JqZWN0RXhwcmVzc2lvbihwcm9wZXJ0aWVzKSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgLy8gMTEuMS42IFRoZSBHcm91cGluZyBPcGVyYXRvcgorCisgICAgZnVu
Y3Rpb24gcGFyc2VHcm91cEV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBleHByOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKwor
ICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKwor
ICAgIC8vIDExLjEgUHJpbWFyeSBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFyc2VQcmlt
YXJ5RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHR5cGUsIHRva2VuLCBleHByLCBzdGFydFRv
a2VuOworCisgICAgICAgIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAgICAgICByZXR1cm4gcGFy
c2VHcm91cEV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChtYXRjaCgnWycp
KSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheUluaXRpYWxpc2VyKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAobWF0Y2goJ3snKSkgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNl
T2JqZWN0SW5pdGlhbGlzZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIHR5cGUgPSBsb29rYWhl
YWQudHlwZTsKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBpZiAo
dHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAgZXhwciA9ICBkZWxlZ2F0
ZS5jcmVhdGVJZGVudGlmaWVyKGxleCgpLnZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBl
ID09PSBUb2tlbi5TdHJpbmdMaXRlcmFsIHx8IHR5cGUgPT09IFRva2VuLk51bWVyaWNMaXRlcmFs
KSB7CisgICAgICAgICAgICBpZiAoc3RyaWN0ICYmIGxvb2thaGVhZC5vY3RhbCkgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudChsb29rYWhlYWQsIE1lc3NhZ2VzLlN0cmljdE9j
dGFsTGl0ZXJhbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUu
Y3JlYXRlTGl0ZXJhbChsZXgoKSk7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gVG9rZW4u
S2V5d29yZCkgeworICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZnVuY3Rpb24nKSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgndGhpcycpKSB7CisgICAgICAg
ICAgICAgICAgbGV4KCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVRo
aXNFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRo
cm93VW5leHBlY3RlZChsZXgoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
dHlwZSA9PT0gVG9rZW4uQm9vbGVhbkxpdGVyYWwpIHsKKyAgICAgICAgICAgIHRva2VuID0gbGV4
KCk7CisgICAgICAgICAgICB0b2tlbi52YWx1ZSA9ICh0b2tlbi52YWx1ZSA9PT0gJ3RydWUnKTsK
KyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKTsKKyAgICAg
ICAgfSBlbHNlIGlmICh0eXBlID09PSBUb2tlbi5OdWxsTGl0ZXJhbCkgeworICAgICAgICAgICAg
dG9rZW4gPSBsZXgoKTsKKyAgICAgICAgICAgIHRva2VuLnZhbHVlID0gbnVsbDsKKyAgICAgICAg
ICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHRva2VuKTsKKyAgICAgICAgfSBlbHNl
IGlmIChtYXRjaCgnLycpIHx8IG1hdGNoKCcvPScpKSB7CisgICAgICAgICAgICBpZiAodHlwZW9m
IGV4dHJhLnRva2VucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBleHByID0g
ZGVsZWdhdGUuY3JlYXRlTGl0ZXJhbChjb2xsZWN0UmVnZXgoKSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVMaXRlcmFsKHNjYW5S
ZWdFeHAoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwZWVrKCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobGV4KCkpOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAg
fQorCisgICAgLy8gMTEuMiBMZWZ0LUhhbmQtU2lkZSBFeHByZXNzaW9ucworCisgICAgZnVuY3Rp
b24gcGFyc2VBcmd1bWVudHMoKSB7CisgICAgICAgIHZhciBhcmdzID0gW107CisKKyAgICAgICAg
ZXhwZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAgICBhcmdzLnB1c2gocGFyc2VB
c3NpZ25tZW50RXhwcmVzc2lvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAobWF0Y2goJyknKSkg
eworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZXhwZWN0KCcsJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBleHBlY3QoJyknKTsKKworICAgICAgICByZXR1cm4gYXJnczsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBwYXJzZU5vbkNvbXB1dGVkUHJvcGVydHkoKSB7CisgICAgICAgIHZhciB0b2tlbiwgc3Rh
cnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICB0b2tl
biA9IGxleCgpOworCisgICAgICAgIGlmICghaXNJZGVudGlmaWVyTmFtZSh0b2tlbikpIHsKKyAg
ICAgICAgICAgIHRocm93VW5leHBlY3RlZCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVJZGVudGlmaWVyKHRva2VuLnZh
bHVlKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VOb25Db21wdXRl
ZE1lbWJlcigpIHsKKyAgICAgICAgZXhwZWN0KCcuJyk7CisKKyAgICAgICAgcmV0dXJuIHBhcnNl
Tm9uQ29tcHV0ZWRQcm9wZXJ0eSgpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQ29tcHV0
ZWRNZW1iZXIoKSB7CisgICAgICAgIHZhciBleHByOworCisgICAgICAgIGV4cGVjdCgnWycpOwor
CisgICAgICAgIGV4cHIgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3QoJ10n
KTsKKworICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZU5l
d0V4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciBjYWxsZWUsIGFyZ3MsIHN0YXJ0VG9rZW47CisK
KyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0S2V5d29yZCgn
bmV3Jyk7CisgICAgICAgIGNhbGxlZSA9IHBhcnNlTGVmdEhhbmRTaWRlRXhwcmVzc2lvbigpOwor
ICAgICAgICBhcmdzID0gbWF0Y2goJygnKSA/IHBhcnNlQXJndW1lbnRzKCkgOiBbXTsKKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVOZXdFeHByZXNzaW9u
KGNhbGxlZSwgYXJncyksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNl
TGVmdEhhbmRTaWRlRXhwcmVzc2lvbkFsbG93Q2FsbCgpIHsKKyAgICAgICAgdmFyIHByZXZpb3Vz
QWxsb3dJbiwgZXhwciwgYXJncywgcHJvcGVydHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3Rh
cnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5h
bGxvd0luOworICAgICAgICBzdGF0ZS5hbGxvd0luID0gdHJ1ZTsKKyAgICAgICAgZXhwciA9IG1h
dGNoS2V5d29yZCgnbmV3JykgPyBwYXJzZU5ld0V4cHJlc3Npb24oKSA6IHBhcnNlUHJpbWFyeUV4
cHJlc3Npb24oKTsKKyAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHByZXZpb3VzQWxsb3dJbjsKKwor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpZiAobWF0Y2goJy4nKSkgeworICAgICAg
ICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwg
cHJvcGVydHkpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtYXRjaCgnKCcpKSB7CisgICAgICAg
ICAgICAgICAgYXJncyA9IHBhcnNlQXJndW1lbnRzKCk7CisgICAgICAgICAgICAgICAgZXhwciA9
IGRlbGVnYXRlLmNyZWF0ZUNhbGxFeHByZXNzaW9uKGV4cHIsIGFyZ3MpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChtYXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJz
ZUNvbXB1dGVkTWVtYmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0
ZU1lbWJlckV4cHJlc3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBleHByOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRTaWRlRXhw
cmVzc2lvbigpIHsKKyAgICAgICAgdmFyIHByZXZpb3VzQWxsb3dJbiwgZXhwciwgcHJvcGVydHks
IHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAg
ICBwcmV2aW91c0FsbG93SW4gPSBzdGF0ZS5hbGxvd0luOworICAgICAgICBleHByID0gbWF0Y2hL
ZXl3b3JkKCduZXcnKSA/IHBhcnNlTmV3RXhwcmVzc2lvbigpIDogcGFyc2VQcmltYXJ5RXhwcmVz
c2lvbigpOworICAgICAgICBzdGF0ZS5hbGxvd0luID0gcHJldmlvdXNBbGxvd0luOworCisgICAg
ICAgIHdoaWxlIChtYXRjaCgnLicpIHx8IG1hdGNoKCdbJykpIHsKKyAgICAgICAgICAgIGlmICht
YXRjaCgnWycpKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBwYXJzZUNvbXB1dGVkTWVt
YmVyKCk7CisgICAgICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZU1lbWJlckV4cHJl
c3Npb24oJ1snLCBleHByLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHByb3BlcnR5ID0gcGFyc2VOb25Db21wdXRlZE1lbWJlcigpOworICAgICAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVNZW1iZXJFeHByZXNzaW9uKCcuJywgZXhwciwg
cHJvcGVydHkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChl
eHByLCBzdGFydFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAg
IH0KKworICAgIC8vIDExLjMgUG9zdGZpeCBFeHByZXNzaW9ucworCisgICAgZnVuY3Rpb24gcGFy
c2VQb3N0Zml4RXhwcmVzc2lvbigpIHsKKyAgICAgICAgdmFyIGV4cHIsIHRva2VuLCBzdGFydFRv
a2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cHIgPSBwYXJzZUxlZnRIYW5kU2lkZUV4cHJl
c3Npb25BbGxvd0NhbGwoKTsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgPT09IFRva2Vu
LlB1bmN0dWF0b3IpIHsKKyAgICAgICAgICAgIGlmICgobWF0Y2goJysrJykgfHwgbWF0Y2goJy0t
JykpICYmICFwZWVrTGluZVRlcm1pbmF0b3IoKSkgeworICAgICAgICAgICAgICAgIC8vIDExLjMu
MSwgMTEuMy4yCisgICAgICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5
bnRheC5JZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdExIU1Bv
c3RmaXgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghaXNMZWZ0
SGFuZFNpZGUoZXhwcikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHt9LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Bc3NpZ25tZW50KTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIg
PSBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVBvc3RmaXhFeHByZXNzaW9uKHRva2Vu
LnZhbHVlLCBleHByKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gZXhwcjsKKyAgICB9CisKKyAgICAvLyAxMS40IFVuYXJ5IE9wZXJhdG9y
cworCisgICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZhciB0
b2tlbiwgZXhwciwgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAobG9va2FoZWFkLnR5cGUgIT09
IFRva2VuLlB1bmN0dWF0b3IgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLktleXdvcmQpIHsK
KyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJysrJykgfHwgbWF0Y2goJy0tJykpIHsKKyAgICAgICAgICAgIHN0YXJ0
VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAgICAgICAg
ICAgZXhwciA9IHBhcnNlVW5hcnlFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAvLyAxMS40LjQs
IDExLjQuNQorICAgICAgICAgICAgaWYgKHN0cmljdCAmJiBleHByLnR5cGUgPT09IFN5bnRheC5J
ZGVudGlmaWVyICYmIGlzUmVzdHJpY3RlZFdvcmQoZXhwci5uYW1lKSkgeworICAgICAgICAgICAg
ICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0TEhTUHJlZml4KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lkZShleHByKSkgewor
ICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuSW52YWxpZExI
U0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGV4cHIgPSBkZWxl
Z2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9rZW4udmFsdWUsIGV4cHIpOworICAgICAgICAg
ICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhwciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0g
ZWxzZSBpZiAobWF0Y2goJysnKSB8fCBtYXRjaCgnLScpIHx8IG1hdGNoKCd+JykgfHwgbWF0Y2go
JyEnKSkgeworICAgICAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgICAg
IHRva2VuID0gbGV4KCk7CisgICAgICAgICAgICBleHByID0gcGFyc2VVbmFyeUV4cHJlc3Npb24o
KTsKKyAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVVbmFyeUV4cHJlc3Npb24odG9r
ZW4udmFsdWUsIGV4cHIpOworICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLm1hcmtFbmQoZXhw
ciwgc3RhcnRUb2tlbik7CisgICAgICAgIH0gZWxzZSBpZiAobWF0Y2hLZXl3b3JkKCdkZWxldGUn
KSB8fCBtYXRjaEtleXdvcmQoJ3ZvaWQnKSB8fCBtYXRjaEtleXdvcmQoJ3R5cGVvZicpKSB7Cisg
ICAgICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAg
ICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZVVuYXJ5RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwg
ZXhwcik7CisgICAgICAgICAgICBleHByID0gZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFydFRv
a2VuKTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgZXhwci5vcGVyYXRvciA9PT0gJ2RlbGV0
ZScgJiYgZXhwci5hcmd1bWVudC50eXBlID09PSBTeW50YXguSWRlbnRpZmllcikgeworICAgICAg
ICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0RGVsZXRlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGV4cHIgPSBwYXJz
ZVBvc3RmaXhFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZXhwcjsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBiaW5hcnlQcmVjZWRlbmNlKHRva2VuLCBhbGxvd0luKSB7
CisgICAgICAgIHZhciBwcmVjID0gMDsKKworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9r
ZW4uUHVuY3R1YXRvciAmJiB0b2tlbi50eXBlICE9PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAodG9rZW4udmFsdWUp
IHsKKyAgICAgICAgY2FzZSAnfHwnOgorICAgICAgICAgICAgcHJlYyA9IDE7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlICcmJic6CisgICAgICAgICAgICBwcmVjID0gMjsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgcHJlYyA9
IDM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAg
IHByZWMgPSA0OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnJic6CisgICAg
ICAgICAgICBwcmVjID0gNTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJz09
JzoKKyAgICAgICAgY2FzZSAnIT0nOgorICAgICAgICBjYXNlICc9PT0nOgorICAgICAgICBjYXNl
ICchPT0nOgorICAgICAgICAgICAgcHJlYyA9IDY7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlICc8JzoKKyAgICAgICAgY2FzZSAnPic6CisgICAgICAgIGNhc2UgJzw9JzoKKyAg
ICAgICAgY2FzZSAnPj0nOgorICAgICAgICBjYXNlICdpbnN0YW5jZW9mJzoKKyAgICAgICAgICAg
IHByZWMgPSA3OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnaW4nOgorICAg
ICAgICAgICAgcHJlYyA9IGFsbG93SW4gPyA3IDogMDsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgJzw8JzoKKyAgICAgICAgY2FzZSAnPj4nOgorICAgICAgICBjYXNlICc+Pj4n
OgorICAgICAgICAgICAgcHJlYyA9IDg7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
YXNlICcrJzoKKyAgICAgICAgY2FzZSAnLSc6CisgICAgICAgICAgICBwcmVjID0gOTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJyonOgorICAgICAgICBjYXNlICcvJzoKKyAg
ICAgICAgY2FzZSAnJSc6CisgICAgICAgICAgICBwcmVjID0gMTE7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICByZXR1cm4gcHJlYzsKKyAgICB9CisKKyAgICAvLyAxMS41IE11bHRpcGxpY2F0aXZl
IE9wZXJhdG9ycworICAgIC8vIDExLjYgQWRkaXRpdmUgT3BlcmF0b3JzCisgICAgLy8gMTEuNyBC
aXR3aXNlIFNoaWZ0IE9wZXJhdG9ycworICAgIC8vIDExLjggUmVsYXRpb25hbCBPcGVyYXRvcnMK
KyAgICAvLyAxMS45IEVxdWFsaXR5IE9wZXJhdG9ycworICAgIC8vIDExLjEwIEJpbmFyeSBCaXR3
aXNlIE9wZXJhdG9ycworICAgIC8vIDExLjExIEJpbmFyeSBMb2dpY2FsIE9wZXJhdG9ycworCisg
ICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgbWFya2Vy
LCBtYXJrZXJzLCBleHByLCB0b2tlbiwgcHJlYywgc3RhY2ssIHJpZ2h0LCBvcGVyYXRvciwgbGVm
dCwgaTsKKworICAgICAgICBtYXJrZXIgPSBsb29rYWhlYWQ7CisgICAgICAgIGxlZnQgPSBwYXJz
ZVVuYXJ5RXhwcmVzc2lvbigpOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAg
ICBwcmVjID0gYmluYXJ5UHJlY2VkZW5jZSh0b2tlbiwgc3RhdGUuYWxsb3dJbik7CisgICAgICAg
IGlmIChwcmVjID09PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbGVmdDsKKyAgICAgICAgfQor
ICAgICAgICB0b2tlbi5wcmVjID0gcHJlYzsKKyAgICAgICAgbGV4KCk7CisKKyAgICAgICAgbWFy
a2VycyA9IFttYXJrZXIsIGxvb2thaGVhZF07CisgICAgICAgIHJpZ2h0ID0gcGFyc2VVbmFyeUV4
cHJlc3Npb24oKTsKKworICAgICAgICBzdGFjayA9IFtsZWZ0LCB0b2tlbiwgcmlnaHRdOworCisg
ICAgICAgIHdoaWxlICgocHJlYyA9IGJpbmFyeVByZWNlZGVuY2UobG9va2FoZWFkLCBzdGF0ZS5h
bGxvd0luKSkgPiAwKSB7CisKKyAgICAgICAgICAgIC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBl
eHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy4KKyAgICAgICAgICAgIHdo
aWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0g
Ml0ucHJlYykpIHsKKyAgICAgICAgICAgICAgICByaWdodCA9IHN0YWNrLnBvcCgpOworICAgICAg
ICAgICAgICAgIG9wZXJhdG9yID0gc3RhY2sucG9wKCkudmFsdWU7CisgICAgICAgICAgICAgICAg
bGVmdCA9IHN0YWNrLnBvcCgpOworICAgICAgICAgICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVh
dGVCaW5hcnlFeHByZXNzaW9uKG9wZXJhdG9yLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAg
ICAgbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAgICAgICBtYXJrZXIgPSBtYXJrZXJzW21hcmtl
cnMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBt
YXJrZXIpOworICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goZXhwcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFNoaWZ0LgorICAgICAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAg
ICAgICAgICAgIHRva2VuLnByZWMgPSBwcmVjOworICAgICAgICAgICAgc3RhY2sucHVzaCh0b2tl
bik7CisgICAgICAgICAgICBtYXJrZXJzLnB1c2gobG9va2FoZWFkKTsKKyAgICAgICAgICAgIGV4
cHIgPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbigpOworICAgICAgICAgICAgc3RhY2sucHVzaChleHBy
KTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmFsIHJlZHVjZSB0byBjbGVhbi11cCB0aGUg
c3RhY2suCisgICAgICAgIGkgPSBzdGFjay5sZW5ndGggLSAxOworICAgICAgICBleHByID0gc3Rh
Y2tbaV07CisgICAgICAgIG1hcmtlcnMucG9wKCk7CisgICAgICAgIHdoaWxlIChpID4gMSkgewor
ICAgICAgICAgICAgZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUJpbmFyeUV4cHJlc3Npb24oc3RhY2tb
aSAtIDFdLnZhbHVlLCBzdGFja1tpIC0gMl0sIGV4cHIpOworICAgICAgICAgICAgaSAtPSAyOwor
ICAgICAgICAgICAgbWFya2VyID0gbWFya2Vycy5wb3AoKTsKKyAgICAgICAgICAgIGRlbGVnYXRl
Lm1hcmtFbmQoZXhwciwgbWFya2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHBy
OworICAgIH0KKworCisgICAgLy8gMTEuMTIgQ29uZGl0aW9uYWwgT3BlcmF0b3IKKworICAgIGZ1
bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgZXhwciwg
cHJldmlvdXNBbGxvd0luLCBjb25zZXF1ZW50LCBhbHRlcm5hdGUsIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHByID0gcGFyc2VCaW5h
cnlFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCc/JykpIHsKKyAgICAgICAgICAg
IGxleCgpOworICAgICAgICAgICAgcHJldmlvdXNBbGxvd0luID0gc3RhdGUuYWxsb3dJbjsKKyAg
ICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworICAgICAgICAgICAgY29uc2VxdWVudCA9
IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAgICAgICAgIHN0YXRlLmFsbG93SW4g
PSBwcmV2aW91c0FsbG93SW47CisgICAgICAgICAgICBleHBlY3QoJzonKTsKKyAgICAgICAgICAg
IGFsdGVybmF0ZSA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKworICAgICAgICAgICAg
ZXhwciA9IGRlbGVnYXRlLmNyZWF0ZUNvbmRpdGlvbmFsRXhwcmVzc2lvbihleHByLCBjb25zZXF1
ZW50LCBhbHRlcm5hdGUpOworICAgICAgICAgICAgZGVsZWdhdGUubWFya0VuZChleHByLCBzdGFy
dFRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBleHByOworICAgIH0KKworICAg
IC8vIDExLjEzIEFzc2lnbm1lbnQgT3BlcmF0b3JzCisKKyAgICBmdW5jdGlvbiBwYXJzZUFzc2ln
bm1lbnRFeHByZXNzaW9uKCkgeworICAgICAgICB2YXIgdG9rZW4sIGxlZnQsIHJpZ2h0LCBub2Rl
LCBzdGFydFRva2VuOworCisgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworICAgICAgICBzdGFy
dFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIG5vZGUgPSBsZWZ0ID0gcGFyc2VDb25kaXRp
b25hbEV4cHJlc3Npb24oKTsKKworICAgICAgICBpZiAobWF0Y2hBc3NpZ24oKSkgeworICAgICAg
ICAgICAgLy8gTGVmdEhhbmRTaWRlRXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgKCFpc0xlZnRI
YW5kU2lkZShsZWZ0KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3JUb2xlcmFudCh7fSwg
TWVzc2FnZXMuSW52YWxpZExIU0luQXNzaWdubWVudCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIDExLjEzLjEKKyAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgbGVmdC50eXBlID09
PSBTeW50YXguSWRlbnRpZmllciAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGxlZnQubmFtZSkpIHsKKyAg
ICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdExI
U0Fzc2lnbm1lbnQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbiA9IGxleCgp
OworICAgICAgICAgICAgcmlnaHQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICBub2RlID0gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVBc3NpZ25tZW50
RXhwcmVzc2lvbih0b2tlbi52YWx1ZSwgbGVmdCwgcmlnaHQpLCBzdGFydFRva2VuKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBub2RlOworICAgIH0KKworICAgIC8vIDExLjE0IENvbW1h
IE9wZXJhdG9yCisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oKSB7CisgICAgICAgIHZh
ciBleHByLCBzdGFydFRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgIGV4cHIgPSBwYXJzZUFz
c2lnbm1lbnRFeHByZXNzaW9uKCk7CisKKyAgICAgICAgaWYgKG1hdGNoKCcsJykpIHsKKyAgICAg
ICAgICAgIGV4cHIgPSBkZWxlZ2F0ZS5jcmVhdGVTZXF1ZW5jZUV4cHJlc3Npb24oWyBleHByIF0p
OworCisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIW1hdGNoKCcsJykpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxleCgpOworICAgICAgICAgICAgICAgIGV4cHIu
ZXhwcmVzc2lvbnMucHVzaChwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBkZWxlZ2F0ZS5tYXJrRW5kKGV4cHIsIHN0YXJ0VG9rZW4pOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGV4cHI7CisgICAgfQorCisgICAgLy8gMTIuMSBC
bG9jaworCisgICAgZnVuY3Rpb24gcGFyc2VTdGF0ZW1lbnRMaXN0KCkgeworICAgICAgICB2YXIg
bGlzdCA9IFtdLAorICAgICAgICAgICAgc3RhdGVtZW50OworCisgICAgICAgIHdoaWxlIChpbmRl
eCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRlbWVudCA9IHBhcnNl
U291cmNlRWxlbWVudCgpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBzdGF0ZW1lbnQgPT09ICd1
bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBsaXN0LnB1c2goc3RhdGVtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBsaXN0OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlQmxvY2soKSB7CisgICAgICAgIHZh
ciBibG9jaywgc3RhcnRUb2tlbjsKKworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOwor
ICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBibG9jayA9IHBhcnNlU3RhdGVtZW50TGlz
dCgpOworCisgICAgICAgIGV4cGVjdCgnfScpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5t
YXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50KGJsb2NrKSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgLy8gMTIuMiBWYXJpYWJsZSBTdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9u
IHBhcnNlVmFyaWFibGVJZGVudGlmaWVyKCkgeworICAgICAgICB2YXIgdG9rZW4sIHN0YXJ0VG9r
ZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBs
ZXgoKTsKKworICAgICAgICBpZiAodG9rZW4udHlwZSAhPT0gVG9rZW4uSWRlbnRpZmllcikgewor
ICAgICAgICAgICAgdGhyb3dVbmV4cGVjdGVkKHRva2VuKTsKKyAgICAgICAgfQorCisgICAgICAg
IHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUlkZW50aWZpZXIodG9rZW4u
dmFsdWUpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxl
RGVjbGFyYXRpb24oa2luZCkgeworICAgICAgICB2YXIgaW5pdCA9IG51bGwsIGlkLCBzdGFydFRv
a2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgIGlkID0gcGFy
c2VWYXJpYWJsZUlkZW50aWZpZXIoKTsKKworICAgICAgICAvLyAxMi4yLjEKKyAgICAgICAgaWYg
KHN0cmljdCAmJiBpc1Jlc3RyaWN0ZWRXb3JkKGlkLm5hbWUpKSB7CisgICAgICAgICAgICB0aHJv
d0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdFZhck5hbWUpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGtpbmQgPT09ICdjb25zdCcpIHsKKyAgICAgICAgICAgIGV4cGVjdCgnPScp
OworICAgICAgICAgICAgaW5pdCA9IHBhcnNlQXNzaWdubWVudEV4cHJlc3Npb24oKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChtYXRjaCgnPScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAg
ICAgIGluaXQgPSBwYXJzZUFzc2lnbm1lbnRFeHByZXNzaW9uKCk7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVhdGVWYXJpYWJsZURlY2xh
cmF0b3IoaWQsIGluaXQpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJz
ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGtpbmQpIHsKKyAgICAgICAgdmFyIGxpc3QgPSBbXTsK
KworICAgICAgICBkbyB7CisgICAgICAgICAgICBsaXN0LnB1c2gocGFyc2VWYXJpYWJsZURlY2xh
cmF0aW9uKGtpbmQpKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2goJywnKSkgeworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGV4KCk7CisgICAgICAg
IH0gd2hpbGUgKGluZGV4IDwgbGVuZ3RoKTsKKworICAgICAgICByZXR1cm4gbGlzdDsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIg
ZGVjbGFyYXRpb25zOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3ZhcicpOworCisgICAgICAg
IGRlY2xhcmF0aW9ucyA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKTsKKworICAgICAg
ICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVZh
cmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCAndmFyJyk7CisgICAgfQorCisgICAgLy8g
a2luZCBtYXkgYmUgYGNvbnN0YCBvciBgbGV0YAorICAgIC8vIEJvdGggYXJlIGV4cGVyaW1lbnRh
bCBhbmQgbm90IGluIHRoZSBzcGVjaWZpY2F0aW9uIHlldC4KKyAgICAvLyBzZWUgaHR0cDovL3dp
a2kuZWNtYXNjcmlwdC5vcmcvZG9rdS5waHA/aWQ9aGFybW9ueTpjb25zdAorICAgIC8vIGFuZCBo
dHRwOi8vd2lraS5lY21hc2NyaXB0Lm9yZy9kb2t1LnBocD9pZD1oYXJtb255OmxldAorICAgIGZ1
bmN0aW9uIHBhcnNlQ29uc3RMZXREZWNsYXJhdGlvbihraW5kKSB7CisgICAgICAgIHZhciBkZWNs
YXJhdGlvbnMsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsK
KworICAgICAgICBleHBlY3RLZXl3b3JkKGtpbmQpOworCisgICAgICAgIGRlY2xhcmF0aW9ucyA9
IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qoa2luZCk7CisKKyAgICAgICAgY29uc3VtZVNl
bWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNy
ZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb25zLCBraW5kKSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgLy8gMTIuMyBFbXB0eSBTdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBh
cnNlRW1wdHlTdGF0ZW1lbnQoKSB7CisgICAgICAgIGV4cGVjdCgnOycpOworICAgICAgICByZXR1
cm4gZGVsZWdhdGUuY3JlYXRlRW1wdHlTdGF0ZW1lbnQoKTsKKyAgICB9CisKKyAgICAvLyAxMi40
IEV4cHJlc3Npb24gU3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb25TdGF0
ZW1lbnQoKSB7CisgICAgICAgIHZhciBleHByID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAg
IGNvbnN1bWVTZW1pY29sb24oKTsKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUV4cHJl
c3Npb25TdGF0ZW1lbnQoZXhwcik7CisgICAgfQorCisgICAgLy8gMTIuNSBJZiBzdGF0ZW1lbnQK
KworICAgIGZ1bmN0aW9uIHBhcnNlSWZTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciB0ZXN0LCBj
b25zZXF1ZW50LCBhbHRlcm5hdGU7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnaWYnKTsKKwor
ICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAgICAgICAgY29uc2VxdWVudCA9IHBhcnNlU3Rh
dGVtZW50KCk7CisKKyAgICAgICAgaWYgKG1hdGNoS2V5d29yZCgnZWxzZScpKSB7CisgICAgICAg
ICAgICBsZXgoKTsKKyAgICAgICAgICAgIGFsdGVybmF0ZSA9IHBhcnNlU3RhdGVtZW50KCk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhbHRlcm5hdGUgPSBudWxsOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUlmU3RhdGVtZW50KHRlc3QsIGNvbnNl
cXVlbnQsIGFsdGVybmF0ZSk7CisgICAgfQorCisgICAgLy8gMTIuNiBJdGVyYXRpb24gU3RhdGVt
ZW50cworCisgICAgZnVuY3Rpb24gcGFyc2VEb1doaWxlU3RhdGVtZW50KCkgeworICAgICAgICB2
YXIgYm9keSwgdGVzdCwgb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgn
ZG8nKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOworICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3Rh
dGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsK
KworICAgICAgICBleHBlY3RLZXl3b3JkKCd3aGlsZScpOworCisgICAgICAgIGV4cGVjdCgnKCcp
OworCisgICAgICAgIHRlc3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBleHBlY3Qo
JyknKTsKKworICAgICAgICBpZiAobWF0Y2goJzsnKSkgeworICAgICAgICAgICAgbGV4KCk7Cisg
ICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlRG9XaGlsZVN0YXRlbWVu
dChib2R5LCB0ZXN0KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVdoaWxlU3RhdGVtZW50
KCkgeworICAgICAgICB2YXIgdGVzdCwgYm9keSwgb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgnd2hpbGUnKTsKKworICAgICAgICBleHBlY3QoJygnKTsKKworICAgICAg
ICB0ZXN0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisKKyAgICAgICAgZXhwZWN0KCcpJyk7CisKKyAg
ICAgICAgb2xkSW5JdGVyYXRpb24gPSBzdGF0ZS5pbkl0ZXJhdGlvbjsKKyAgICAgICAgc3RhdGUu
aW5JdGVyYXRpb24gPSB0cnVlOworCisgICAgICAgIGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwor
CisgICAgICAgIHN0YXRlLmluSXRlcmF0aW9uID0gb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAg
cmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVdoaWxlU3RhdGVtZW50KHRlc3QsIGJvZHkpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHBhcnNlRm9yVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKKyAgICAgICAg
dmFyIHRva2VuLCBkZWNsYXJhdGlvbnMsIHN0YXJ0VG9rZW47CisKKyAgICAgICAgc3RhcnRUb2tl
biA9IGxvb2thaGVhZDsKKyAgICAgICAgdG9rZW4gPSBsZXgoKTsKKyAgICAgICAgZGVjbGFyYXRp
b25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOworCisgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFy
YXRpb25zLCB0b2tlbi52YWx1ZSksIHN0YXJ0VG9rZW4pOworICAgIH0KKworICAgIGZ1bmN0aW9u
IHBhcnNlRm9yU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgaW5pdCwgdGVzdCwgdXBkYXRlLCBs
ZWZ0LCByaWdodCwgYm9keSwgb2xkSW5JdGVyYXRpb247CisKKyAgICAgICAgaW5pdCA9IHRlc3Qg
PSB1cGRhdGUgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2ZvcicpOworCisgICAg
ICAgIGV4cGVjdCgnKCcpOworCisgICAgICAgIGlmIChtYXRjaCgnOycpKSB7CisgICAgICAgICAg
ICBsZXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChtYXRjaEtleXdvcmQo
J3ZhcicpIHx8IG1hdGNoS2V5d29yZCgnbGV0JykpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZS5h
bGxvd0luID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5pdCA9IHBhcnNlRm9yVmFyaWFibGVE
ZWNsYXJhdGlvbigpOworICAgICAgICAgICAgICAgIHN0YXRlLmFsbG93SW4gPSB0cnVlOworCisg
ICAgICAgICAgICAgICAgaWYgKGluaXQuZGVjbGFyYXRpb25zLmxlbmd0aCA9PT0gMSAmJiBtYXRj
aEtleXdvcmQoJ2luJykpIHsKKyAgICAgICAgICAgICAgICAgICAgbGV4KCk7CisgICAgICAgICAg
ICAgICAgICAgIGxlZnQgPSBpbml0OworICAgICAgICAgICAgICAgICAgICByaWdodCA9IHBhcnNl
RXhwcmVzc2lvbigpOworICAgICAgICAgICAgICAgICAgICBpbml0ID0gbnVsbDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0YXRlLmFs
bG93SW4gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbml0ID0gcGFyc2VFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICAgICAgc3RhdGUuYWxsb3dJbiA9IHRydWU7CisKKyAgICAgICAgICAgICAg
ICBpZiAobWF0Y2hLZXl3b3JkKCdpbicpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIExlZnRI
YW5kU2lkZUV4cHJlc3Npb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0xlZnRIYW5kU2lk
ZShpbml0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50KHt9
LCBNZXNzYWdlcy5JbnZhbGlkTEhTSW5Gb3JJbik7CisgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICBsZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGlu
aXQ7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIGluaXQgPSBudWxsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgIGV4cGVjdCgnOycpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgeworCisgICAgICAgICAg
ICBpZiAoIW1hdGNoKCc7JykpIHsKKyAgICAgICAgICAgICAgICB0ZXN0ID0gcGFyc2VFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBleHBlY3QoJzsnKTsKKworICAgICAg
ICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICAgICAgdXBkYXRlID0gcGFyc2VF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBleHBlY3Qo
JyknKTsKKworICAgICAgICBvbGRJbkl0ZXJhdGlvbiA9IHN0YXRlLmluSXRlcmF0aW9uOworICAg
ICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9IHRydWU7CisKKyAgICAgICAgYm9keSA9IHBhcnNlU3Rh
dGVtZW50KCk7CisKKyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBvbGRJbkl0ZXJhdGlvbjsK
KworICAgICAgICByZXR1cm4gKHR5cGVvZiBsZWZ0ID09PSAndW5kZWZpbmVkJykgPworICAgICAg
ICAgICAgICAgIGRlbGVnYXRlLmNyZWF0ZUZvclN0YXRlbWVudChpbml0LCB0ZXN0LCB1cGRhdGUs
IGJvZHkpIDoKKyAgICAgICAgICAgICAgICBkZWxlZ2F0ZS5jcmVhdGVGb3JJblN0YXRlbWVudChs
ZWZ0LCByaWdodCwgYm9keSk7CisgICAgfQorCisgICAgLy8gMTIuNyBUaGUgY29udGludWUgc3Rh
dGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KCkgeworICAgICAg
ICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgnY29udGlu
dWUnKTsKKworICAgICAgICAvLyBPcHRpbWl6ZSB0aGUgbW9zdCBjb21tb24gZm9ybTogJ2NvbnRp
bnVlOycuCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsK
KyAgICAgICAgICAgIGxleCgpOworCisgICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9u
KSB7CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRp
bnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0
ZUNvbnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZWtM
aW5lVGVybWluYXRvcigpKSB7CisgICAgICAgICAgICBpZiAoIXN0YXRlLmluSXRlcmF0aW9uKSB7
CisgICAgICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVl
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZUNv
bnRpbnVlU3RhdGVtZW50KG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxvb2thaGVh
ZC50eXBlID09PSBUb2tlbi5JZGVudGlmaWVyKSB7CisgICAgICAgICAgICBsYWJlbCA9IHBhcnNl
VmFyaWFibGVJZGVudGlmaWVyKCk7CisKKyAgICAgICAgICAgIGtleSA9ICckJyArIGxhYmVsLm5h
bWU7CisgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs
bChzdGF0ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30s
IE1lc3NhZ2VzLlVua25vd25MYWJlbCwgbGFiZWwubmFtZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgaWYgKGxhYmVs
ID09PSBudWxsICYmICFzdGF0ZS5pbkl0ZXJhdGlvbikgeworICAgICAgICAgICAgdGhyb3dFcnJv
cih7fSwgTWVzc2FnZXMuSWxsZWdhbENvbnRpbnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5jcmVhdGVDb250aW51ZVN0YXRlbWVudChsYWJlbCk7CisgICAgfQorCisg
ICAgLy8gMTIuOCBUaGUgYnJlYWsgc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZUJyZWFr
U3RhdGVtZW50KCkgeworICAgICAgICB2YXIgbGFiZWwgPSBudWxsLCBrZXk7CisKKyAgICAgICAg
ZXhwZWN0S2V5d29yZCgnYnJlYWsnKTsKKworICAgICAgICAvLyBDYXRjaCB0aGUgdmVyeSBjb21t
b24gY2FzZSBmaXJzdDogaW1tZWRpYXRlbHkgYSBzZW1pY29sb24gKFUrMDAzQikuCisgICAgICAg
IGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4M0IpIHsKKyAgICAgICAgICAgIGxl
eCgpOworCisgICAgICAgICAgICBpZiAoIShzdGF0ZS5pbkl0ZXJhdGlvbiB8fCBzdGF0ZS5pblN3
aXRjaCkpIHsKKyAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5JbGxlZ2Fs
QnJlYWspOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3Jl
YXRlQnJlYWtTdGF0ZW1lbnQobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGVla0xp
bmVUZXJtaW5hdG9yKCkpIHsKKyAgICAgICAgICAgIGlmICghKHN0YXRlLmluSXRlcmF0aW9uIHx8
IHN0YXRlLmluU3dpdGNoKSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLklsbGVnYWxCcmVhayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBk
ZWxlZ2F0ZS5jcmVhdGVCcmVha1N0YXRlbWVudChudWxsKTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChsb29rYWhlYWQudHlwZSA9PT0gVG9rZW4uSWRlbnRpZmllcikgeworICAgICAgICAgICAg
bGFiZWwgPSBwYXJzZVZhcmlhYmxlSWRlbnRpZmllcigpOworCisgICAgICAgICAgICBrZXkgPSAn
JCcgKyBsYWJlbC5uYW1lOworICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093
blByb3BlcnR5LmNhbGwoc3RhdGUubGFiZWxTZXQsIGtleSkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5Vbmtub3duTGFiZWwsIGxhYmVsLm5hbWUpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworCisgICAg
ICAgIGlmIChsYWJlbCA9PT0gbnVsbCAmJiAhKHN0YXRlLmluSXRlcmF0aW9uIHx8IHN0YXRlLmlu
U3dpdGNoKSkgeworICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuSWxsZWdhbEJy
ZWFrKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVCcmVha1N0
YXRlbWVudChsYWJlbCk7CisgICAgfQorCisgICAgLy8gMTIuOSBUaGUgcmV0dXJuIHN0YXRlbWVu
dAorCisgICAgZnVuY3Rpb24gcGFyc2VSZXR1cm5TdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBh
cmd1bWVudCA9IG51bGw7CisKKyAgICAgICAgZXhwZWN0S2V5d29yZCgncmV0dXJuJyk7CisKKyAg
ICAgICAgaWYgKCFzdGF0ZS5pbkZ1bmN0aW9uQm9keSkgeworICAgICAgICAgICAgdGhyb3dFcnJv
clRvbGVyYW50KHt9LCBNZXNzYWdlcy5JbGxlZ2FsUmV0dXJuKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vICdyZXR1cm4nIGZvbGxvd2VkIGJ5IGEgc3BhY2UgYW5kIGFuIGlkZW50aWZpZXIgaXMg
dmVyeSBjb21tb24uCisgICAgICAgIGlmIChzb3VyY2UuY2hhckNvZGVBdChpbmRleCkgPT09IDB4
MjApIHsKKyAgICAgICAgICAgIGlmIChpc0lkZW50aWZpZXJTdGFydChzb3VyY2UuY2hhckNvZGVB
dChpbmRleCArIDEpKSkgeworICAgICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNz
aW9uKCk7CisgICAgICAgICAgICAgICAgY29uc3VtZVNlbWljb2xvbigpOworICAgICAgICAgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVSZXR1cm5TdGF0ZW1lbnQoYXJndW1lbnQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZWtMaW5lVGVybWluYXRvcigp
KSB7CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlUmV0dXJuU3RhdGVtZW50KG51
bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtYXRjaCgnOycpKSB7CisgICAgICAgICAg
ICBpZiAoIW1hdGNoKCd9JykgJiYgbG9va2FoZWFkLnR5cGUgIT09IFRva2VuLkVPRikgeworICAg
ICAgICAgICAgICAgIGFyZ3VtZW50ID0gcGFyc2VFeHByZXNzaW9uKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLmNyZWF0ZVJldHVyblN0YXRlbWVudChhcmd1bWVudCk7CisgICAgfQorCisg
ICAgLy8gMTIuMTAgVGhlIHdpdGggc3RhdGVtZW50CisKKyAgICBmdW5jdGlvbiBwYXJzZVdpdGhT
dGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBvYmplY3QsIGJvZHk7CisKKyAgICAgICAgaWYgKHN0
cmljdCkgeworICAgICAgICAgICAgLy8gVE9ETyhpa2FyaWVuYXRvcik6IFNob3VsZCB3ZSB1cGRh
dGUgdGhlIHRlc3QgY2FzZXMgaW5zdGVhZD8KKyAgICAgICAgICAgIHNraXBDb21tZW50KCk7Cisg
ICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoe30sIE1lc3NhZ2VzLlN0cmljdE1vZGVXaXRo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3dpdGgnKTsKKworICAgICAg
ICBleHBlY3QoJygnKTsKKworICAgICAgICBvYmplY3QgPSBwYXJzZUV4cHJlc3Npb24oKTsKKwor
ICAgICAgICBleHBlY3QoJyknKTsKKworICAgICAgICBib2R5ID0gcGFyc2VTdGF0ZW1lbnQoKTsK
KworICAgICAgICByZXR1cm4gZGVsZWdhdGUuY3JlYXRlV2l0aFN0YXRlbWVudChvYmplY3QsIGJv
ZHkpOworICAgIH0KKworICAgIC8vIDEyLjEwIFRoZSBzd2l0aCBzdGF0ZW1lbnQKKworICAgIGZ1
bmN0aW9uIHBhcnNlU3dpdGNoQ2FzZSgpIHsKKyAgICAgICAgdmFyIHRlc3QsIGNvbnNlcXVlbnQg
PSBbXSwgc3RhdGVtZW50LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29r
YWhlYWQ7CisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2RlZmF1bHQnKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICB0ZXN0ID0gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGV4cGVjdEtleXdvcmQoJ2Nhc2UnKTsKKyAgICAgICAgICAgIHRlc3QgPSBwYXJz
ZUV4cHJlc3Npb24oKTsKKyAgICAgICAgfQorICAgICAgICBleHBlY3QoJzonKTsKKworICAgICAg
ICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChtYXRjaCgnfScpIHx8
IG1hdGNoS2V5d29yZCgnZGVmYXVsdCcpIHx8IG1hdGNoS2V5d29yZCgnY2FzZScpKSB7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0ZW1lbnQg
PSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgY29uc2VxdWVudC5wdXNoKHN0YXRlbWVu
dCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVTd2l0Y2hDYXNlKHRlc3QsIGNvbnNlcXVlbnQpLCBzdGFydFRva2VuKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBwYXJzZVN3aXRjaFN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGRp
c2NyaW1pbmFudCwgY2FzZXMsIGNsYXVzZSwgb2xkSW5Td2l0Y2gsIGRlZmF1bHRGb3VuZDsKKwor
ICAgICAgICBleHBlY3RLZXl3b3JkKCdzd2l0Y2gnKTsKKworICAgICAgICBleHBlY3QoJygnKTsK
KworICAgICAgICBkaXNjcmltaW5hbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAgICAgICBl
eHBlY3QoJyknKTsKKworICAgICAgICBleHBlY3QoJ3snKTsKKworICAgICAgICBjYXNlcyA9IFtd
OworCisgICAgICAgIGlmIChtYXRjaCgnfScpKSB7CisgICAgICAgICAgICBsZXgoKTsKKyAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVTd2l0Y2hTdGF0ZW1lbnQoZGlzY3JpbWluYW50
LCBjYXNlcyk7CisgICAgICAgIH0KKworICAgICAgICBvbGRJblN3aXRjaCA9IHN0YXRlLmluU3dp
dGNoOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IHRydWU7CisgICAgICAgIGRlZmF1bHRGb3Vu
ZCA9IGZhbHNlOworCisgICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAg
ICAgaWYgKG1hdGNoKCd9JykpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNsYXVzZSA9IHBhcnNlU3dpdGNoQ2FzZSgpOworICAgICAgICAgICAg
aWYgKGNsYXVzZS50ZXN0ID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRG
b3VuZCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKHt9LCBNZXNzYWdlcy5NdWx0
aXBsZURlZmF1bHRzSW5Td2l0Y2gpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBkZWZhdWx0Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZXMu
cHVzaChjbGF1c2UpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGUuaW5Td2l0Y2ggPSBvbGRJ
blN3aXRjaDsKKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICByZXR1cm4gZGVsZWdh
dGUuY3JlYXRlU3dpdGNoU3RhdGVtZW50KGRpc2NyaW1pbmFudCwgY2FzZXMpOworICAgIH0KKwor
ICAgIC8vIDEyLjEzIFRoZSB0aHJvdyBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlVGhy
b3dTdGF0ZW1lbnQoKSB7CisgICAgICAgIHZhciBhcmd1bWVudDsKKworICAgICAgICBleHBlY3RL
ZXl3b3JkKCd0aHJvdycpOworCisgICAgICAgIGlmIChwZWVrTGluZVRlcm1pbmF0b3IoKSkgewor
ICAgICAgICAgICAgdGhyb3dFcnJvcih7fSwgTWVzc2FnZXMuTmV3bGluZUFmdGVyVGhyb3cpOwor
ICAgICAgICB9CisKKyAgICAgICAgYXJndW1lbnQgPSBwYXJzZUV4cHJlc3Npb24oKTsKKworICAg
ICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0
ZVRocm93U3RhdGVtZW50KGFyZ3VtZW50KTsKKyAgICB9CisKKyAgICAvLyAxMi4xNCBUaGUgdHJ5
IHN0YXRlbWVudAorCisgICAgZnVuY3Rpb24gcGFyc2VDYXRjaENsYXVzZSgpIHsKKyAgICAgICAg
dmFyIHBhcmFtLCBib2R5LCBzdGFydFRva2VuOworCisgICAgICAgIHN0YXJ0VG9rZW4gPSBsb29r
YWhlYWQ7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2NhdGNoJyk7CisKKyAgICAgICAgZXhwZWN0
KCcoJyk7CisgICAgICAgIGlmIChtYXRjaCgnKScpKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhw
ZWN0ZWQobG9va2FoZWFkKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtID0gcGFyc2VWYXJp
YWJsZUlkZW50aWZpZXIoKTsKKyAgICAgICAgLy8gMTIuMTQuMQorICAgICAgICBpZiAoc3RyaWN0
ICYmIGlzUmVzdHJpY3RlZFdvcmQocGFyYW0ubmFtZSkpIHsKKyAgICAgICAgICAgIHRocm93RXJy
b3JUb2xlcmFudCh7fSwgTWVzc2FnZXMuU3RyaWN0Q2F0Y2hWYXJpYWJsZSk7CisgICAgICAgIH0K
KworICAgICAgICBleHBlY3QoJyknKTsKKyAgICAgICAgYm9keSA9IHBhcnNlQmxvY2soKTsKKyAg
ICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlQ2F0Y2hDbGF1c2Uo
cGFyYW0sIGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXJzZVRy
eVN0YXRlbWVudCgpIHsKKyAgICAgICAgdmFyIGJsb2NrLCBoYW5kbGVycyA9IFtdLCBmaW5hbGl6
ZXIgPSBudWxsOworCisgICAgICAgIGV4cGVjdEtleXdvcmQoJ3RyeScpOworCisgICAgICAgIGJs
b2NrID0gcGFyc2VCbG9jaygpOworCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2NhdGNoJykp
IHsKKyAgICAgICAgICAgIGhhbmRsZXJzLnB1c2gocGFyc2VDYXRjaENsYXVzZSgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChtYXRjaEtleXdvcmQoJ2ZpbmFsbHknKSkgeworICAgICAgICAg
ICAgbGV4KCk7CisgICAgICAgICAgICBmaW5hbGl6ZXIgPSBwYXJzZUJsb2NrKCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaGFuZGxlcnMubGVuZ3RoID09PSAwICYmICFmaW5hbGl6ZXIpIHsK
KyAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3NhZ2VzLk5vQ2F0Y2hPckZpbmFsbHkpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGRlbGVnYXRlLmNyZWF0ZVRyeVN0YXRlbWVudChi
bG9jaywgW10sIGhhbmRsZXJzLCBmaW5hbGl6ZXIpOworICAgIH0KKworICAgIC8vIDEyLjE1IFRo
ZSBkZWJ1Z2dlciBzdGF0ZW1lbnQKKworICAgIGZ1bmN0aW9uIHBhcnNlRGVidWdnZXJTdGF0ZW1l
bnQoKSB7CisgICAgICAgIGV4cGVjdEtleXdvcmQoJ2RlYnVnZ2VyJyk7CisKKyAgICAgICAgY29u
c3VtZVNlbWljb2xvbigpOworCisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5jcmVhdGVEZWJ1Z2dl
clN0YXRlbWVudCgpOworICAgIH0KKworICAgIC8vIDEyIFN0YXRlbWVudHMKKworICAgIGZ1bmN0
aW9uIHBhcnNlU3RhdGVtZW50KCkgeworICAgICAgICB2YXIgdHlwZSA9IGxvb2thaGVhZC50eXBl
LAorICAgICAgICAgICAgZXhwciwKKyAgICAgICAgICAgIGxhYmVsZWRCb2R5LAorICAgICAgICAg
ICAga2V5LAorICAgICAgICAgICAgc3RhcnRUb2tlbjsKKworICAgICAgICBpZiAodHlwZSA9PT0g
VG9rZW4uRU9GKSB7CisgICAgICAgICAgICB0aHJvd1VuZXhwZWN0ZWQobG9va2FoZWFkKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0eXBlID09PSBUb2tlbi5QdW5jdHVhdG9yICYmIGxvb2th
aGVhZC52YWx1ZSA9PT0gJ3snKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VCbG9jaygpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBp
ZiAodHlwZSA9PT0gVG9rZW4uUHVuY3R1YXRvcikgeworICAgICAgICAgICAgc3dpdGNoIChsb29r
YWhlYWQudmFsdWUpIHsKKyAgICAgICAgICAgIGNhc2UgJzsnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRW1wdHlTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICcoJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUu
bWFya0VuZChwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHR5cGUgPT09IFRva2VuLktleXdvcmQpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobG9va2FoZWFkLnZhbHVlKSB7CisgICAgICAgICAgICBjYXNlICdicmVhayc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VCcmVha1N0YXRl
bWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ2NvbnRpbnVlJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZUNvbnRpbnVlU3RhdGVtZW50
KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnZGVidWdnZXInOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlRGVidWdnZXJTdGF0ZW1lbnQoKSwg
c3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdkbyc6CisgICAgICAgICAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VEb1doaWxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4p
OworICAgICAgICAgICAgY2FzZSAnZm9yJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdh
dGUubWFya0VuZChwYXJzZUZvclN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAg
IGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0Vu
ZChwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBj
YXNlICdpZic6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VJ
ZlN0YXRlbWVudCgpLCBzdGFydFRva2VuKTsKKyAgICAgICAgICAgIGNhc2UgJ3JldHVybic6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLm1hcmtFbmQocGFyc2VSZXR1cm5TdGF0ZW1l
bnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICdzd2l0Y2gnOgorICAgICAgICAg
ICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlU3dpdGNoU3RhdGVtZW50KCksIHN0
YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAndGhyb3cnOgorICAgICAgICAgICAgICAgIHJl
dHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlVGhyb3dTdGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7
CisgICAgICAgICAgICBjYXNlICd0cnknOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0
ZS5tYXJrRW5kKHBhcnNlVHJ5U3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAg
Y2FzZSAndmFyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJz
ZVZhcmlhYmxlU3RhdGVtZW50KCksIHN0YXJ0VG9rZW4pOworICAgICAgICAgICAgY2FzZSAnd2hp
bGUnOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKHBhcnNlV2hpbGVT
dGF0ZW1lbnQoKSwgc3RhcnRUb2tlbik7CisgICAgICAgICAgICBjYXNlICd3aXRoJzoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChwYXJzZVdpdGhTdGF0ZW1lbnQoKSwg
c3RhcnRUb2tlbik7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZXhwciA9IHBhcnNlRXhwcmVz
c2lvbigpOworCisgICAgICAgIC8vIDEyLjEyIExhYmVsbGVkIFN0YXRlbWVudHMKKyAgICAgICAg
aWYgKChleHByLnR5cGUgPT09IFN5bnRheC5JZGVudGlmaWVyKSAmJiBtYXRjaCgnOicpKSB7Cisg
ICAgICAgICAgICBsZXgoKTsKKworICAgICAgICAgICAga2V5ID0gJyQnICsgZXhwci5uYW1lOwor
ICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0
ZS5sYWJlbFNldCwga2V5KSkgeworICAgICAgICAgICAgICAgIHRocm93RXJyb3Ioe30sIE1lc3Nh
Z2VzLlJlZGVjbGFyYXRpb24sICdMYWJlbCcsIGV4cHIubmFtZSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHN0YXRlLmxhYmVsU2V0W2tleV0gPSB0cnVlOworICAgICAgICAgICAgbGFi
ZWxlZEJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOworICAgICAgICAgICAgZGVsZXRlIHN0YXRlLmxh
YmVsU2V0W2tleV07CisgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVMYWJlbGVkU3RhdGVtZW50KGV4cHIsIGxhYmVsZWRCb2R5KSwgc3RhcnRUb2tlbik7
CisgICAgICAgIH0KKworICAgICAgICBjb25zdW1lU2VtaWNvbG9uKCk7CisKKyAgICAgICAgcmV0
dXJuIGRlbGVnYXRlLm1hcmtFbmQoZGVsZWdhdGUuY3JlYXRlRXhwcmVzc2lvblN0YXRlbWVudChl
eHByKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgLy8gMTMgRnVuY3Rpb24gRGVmaW5pdGlv
bgorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCkgeworICAgICAg
ICB2YXIgc291cmNlRWxlbWVudCwgc291cmNlRWxlbWVudHMgPSBbXSwgdG9rZW4sIGRpcmVjdGl2
ZSwgZmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgb2xkTGFiZWxTZXQsIG9sZEluSXRlcmF0
aW9uLCBvbGRJblN3aXRjaCwgb2xkSW5GdW5jdGlvbkJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAg
ICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgZXhwZWN0KCd7Jyk7CisKKyAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAobG9va2FoZWFkLnR5
cGUgIT09IFRva2VuLlN0cmluZ0xpdGVyYWwpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHRva2VuID0gbG9va2FoZWFkOworCisgICAgICAgICAg
ICBzb3VyY2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICBzb3Vy
Y2VFbGVtZW50cy5wdXNoKHNvdXJjZUVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHNvdXJjZUVs
ZW1lbnQuZXhwcmVzc2lvbi50eXBlICE9PSBTeW50YXguTGl0ZXJhbCkgeworICAgICAgICAgICAg
ICAgIC8vIHRoaXMgaXMgbm90IGRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZGlyZWN0aXZlID0gc291cmNlLnNsaWNlKHRva2VuLnN0
YXJ0ICsgMSwgdG9rZW4uZW5kIC0gMSk7CisgICAgICAgICAgICBpZiAoZGlyZWN0aXZlID09PSAn
dXNlIHN0cmljdCcpIHsKKyAgICAgICAgICAgICAgICBzdHJpY3QgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmIChmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3dF
cnJvclRvbGVyYW50KGZpcnN0UmVzdHJpY3RlZCwgTWVzc2FnZXMuU3RyaWN0T2N0YWxMaXRlcmFs
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIGlmICghZmlyc3RSZXN0cmljdGVkICYmIHRva2VuLm9jdGFsKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG9sZExhYmVsU2V0ID0gc3RhdGUubGFiZWxT
ZXQ7CisgICAgICAgIG9sZEluSXRlcmF0aW9uID0gc3RhdGUuaW5JdGVyYXRpb247CisgICAgICAg
IG9sZEluU3dpdGNoID0gc3RhdGUuaW5Td2l0Y2g7CisgICAgICAgIG9sZEluRnVuY3Rpb25Cb2R5
ID0gc3RhdGUuaW5GdW5jdGlvbkJvZHk7CisKKyAgICAgICAgc3RhdGUubGFiZWxTZXQgPSB7fTsK
KyAgICAgICAgc3RhdGUuaW5JdGVyYXRpb24gPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5Td2l0
Y2ggPSBmYWxzZTsKKyAgICAgICAgc3RhdGUuaW5GdW5jdGlvbkJvZHkgPSB0cnVlOworCisgICAg
ICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKG1hdGNoKCd9Jykp
IHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNv
dXJjZUVsZW1lbnQgPSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmICh0eXBl
b2Ygc291cmNlRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNl
RWxlbWVudCk7CisgICAgICAgIH0KKworICAgICAgICBleHBlY3QoJ30nKTsKKworICAgICAgICBz
dGF0ZS5sYWJlbFNldCA9IG9sZExhYmVsU2V0OworICAgICAgICBzdGF0ZS5pbkl0ZXJhdGlvbiA9
IG9sZEluSXRlcmF0aW9uOworICAgICAgICBzdGF0ZS5pblN3aXRjaCA9IG9sZEluU3dpdGNoOwor
ICAgICAgICBzdGF0ZS5pbkZ1bmN0aW9uQm9keSA9IG9sZEluRnVuY3Rpb25Cb2R5OworCisgICAg
ICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUJsb2NrU3RhdGVtZW50
KHNvdXJjZUVsZW1lbnRzKSwgc3RhcnRUb2tlbik7CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFy
c2VQYXJhbXMoZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgIHZhciBwYXJhbSwgcGFyYW1zID0g
W10sIHRva2VuLCBzdHJpY3RlZCwgcGFyYW1TZXQsIGtleSwgbWVzc2FnZTsKKyAgICAgICAgZXhw
ZWN0KCcoJyk7CisKKyAgICAgICAgaWYgKCFtYXRjaCgnKScpKSB7CisgICAgICAgICAgICBwYXJh
bVNldCA9IHt9OworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAg
ICAgICAgICAgdG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICAgICAgcGFyYW0gPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGtleSA9ICckJyArIHRva2Vu
LnZhbHVlOworICAgICAgICAgICAgICAgIGlmIChzdHJpY3QpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzUmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2Fn
ZSA9IE1lc3NhZ2VzLlN0cmljdFBhcmFtTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs
KHBhcmFtU2V0LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RlZCA9IHRv
a2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFBh
cmFtRHVwZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoIWZpcnN0UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXN0cmlj
dGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0UmVz
dHJpY3RlZCA9IHRva2VuOworICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3Nh
Z2VzLlN0cmljdFBhcmFtTmFtZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0
cmljdE1vZGVSZXNlcnZlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1l
c3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmFtU2V0
LCBrZXkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0b2tl
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBNZXNzYWdlcy5TdHJpY3RQYXJh
bUR1cGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgcGFyYW1zLnB1c2gocGFyYW0pOworICAgICAgICAgICAgICAgIHBhcmFtU2V0W2tl
eV0gPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChtYXRjaCgnKScpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBleHBl
Y3QoJywnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGV4cGVjdCgnKScp
OworCisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcywKKyAgICAg
ICAgICAgIHN0cmljdGVkOiBzdHJpY3RlZCwKKyAgICAgICAgICAgIGZpcnN0UmVzdHJpY3RlZDog
Zmlyc3RSZXN0cmljdGVkLAorICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZQorICAgICAgICB9
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlvbigpIHsKKyAg
ICAgICAgdmFyIGlkLCBwYXJhbXMgPSBbXSwgYm9keSwgdG9rZW4sIHN0cmljdGVkLCB0bXAsIGZp
cnN0UmVzdHJpY3RlZCwgbWVzc2FnZSwgcHJldmlvdXNTdHJpY3QsIHN0YXJ0VG9rZW47CisKKyAg
ICAgICAgc3RhcnRUb2tlbiA9IGxvb2thaGVhZDsKKworICAgICAgICBleHBlY3RLZXl3b3JkKCdm
dW5jdGlvbicpOworICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAgaWQgPSBwYXJz
ZVZhcmlhYmxlSWRlbnRpZmllcigpOworICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAg
ICBpZiAoaXNSZXN0cmljdGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICB0
aHJvd0Vycm9yVG9sZXJhbnQodG9rZW4sIE1lc3NhZ2VzLlN0cmljdEZ1bmN0aW9uTmFtZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaXNSZXN0cmlj
dGVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBmaXJzdFJlc3RyaWN0ZWQg
PSB0b2tlbjsKKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gTWVzc2FnZXMuU3RyaWN0RnVuY3Rp
b25OYW1lOworICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0cmljdE1vZGVSZXNlcnZlZFdvcmQo
dG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgZmlyc3RSZXN0cmljdGVkID0gdG9rZW47
CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3NhZ2VzLlN0cmljdFJlc2VydmVkV29yZDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRtcCA9IHBhcnNlUGFyYW1zKGZp
cnN0UmVzdHJpY3RlZCk7CisgICAgICAgIHBhcmFtcyA9IHRtcC5wYXJhbXM7CisgICAgICAgIHN0
cmljdGVkID0gdG1wLnN0cmljdGVkOworICAgICAgICBmaXJzdFJlc3RyaWN0ZWQgPSB0bXAuZmly
c3RSZXN0cmljdGVkOworICAgICAgICBpZiAodG1wLm1lc3NhZ2UpIHsKKyAgICAgICAgICAgIG1l
c3NhZ2UgPSB0bXAubWVzc2FnZTsKKyAgICAgICAgfQorCisgICAgICAgIHByZXZpb3VzU3RyaWN0
ID0gc3RyaWN0OworICAgICAgICBib2R5ID0gcGFyc2VGdW5jdGlvblNvdXJjZUVsZW1lbnRzKCk7
CisgICAgICAgIGlmIChzdHJpY3QgJiYgZmlyc3RSZXN0cmljdGVkKSB7CisgICAgICAgICAgICB0
aHJvd0Vycm9yKGZpcnN0UmVzdHJpY3RlZCwgbWVzc2FnZSk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHN0cmljdCAmJiBzdHJpY3RlZCkgeworICAgICAgICAgICAgdGhyb3dFcnJvclRvbGVyYW50
KHN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBzdHJpY3QgPSBwcmV2aW91
c1N0cmljdDsKKworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0ZS5jcmVh
dGVGdW5jdGlvbkRlY2xhcmF0aW9uKGlkLCBwYXJhbXMsIFtdLCBib2R5KSwgc3RhcnRUb2tlbik7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oKSB7CisgICAg
ICAgIHZhciB0b2tlbiwgaWQgPSBudWxsLCBzdHJpY3RlZCwgZmlyc3RSZXN0cmljdGVkLCBtZXNz
YWdlLCB0bXAsIHBhcmFtcyA9IFtdLCBib2R5LCBwcmV2aW91c1N0cmljdCwgc3RhcnRUb2tlbjsK
KworICAgICAgICBzdGFydFRva2VuID0gbG9va2FoZWFkOworICAgICAgICBleHBlY3RLZXl3b3Jk
KCdmdW5jdGlvbicpOworCisgICAgICAgIGlmICghbWF0Y2goJygnKSkgeworICAgICAgICAgICAg
dG9rZW4gPSBsb29rYWhlYWQ7CisgICAgICAgICAgICBpZCA9IHBhcnNlVmFyaWFibGVJZGVudGlm
aWVyKCk7CisgICAgICAgICAgICBpZiAoc3RyaWN0KSB7CisgICAgICAgICAgICAgICAgaWYgKGlz
UmVzdHJpY3RlZFdvcmQodG9rZW4udmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93
RXJyb3JUb2xlcmFudCh0b2tlbiwgTWVzc2FnZXMuU3RyaWN0RnVuY3Rpb25OYW1lKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChp
c1Jlc3RyaWN0ZWRXb3JkKHRva2VuLnZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBmaXJz
dFJlc3RyaWN0ZWQgPSB0b2tlbjsKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IE1lc3Nh
Z2VzLlN0cmljdEZ1bmN0aW9uTmFtZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3Ry
aWN0TW9kZVJlc2VydmVkV29yZCh0b2tlbi52YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zmlyc3RSZXN0cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBN
ZXNzYWdlcy5TdHJpY3RSZXNlcnZlZFdvcmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgdG1wID0gcGFyc2VQYXJhbXMoZmlyc3RSZXN0cmlj
dGVkKTsKKyAgICAgICAgcGFyYW1zID0gdG1wLnBhcmFtczsKKyAgICAgICAgc3RyaWN0ZWQgPSB0
bXAuc3RyaWN0ZWQ7CisgICAgICAgIGZpcnN0UmVzdHJpY3RlZCA9IHRtcC5maXJzdFJlc3RyaWN0
ZWQ7CisgICAgICAgIGlmICh0bXAubWVzc2FnZSkgeworICAgICAgICAgICAgbWVzc2FnZSA9IHRt
cC5tZXNzYWdlOworICAgICAgICB9CisKKyAgICAgICAgcHJldmlvdXNTdHJpY3QgPSBzdHJpY3Q7
CisgICAgICAgIGJvZHkgPSBwYXJzZUZ1bmN0aW9uU291cmNlRWxlbWVudHMoKTsKKyAgICAgICAg
aWYgKHN0cmljdCAmJiBmaXJzdFJlc3RyaWN0ZWQpIHsKKyAgICAgICAgICAgIHRocm93RXJyb3Io
Zmlyc3RSZXN0cmljdGVkLCBtZXNzYWdlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyaWN0
ICYmIHN0cmljdGVkKSB7CisgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoc3RyaWN0ZWQs
IG1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIHN0cmljdCA9IHByZXZpb3VzU3RyaWN0Owor
CisgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5tYXJrRW5kKGRlbGVnYXRlLmNyZWF0ZUZ1bmN0aW9u
RXhwcmVzc2lvbihpZCwgcGFyYW1zLCBbXSwgYm9keSksIHN0YXJ0VG9rZW4pOworICAgIH0KKwor
ICAgIC8vIDE0IFByb2dyYW0KKworICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxlbWVudCgpIHsK
KyAgICAgICAgaWYgKGxvb2thaGVhZC50eXBlID09PSBUb2tlbi5LZXl3b3JkKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGxvb2thaGVhZC52YWx1ZSkgeworICAgICAgICAgICAgY2FzZSAnY29uc3Qn
OgorICAgICAgICAgICAgY2FzZSAnbGV0JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VD
b25zdExldERlY2xhcmF0aW9uKGxvb2thaGVhZC52YWx1ZSk7CisgICAgICAgICAgICBjYXNlICdm
dW5jdGlvbic6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRnVuY3Rpb25EZWNsYXJhdGlv
bigpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VT
dGF0ZW1lbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChsb29r
YWhlYWQudHlwZSAhPT0gVG9rZW4uRU9GKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VTdGF0
ZW1lbnQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZ1bmN0aW9uIHBhcnNlU291cmNlRWxl
bWVudHMoKSB7CisgICAgICAgIHZhciBzb3VyY2VFbGVtZW50LCBzb3VyY2VFbGVtZW50cyA9IFtd
LCB0b2tlbiwgZGlyZWN0aXZlLCBmaXJzdFJlc3RyaWN0ZWQ7CisKKyAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICB0b2tlbiA9IGxvb2thaGVhZDsKKyAgICAgICAg
ICAgIGlmICh0b2tlbi50eXBlICE9PSBUb2tlbi5TdHJpbmdMaXRlcmFsKSB7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnQg
PSBwYXJzZVNvdXJjZUVsZW1lbnQoKTsKKyAgICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2go
c291cmNlRWxlbWVudCk7CisgICAgICAgICAgICBpZiAoc291cmNlRWxlbWVudC5leHByZXNzaW9u
LnR5cGUgIT09IFN5bnRheC5MaXRlcmFsKSB7CisgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBu
b3QgZGlyZWN0aXZlCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBkaXJlY3RpdmUgPSBzb3VyY2Uuc2xpY2UodG9rZW4uc3RhcnQgKyAxLCB0b2tlbi5l
bmQgLSAxKTsKKyAgICAgICAgICAgIGlmIChkaXJlY3RpdmUgPT09ICd1c2Ugc3RyaWN0Jykgewor
ICAgICAgICAgICAgICAgIHN0cmljdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZpcnN0
UmVzdHJpY3RlZCkgeworICAgICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yVG9sZXJhbnQoZmly
c3RSZXN0cmljdGVkLCBNZXNzYWdlcy5TdHJpY3RPY3RhbExpdGVyYWwpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFJl
c3RyaWN0ZWQgJiYgdG9rZW4ub2N0YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlyc3RSZXN0
cmljdGVkID0gdG9rZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBzb3Vy
Y2VFbGVtZW50ID0gcGFyc2VTb3VyY2VFbGVtZW50KCk7CisgICAgICAgICAgICAvKiBpc3RhbmJ1
bCBpZ25vcmUgaWYgKi8KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlRWxlbWVudCA9PT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHNvdXJjZUVsZW1lbnRzLnB1c2goc291cmNlRWxlbWVudCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHNvdXJjZUVsZW1lbnRzOworICAgIH0KKworICAgIGZ1bmN0aW9uIHBh
cnNlUHJvZ3JhbSgpIHsKKyAgICAgICAgdmFyIGJvZHksIHN0YXJ0VG9rZW47CisKKyAgICAgICAg
c2tpcENvbW1lbnQoKTsKKyAgICAgICAgcGVlaygpOworICAgICAgICBzdGFydFRva2VuID0gbG9v
a2FoZWFkOworICAgICAgICBzdHJpY3QgPSBmYWxzZTsKKworICAgICAgICBib2R5ID0gcGFyc2VT
b3VyY2VFbGVtZW50cygpOworICAgICAgICByZXR1cm4gZGVsZWdhdGUubWFya0VuZChkZWxlZ2F0
ZS5jcmVhdGVQcm9ncmFtKGJvZHkpLCBzdGFydFRva2VuKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmaWx0ZXJUb2tlbkxvY2F0aW9uKCkgeworICAgICAgICB2YXIgaSwgZW50cnksIHRva2VuLCB0
b2tlbnMgPSBbXTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZXh0cmEudG9rZW5zLmxlbmd0
aDsgKytpKSB7CisgICAgICAgICAgICBlbnRyeSA9IGV4dHJhLnRva2Vuc1tpXTsKKyAgICAgICAg
ICAgIHRva2VuID0geworICAgICAgICAgICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsCisgICAgICAg
ICAgICAgICAgdmFsdWU6IGVudHJ5LnZhbHVlCisgICAgICAgICAgICB9OworICAgICAgICAgICAg
aWYgKGV4dHJhLnJhbmdlKSB7CisgICAgICAgICAgICAgICAgdG9rZW4ucmFuZ2UgPSBlbnRyeS5y
YW5nZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChleHRyYS5sb2MpIHsKKyAgICAg
ICAgICAgICAgICB0b2tlbi5sb2MgPSBlbnRyeS5sb2M7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICB0b2tlbnMucHVzaCh0b2tlbik7CisgICAgICAgIH0KKworICAgICAgICBleHRyYS50b2tl
bnMgPSB0b2tlbnM7CisgICAgfQorCisgICAgZnVuY3Rpb24gdG9rZW5pemUoY29kZSwgb3B0aW9u
cykgeworICAgICAgICB2YXIgdG9TdHJpbmcsCisgICAgICAgICAgICB0b2tlbiwKKyAgICAgICAg
ICAgIHRva2VuczsKKworICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAgICAgICAgaWYgKHR5
cGVvZiBjb2RlICE9PSAnc3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7Cisg
ICAgICAgICAgICBjb2RlID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBk
ZWxlZ2F0ZSA9IFN5bnRheFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNlID0gY29kZTsKKyAg
ICAgICAgaW5kZXggPSAwOworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAw
KSA/IDEgOiAwOworICAgICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSBzb3Vy
Y2UubGVuZ3RoOworICAgICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBzdGF0ZSA9IHsK
KyAgICAgICAgICAgIGFsbG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30sCisg
ICAgICAgICAgICBpbkZ1bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAgICBpbkl0ZXJhdGlv
bjogZmFsc2UsCisgICAgICAgICAgICBpblN3aXRjaDogZmFsc2UsCisgICAgICAgICAgICBsYXN0
Q29tbWVudFN0YXJ0OiAtMQorICAgICAgICB9OworCisgICAgICAgIGV4dHJhID0ge307CisKKyAg
ICAgICAgLy8gT3B0aW9ucyBtYXRjaGluZy4KKyAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwg
e307CisKKyAgICAgICAgLy8gT2YgY291cnNlIHdlIGNvbGxlY3QgdG9rZW5zIGhlcmUuCisgICAg
ICAgIG9wdGlvbnMudG9rZW5zID0gdHJ1ZTsKKyAgICAgICAgZXh0cmEudG9rZW5zID0gW107Cisg
ICAgICAgIGV4dHJhLnRva2VuaXplID0gdHJ1ZTsKKyAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB0
d28gZmllbGRzIGFyZSBuZWNlc3NhcnkgdG8gY29tcHV0ZSB0aGUgUmVnZXggdG9rZW5zLgorICAg
ICAgICBleHRyYS5vcGVuUGFyZW5Ub2tlbiA9IC0xOworICAgICAgICBleHRyYS5vcGVuQ3VybHlU
b2tlbiA9IC0xOworCisgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5cGVvZiBvcHRpb25zLnJhbmdl
ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7CisgICAgICAgIGV4dHJhLmxvYyA9ICh0
eXBlb2Ygb3B0aW9ucy5sb2MgPT09ICdib29sZWFuJykgJiYgb3B0aW9ucy5sb2M7CisKKyAgICAg
ICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbW1lbnQgPT09ICdib29sZWFuJyAmJiBvcHRpb25zLmNv
bW1lbnQpIHsKKyAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRvbGVyYW50ID09PSAnYm9vbGVhbicgJiYgb3B0aW9u
cy50b2xlcmFudCkgeworICAgICAgICAgICAgZXh0cmEuZXJyb3JzID0gW107CisgICAgICAgIH0K
KworICAgICAgICB0cnkgeworICAgICAgICAgICAgcGVlaygpOworICAgICAgICAgICAgaWYgKGxv
b2thaGVhZC50eXBlID09PSBUb2tlbi5FT0YpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXh0
cmEudG9rZW5zOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB0b2tlbiA9IGxleCgpOwor
ICAgICAgICAgICAgd2hpbGUgKGxvb2thaGVhZC50eXBlICE9PSBUb2tlbi5FT0YpIHsKKyAgICAg
ICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGxleCgpOworICAg
ICAgICAgICAgICAgIH0gY2F0Y2ggKGxleEVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRv
a2VuID0gbG9va2FoZWFkOworICAgICAgICAgICAgICAgICAgICBpZiAoZXh0cmEuZXJyb3JzKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBleHRyYS5lcnJvcnMucHVzaChsZXhFcnJvcik7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGJyZWFrIG9uIHRoZSBmaXJzdCBl
cnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaW5maW5pdGUgbG9vcHMu
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGxleEVycm9yOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmaWx0ZXJUb2tlbkxvY2F0aW9uKCk7CisgICAgICAgICAgICB0b2tlbnMgPSBleHRyYS50
b2tlbnM7CisgICAgICAgICAgICBpZiAodHlwZW9mIGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZp
bmVkJykgeworICAgICAgICAgICAgICAgIHRva2Vucy5jb21tZW50cyA9IGV4dHJhLmNvbW1lbnRz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGVvZiBleHRyYS5lcnJvcnMgIT09
ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgdG9rZW5zLmVycm9ycyA9IGV4dHJhLmVy
cm9yczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAg
dGhyb3cgZTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGV4dHJhID0ge307Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRva2VuczsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBw
YXJzZShjb2RlLCBvcHRpb25zKSB7CisgICAgICAgIHZhciBwcm9ncmFtLCB0b1N0cmluZzsKKwor
ICAgICAgICB0b1N0cmluZyA9IFN0cmluZzsKKyAgICAgICAgaWYgKHR5cGVvZiBjb2RlICE9PSAn
c3RyaW5nJyAmJiAhKGNvZGUgaW5zdGFuY2VvZiBTdHJpbmcpKSB7CisgICAgICAgICAgICBjb2Rl
ID0gdG9TdHJpbmcoY29kZSk7CisgICAgICAgIH0KKworICAgICAgICBkZWxlZ2F0ZSA9IFN5bnRh
eFRyZWVEZWxlZ2F0ZTsKKyAgICAgICAgc291cmNlID0gY29kZTsKKyAgICAgICAgaW5kZXggPSAw
OworICAgICAgICBsaW5lTnVtYmVyID0gKHNvdXJjZS5sZW5ndGggPiAwKSA/IDEgOiAwOworICAg
ICAgICBsaW5lU3RhcnQgPSAwOworICAgICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOworICAg
ICAgICBsb29rYWhlYWQgPSBudWxsOworICAgICAgICBzdGF0ZSA9IHsKKyAgICAgICAgICAgIGFs
bG93SW46IHRydWUsCisgICAgICAgICAgICBsYWJlbFNldDoge30sCisgICAgICAgICAgICBpbkZ1
bmN0aW9uQm9keTogZmFsc2UsCisgICAgICAgICAgICBpbkl0ZXJhdGlvbjogZmFsc2UsCisgICAg
ICAgICAgICBpblN3aXRjaDogZmFsc2UsCisgICAgICAgICAgICBsYXN0Q29tbWVudFN0YXJ0OiAt
MQorICAgICAgICB9OworCisgICAgICAgIGV4dHJhID0ge307CisgICAgICAgIGlmICh0eXBlb2Yg
b3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgIGV4dHJhLnJhbmdlID0gKHR5
cGVvZiBvcHRpb25zLnJhbmdlID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMucmFuZ2U7CisgICAg
ICAgICAgICBleHRyYS5sb2MgPSAodHlwZW9mIG9wdGlvbnMubG9jID09PSAnYm9vbGVhbicpICYm
IG9wdGlvbnMubG9jOworICAgICAgICAgICAgZXh0cmEuYXR0YWNoQ29tbWVudCA9ICh0eXBlb2Yg
b3B0aW9ucy5hdHRhY2hDb21tZW50ID09PSAnYm9vbGVhbicpICYmIG9wdGlvbnMuYXR0YWNoQ29t
bWVudDsKKworICAgICAgICAgICAgaWYgKGV4dHJhLmxvYyAmJiBvcHRpb25zLnNvdXJjZSAhPT0g
bnVsbCAmJiBvcHRpb25zLnNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAg
ZXh0cmEuc291cmNlID0gdG9TdHJpbmcob3B0aW9ucy5zb3VyY2UpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudG9rZW5zID09PSAnYm9vbGVhbicgJiYg
b3B0aW9ucy50b2tlbnMpIHsKKyAgICAgICAgICAgICAgICBleHRyYS50b2tlbnMgPSBbXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb21tZW50ID09PSAn
Ym9vbGVhbicgJiYgb3B0aW9ucy5jb21tZW50KSB7CisgICAgICAgICAgICAgICAgZXh0cmEuY29t
bWVudHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9u
cy50b2xlcmFudCA9PT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMudG9sZXJhbnQpIHsKKyAgICAgICAg
ICAgICAgICBleHRyYS5lcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChleHRyYS5hdHRhY2hDb21tZW50KSB7CisgICAgICAgICAgICAgICAgZXh0cmEucmFuZ2UgPSB0
cnVlOworICAgICAgICAgICAgICAgIGV4dHJhLmNvbW1lbnRzID0gW107CisgICAgICAgICAgICAg
ICAgZXh0cmEuYm90dG9tUmlnaHRTdGFjayA9IFtdOworICAgICAgICAgICAgICAgIGV4dHJhLnRy
YWlsaW5nQ29tbWVudHMgPSBbXTsKKyAgICAgICAgICAgICAgICBleHRyYS5sZWFkaW5nQ29tbWVu
dHMgPSBbXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICBwcm9ncmFtID0gcGFyc2VQcm9ncmFtKCk7CisgICAgICAgICAgICBpZiAodHlwZW9m
IGV4dHJhLmNvbW1lbnRzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHByb2dy
YW0uY29tbWVudHMgPSBleHRyYS5jb21tZW50czsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICh0eXBlb2YgZXh0cmEudG9rZW5zICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAg
ICAgIGZpbHRlclRva2VuTG9jYXRpb24oKTsKKyAgICAgICAgICAgICAgICBwcm9ncmFtLnRva2Vu
cyA9IGV4dHJhLnRva2VuczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2Yg
ZXh0cmEuZXJyb3JzICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIHByb2dyYW0u
ZXJyb3JzID0gZXh0cmEuZXJyb3JzOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAg
ICAgZXh0cmEgPSB7fTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBwcm9ncmFtOworICAg
IH0KKworICAgIC8vIFN5bmMgd2l0aCAqLmpzb24gbWFuaWZlc3RzLgorICAgIGV4cG9ydHMudmVy
c2lvbiA9ICcxLjIuMic7CisKKyAgICBleHBvcnRzLnRva2VuaXplID0gdG9rZW5pemU7CisKKyAg
ICBleHBvcnRzLnBhcnNlID0gcGFyc2U7CisKKyAgICAvLyBEZWVwIGNvcHkuCisgICAvKiBpc3Rh
bmJ1bCBpZ25vcmUgbmV4dCAqLworICAgIGV4cG9ydHMuU3ludGF4ID0gKGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdmFyIG5hbWUsIHR5cGVzID0ge307CisKKyAgICAgICAgaWYgKHR5cGVvZiBPYmpl
Y3QuY3JlYXRlID09PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICB0eXBlcyA9IE9iamVjdC5j
cmVhdGUobnVsbCk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKG5hbWUgaW4gU3ludGF4KSB7
CisgICAgICAgICAgICBpZiAoU3ludGF4Lmhhc093blByb3BlcnR5KG5hbWUpKSB7CisgICAgICAg
ICAgICAgICAgdHlwZXNbbmFtZV0gPSBTeW50YXhbbmFtZV07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodHlwZW9mIE9iamVjdC5mcmVlemUgPT09ICdmdW5jdGlvbicp
IHsKKyAgICAgICAgICAgIE9iamVjdC5mcmVlemUodHlwZXMpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHR5cGVzOworICAgIH0oKSk7CisKK30pKFdlYkluc3BlY3Rvci5fZXNwcmltYSk7
CkluZGV4OiBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Nb2RlbHMvU2NyaXB0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01v
ZGVscy9TY3JpcHQuanMJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JV
SS9Vc2VySW50ZXJmYWNlL01vZGVscy9TY3JpcHQuanMJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEx
ICs0MSwyMCBAQCBXZWJJbnNwZWN0b3IuU2NyaXB0ID0gZnVuY3Rpb24oaWQsIHJhbmdlCiAKICAg
ICBpZiAoc291cmNlTWFwVVJMKQogICAgICAgICBXZWJJbnNwZWN0b3Iuc291cmNlTWFwTWFuYWdl
ci5kb3dubG9hZFNvdXJjZU1hcChzb3VyY2VNYXBVUkwsIHRoaXMuX3VybCwgdGhpcyk7CisKKyAg
ICB0aGlzLl9zb3VyY2VDb2RlQVNUID0gbnVsbDsKKyAgICB0aGlzLmFubm90YXRlQVNUKCk7CiB9
OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVJZGVudGlmaWVyID0gInNjcmlwdCI7CiBXZWJJ
bnNwZWN0b3IuU2NyaXB0LlVSTENvb2tpZUtleSA9ICJzY3JpcHQtdXJsIjsKIFdlYkluc3BlY3Rv
ci5TY3JpcHQuRGlzcGxheU5hbWVDb29raWVLZXkgPSAic2NyaXB0LWRpc3BsYXktbmFtZSI7Cisv
LyBOb3RlIHRoYXQgdGhpcyBjb3JyZXNwb25kcyBpZGVudGljYWxseSB0byBhbiBlbnVtIGluIEph
dmFTY2lwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAorV2ViSW5zcGVj
dG9yLlNjcmlwdC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yID0geworICAgIFR5cGVQcm9m
aWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw6IDEsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvclRoaXNTdGF0ZW1lbnQ6IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ckZ1bmN0aW9uUmV0dXJuOiAzCit9OwogCiBXZWJJbnNwZWN0b3IuU2NyaXB0LnJlc2V0VW5pcXVl
RGlzcGxheU5hbWVOdW1iZXJzID0gZnVuY3Rpb24oKQogewpAQCAtMTI3LDYgKzEzNiw3NyBAQCBX
ZWJJbnNwZWN0b3IuU2NyaXB0LnByb3RvdHlwZSA9IHsKICAgICAgICAgY29va2llW1dlYkluc3Bl
Y3Rvci5TY3JpcHQuRGlzcGxheU5hbWVDb29raWVLZXldID0gdGhpcy5kaXNwbGF5TmFtZTsKICAg
ICB9LAogCisgICAgaW5zZXJ0VHlwZUFubm90YXRpb25zOiBmdW5jdGlvbihjb2RlTWlycm9yLCBz
b3VyY2VNYXApIAorICAgIHsKKyAgICAgICAgZnVuY3Rpb24gbWFrZURvbUVsZW1lbnQodHlwZXMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdHlwZXMpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgdmFyIHN0ciA9IHR5cGVzLmRpc3BsYXlUeXBlTmFtZS50cmltKCk7
CisgICAgICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHN0ciA9ICIgIiArIHN0ciArICIgIjsKKworICAgICAgICAgICAgdmFyIGRpdiA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICAgICAgICAgIGRpdi50ZXh0Q29udGVu
dCA9IHN0cjsKKyAgICAgICAgICAgIGRpdi5zdHlsZS5kaXNwbGF5ID0gImlubGluZSI7IAorICAg
ICAgICAgICAgZGl2LnN0eWxlLmNvbG9yID0gImJsYWNrIjsKKyAgICAgICAgICAgIGRpdi5zdHls
ZS5iYWNrZ3JvdW5kQ29sb3IgPSAiI2I0YzZlZiI7CisgICAgICAgICAgICBkaXYuc3R5bGUuYm9y
ZGVyID0gIjFweCBzb2xpZCI7CisgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSAi
I2I0YzZlZiI7CisgICAgICAgICAgICBkaXYuc3R5bGUuYm9yZGVyUmFkaXVzID0gIjEwcHgiOwor
ICAgICAgICAgICAgZGl2LnN0eWxlLm1hcmdpblJpZ2h0ID0gIjNweCI7CisgICAgICAgICAgICBk
aXYuc3R5bGUubWFyZ2luTGVmdCA9ICIycHgiOworCisgICAgICAgICAgICByZXR1cm4gZGl2Owor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbWFrZVN0YXJ0KGxvY2F0aW9uKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4geyBsaW5lOiBsb2NhdGlvbi5saW5lTnVtYmVyLCBjaDog
bG9jYXRpb24uY29sdW1uTnVtYmVyIH07CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBm
b3JFYWNoKG5vZGUpIAorICAgICAgICB7CisgICAgICAgICAgICB2YXIgVHlwZXMgPSBXZWJJbnNw
ZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlOworICAgICAgICAgICAgdmFyIGxvY2F0aW9uOwor
ICAgICAgICAgICAgdmFyIG9yaWdpbmFsOworICAgICAgICAgICAgdmFyIHN0YXJ0OworCisgICAg
ICAgICAgICBmdW5jdGlvbiBhbm5vdGF0ZShwb3MsIHR5cGVzKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGxvY2F0aW9uID0gc291cmNlTWFwLm9yaWdpbmFsUG9zaXRpb25Ub0Zvcm1h
dHRlZChwb3MpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gbWFrZVN0YXJ0KGxvY2F0aW9uKTsK
KyAgICAgICAgICAgICAgICBjb2RlTWlycm9yLnNldFVuaXF1ZUJvb2ttYXJrKHN0YXJ0LCB7IHdp
ZGdldDogbWFrZURvbUVsZW1lbnQodHlwZXMpIH0pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9u
Q2FsbDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVu
Y3Rpb25EZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25FeHByZXNz
aW9uOgorICAgICAgICAgICAgICAgIG5vZGUucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFt
KSB7CisgICAgICAgICAgICAgICAgICAgIGFubm90YXRlKHBhcmFtLnJhbmdlWzBdLCBwYXJhbS5f
dHlwZXMpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIGFubm90YXRlKG5v
ZGUuYm9keS5yYW5nZVswXSAtIDEsIG5vZGUuX3JldHVyblR5cGVzKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAg
ICAgICAgICAgICAgYW5ub3RhdGUobm9kZS5pZC5yYW5nZVswXSwgbm9kZS5fdHlwZXMpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
dmFyIHNlbGYgPSB0aGlzOworICAgICAgICBzZWxmLl9zb3VyY2VDb2RlQVNULmZvckVhY2hOb2Rl
KGdhdGhlclR5cGVzKAorICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7IAorICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fc291cmNlQ29kZUFTVC5mb3JFYWNoTm9kZShmb3JFYWNo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnNlcnRUeXBlQW5ub3RhdGlvbnMoY29kZU1p
cnJvciwgc291cmNlTWFwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMDApOworICAg
ICAgICAgICAgICAgICAgICB9LCBzZWxmLl9pZCkpOworICAgIH0sCisKICAgICAvLyBQcml2YXRl
CiAKICAgICBfcmVzb2x2ZVJlc291cmNlOiBmdW5jdGlvbigpCkBAIC0xNzQsNyArMjU0LDg0IEBA
IFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlID0gewogICAgICAgICB9CiAKICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgfSwKKworICAgIGFubm90YXRlQVNUIDogZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgZnVuY3Rpb24gY2FsbGJhY2soXywgc291cmNlVGV4dCwgaXNCYXNlNjQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICghdGhpcy5fc291cmNlQ29kZUFTVCkgeworICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvdXJjZUNvZGVBU1Qg
PSBuZXcgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1Qoc291cmNlVGV4dCk7CisgICAgICAgICAg
ICAgICAgfSBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJDb3Vs
ZG4ndCBwYXJzZSBKYXZhU2NyaXB0IEZpbGU6IFxuIiArIGUubWVzc2FnZSkKKyAgICAgICAgICAg
ICAgICAgICAgdGhpcy5fc291cmNlQ29kZUFTVCA9IG51bGw7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdGhpcy5yZXF1ZXN0Q29udGVudEZy
b21CYWNrZW5kKGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgIH0KIH07CiAKK2Z1bmN0aW9uIGdh
dGhlclR5cGVzKGNhbGxiYWNrLCBzb3VyY2VJRCkgCit7CisgICAgdmFyIGFzeW5jID0gMDsKKyAg
ICB2YXIgZmluaXNoZWQgPSAwOworICAgIHZhciBzdGFydCA9IChuZXcgRGF0ZSkuZ2V0VGltZSgp
OworCisgICAgZnVuY3Rpb24gZmluaXNoKCkKKyAgICB7CisgICAgICAgIGZpbmlzaGVkKys7Cisg
ICAgICAgIGlmIChmaW5pc2hlZCA9PT0gYXN5bmMpIHsKKyAgICAgICAgICAgIHZhciBlbmQgPSAo
bmV3IERhdGUpLmdldFRpbWUoKTsKKyAgICAgICAgICAgIC8vY29uc29sZS5sb2coIkdhdGhlclR5
cGVzIHRpbWU6ICIgKyAoZW5kIC0gc3RhcnQpKTsKKyAgICAgICAgICAgIGNhbGxiYWNrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JFYWNoKG5vZGUpIHsKKyAgICAgICAg
dmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsKKyAgICAgICAg
c3dpdGNoKG5vZGUudHlwZSkgeworICAgICAgICBjYXNlIFR5cGVzLkFzc2lnbm1lbnRFeHByZXNz
aW9uOgorICAgICAgICAgICAgYXN5bmMrKzsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRS
dW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoV2ViSW5zcGVjdG9yLlNjcmlwdC5UeXBlUHJv
ZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWws
IHNvdXJjZUlELCBub2RlLmxlZnQucmFuZ2VbMF0sIGZ1bmN0aW9uKGVycm9yLCB0eXBlcykgewor
ICAgICAgICAgICAgICAgIG5vZGUuX3R5cGVzID0gdHlwZXM7CisgICAgICAgICAgICAgICAgZmlu
aXNoKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25F
eHByZXNzaW9uOgorICAgICAgICAgICAgbm9kZS5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbiAocGFy
YW0pIHsKKyAgICAgICAgICAgICAgICBhc3luYysrOworICAgICAgICAgICAgICAgIFJ1bnRpbWVB
Z2VudC5nZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoV2ViSW5zcGVjdG9yLlNjcmlw
dC5UeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0
b3JOb3JtYWwsIHNvdXJjZUlELCBwYXJhbS5yYW5nZVswXSwgZnVuY3Rpb24oZXJyb3IsIHR5cGVz
KSB7CisgICAgICAgICAgICAgICAgICAgIHBhcmFtLl90eXBlcyA9IHR5cGVzOworICAgICAgICAg
ICAgICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgYXN5bmMrKzsKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50
aW1lVHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoV2ViSW5zcGVjdG9yLlNjcmlwdC5UeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yLlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJl
dHVybiwgc291cmNlSUQsIG5vZGUuYm9keS5yYW5nZVswXSwgZnVuY3Rpb24oZXJyb3IsIHR5cGVz
KSB7CisgICAgICAgICAgICAgICAgbm9kZS5fcmV0dXJuVHlwZXMgPSB0eXBlczsKKyAgICAgICAg
ICAgICAgICBmaW5pc2goKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgICAgICAgICBpZiAo
bm9kZS5pbml0KSB7CisgICAgICAgICAgICAgICAgYXN5bmMrKzsKKyAgICAgICAgICAgICAgICBS
dW50aW1lQWdlbnQuZ2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KFdlYkluc3BlY3Rv
ci5TY3JpcHQuVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvci5UeXBlUHJvZmlsZXJTZWFyY2hE
ZXNjcmlwdG9yTm9ybWFsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUlELCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaWQu
cmFuZ2VbMF0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oZXJyb3IsIHR5cGVzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUuX3R5cGVzID0gdHlwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIGZvckVhY2g7Cit9CisKIFdlYkluc3BlY3Rvci5TY3JpcHQucHJvdG90eXBlLl9f
cHJvdG9fXyA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZTsKSW5kZXg6IFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3Vy
Y2VDb2RlLmpzCShyZXZpc2lvbiAxNzEwMTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9Nb2RlbHMvU291cmNlQ29kZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjU5LDQg
KzI1OSw1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZSA9IHsKICAgICB9CiB9
OwogCisKIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlLnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJ
bnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlQVNULmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL01vZGVscy9Tb3VyY2VDb2RlQVNULmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTW9kZWxz
L1NvdXJjZUNvZGVBU1QuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVCA9IGZ1bmN0aW9uKHNvdXJjZVRleHQp
IAoreworICAgIFdlYkluc3BlY3Rvci5PYmplY3QuY2FsbCh0aGlzKTsKKyAgICB2YXIgZXNwcmlt
YUFTVCA9IFdlYkluc3BlY3Rvci5fZXNwcmltYS5wYXJzZShzb3VyY2VUZXh0LCB7IHJhbmdlIDog
dHJ1ZSB9KQorICAgIHRoaXMuX2FzdCA9IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKGVzcHJpbWFB
U1QpOworICAgIHRoaXMuX29yaWdpbmFsU291cmNlVGV4dCA9IHNvdXJjZVRleHQ7Cit9OworCitX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlID0geworICAgIEFzc2lnbm1lbnRFeHBy
ZXNzaW9uOiAnQXNzaWdubWVudEV4cHJlc3Npb24nLAorICAgIEFycmF5RXhwcmVzc2lvbjogJ0Fy
cmF5RXhwcmVzc2lvbicsCisgICAgQmxvY2tTdGF0ZW1lbnQ6ICdCbG9ja1N0YXRlbWVudCcsCisg
ICAgQmluYXJ5RXhwcmVzc2lvbjogJ0JpbmFyeUV4cHJlc3Npb24nLAorICAgIEJyZWFrU3RhdGVt
ZW50OiAnQnJlYWtTdGF0ZW1lbnQnLAorICAgIENhdGNoQ2xhdXNlOiAnQ2F0Y2hDbGF1c2UnLAor
ICAgIENvbnRpbnVlU3RhdGVtZW50OiAnQ29udGludWVTdGF0ZW1lbnQnLAorICAgIERvV2hpbGVT
dGF0ZW1lbnQ6ICdEb1doaWxlU3RhdGVtZW50JywKKyAgICBEZWJ1Z2dlclN0YXRlbWVudDogJ0Rl
YnVnZ2VyU3RhdGVtZW50JywKKyAgICBFbXB0eVN0YXRlbWVudDogJ0VtcHR5U3RhdGVtZW50JywK
KyAgICBFeHByZXNzaW9uU3RhdGVtZW50OiAnRXhwcmVzc2lvblN0YXRlbWVudCcsCisgICAgRm9y
U3RhdGVtZW50OiAnRm9yU3RhdGVtZW50JywKKyAgICBGb3JJblN0YXRlbWVudDogJ0ZvckluU3Rh
dGVtZW50JywKKyAgICBGdW5jdGlvbkNhbGw6ICdGdW5jdGlvbkNhbGwnLAorICAgIEZ1bmN0aW9u
RGVjbGFyYXRpb246ICdGdW5jdGlvbkRlY2xhcmF0aW9uJywKKyAgICBGdW5jdGlvbkV4cHJlc3Np
b246ICdGdW5jdGlvbkV4cHJlc3Npb24nLAorICAgIElkZW50aWZpZXI6ICdJZGVudGlmaWVyJywK
KyAgICBJZlN0YXRlbWVudDogJ0lmU3RhdGVtZW50JywKKyAgICBMaXRlcmFsOiAnTGl0ZXJhbCcs
CisgICAgTGFiZWxlZFN0YXRlbWVudDogJ0xhYmVsZWRTdGF0ZW1lbnQnLAorICAgIExvZ2ljYWxF
eHByZXNzaW9uOiAnTG9naWNhbEV4cHJlc3Npb24nLAorICAgIE1lbWJlckV4cHJlc3Npb246ICdN
ZW1iZXJFeHByZXNzaW9uJywKKyAgICBOZXdFeHByZXNzaW9uOiAnTmV3RXhwcmVzc2lvbicsCisg
ICAgT2JqZWN0RXhwcmVzc2lvbjogJ09iamVjdEV4cHJlc3Npb24nLAorICAgIFBvc3RmaXhFeHBy
ZXNzaW9uOidQb3N0Zml4RXhwcmVzc2lvbicsCisgICAgUHJvZ3JhbTogJ1Byb2dyYW0nLAorICAg
IFByb3BlcnR5OiAnUHJvcGVydHknLAorICAgIFByZWZpeEV4cHJlc3Npb246J1ByZWZpeEV4cHJl
c3Npb24nLAorICAgIFJldHVyblN0YXRlbWVudDogJ1JldHVyblN0YXRlbWVudCcsCisgICAgU2Vx
dWVuY2VFeHByZXNzaW9uOiAnU2VxdWVuY2VFeHByZXNzaW9uJywKKyAgICBTd2l0Y2hTdGF0ZW1l
bnQ6ICdTd2l0Y2hTdGF0ZW1lbnQnLAorICAgIFN3aXRjaENhc2U6ICdTd2l0Y2hDYXNlJywKKyAg
ICBUZXJuYXJ5RXhwcmVzc2lvbjogJ1Rlcm5hcnlFeHByZXNzaW9uJywKKyAgICBUaGlzRXhwcmVz
c2lvbjogJ1RoaXNFeHByZXNzaW9uJywKKyAgICBUaHJvd1N0YXRlbWVudDogJ1Rocm93U3RhdGVt
ZW50JywKKyAgICBUcnlTdGF0ZW1lbnQ6ICdUcnlTdGF0ZW1lbnQnLAorICAgIFVuYXJ5RXhwcmVz
c2lvbjogJ1VuYXJ5RXhwcmVzc2lvbicsCisgICAgVmFyaWFibGVEZWNsYXJhdGlvbjogJ1Zhcmlh
YmxlRGVjbGFyYXRpb24nLAorICAgIFZhcmlhYmxlRGVjbGFyYXRvcjogJ1ZhcmlhYmxlRGVjbGFy
YXRvcicsCisgICAgV2hpbGVTdGF0ZW1lbnQ6ICdXaGlsZVN0YXRlbWVudCcsCisgICAgV2l0aFN0
YXRlbWVudDogJ1dpdGhTdGF0ZW1lbnQnCit9OworCitXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VC5wcm90b3R5cGUgPSB7CisgICAgY29uc3RydWN0b3I6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULAorCisgICAgLy8gUHVibGljCisKKyAgICBmb3JFYWNoTm9kZSA6IGZ1bmN0aW9uKGZ1bmMp
CisgICAgeworICAgICAgICB0aGlzLl9yZWN1cnNlKHRoaXMuX2FzdCwgZnVuYyk7CisgICAgfSwK
KyAgICAKKyAgICAvLyBQcml2YXRlCisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHRyYW5zbGF0ZXMg
ZnJvbSBlc3ByaW1hJ3MgQVNUIHRvIG91cnMuIE1vc3RseSwgdGhpcyBpcyBqdXN0IHRoZSBpZGVu
dGl0eSBmdW5jdGlvbiwgYnV0IHRoZXJlIGFyZSBhIGZldyBub2RlcyBhbmQgYSBmZXcgcHJvcGVy
dGllcyB0aGF0IGFyZSByZW5hbWVkLgorICAgIC8vIFNwZWNpZmljYWxseSwgJ3Rlc3QnIHByb3Bl
cnR5IGlzIHJlbmFtZWQgdG8gJ3ByZWRpY2F0ZScsIHByZWZpeC9wb3N0Zml4IG5vZGVzIGFyZSBu
b3cgdG8gc2VwYXJhdGUgbm9kZXMsIENhbGxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8gRnVuY3Rp
b25DYWxsLCBhbmQgCisgICAgLy8gQ29uZGl0aW9uYWxFeHByZXNzaW9uIGlzIHJlbmFtZWQgdG8g
VGVybmFyeUV4cHJlc3Npb24uCisgICAgX2NyZWF0ZUludGVybmFsQVNUIDogZnVuY3Rpb24obm9k
ZSkgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsK
KworICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgJ0Fzc2lnbm1lbnRF
eHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTog
V2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5Bc3NpZ25tZW50RXhwcmVzc2lvbiwK
KyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAgICAgICAg
ICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAorICAgICAgICAgICAg
ICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0KSwKKyAgICAgICAg
ICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAn
QXJyYXlFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAg
dHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5BcnJheUV4cHJlc3Npb24s
CisgICAgICAgICAgICAgICAgZWxlbWVudHM6IG5vZGUuZWxlbWVudHMubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJh
bmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdCbG9ja1N0YXRlbWVudCc6CisgICAg
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3Vy
Y2VDb2RlQVNULkFTVFR5cGUuQmxvY2tTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAgYm9keTog
bm9kZS5ib2R5Lm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAg
ICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2Fz
ZSAnQmluYXJ5RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQmluYXJ5RXhwcmVz
c2lvbiwKKyAgICAgICAgICAgICAgICBvcGVyYXRvcjogbm9kZS5vcGVyYXRvciwKKyAgICAgICAg
ICAgICAgICBsZWZ0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmxlZnQpLAorICAgICAg
ICAgICAgICAgIHJpZ2h0OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnJpZ2h0KSwKKyAg
ICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
Y2FzZSAnQnJlYWtTdGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
ICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkJyZWFrU3RhdGVt
ZW50LAorICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2Rl
LmxhYmVsKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAg
fTsKKyAgICAgICAgY2FzZSAnQ2FsbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBl
LkZ1bmN0aW9uQ2FsbCwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNUKG5vZGUuY2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJn
dW1lbnRzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAg
ICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAn
Q2F0Y2hDbGF1c2UnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBl
OiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkNhdGNoQ2xhdXNlLAorICAgICAg
ICAgICAgICAgIHBhcmFtOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnBhcmFtKSwKKyAg
ICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAor
ICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAg
ICBjYXNlICdDb25kaXRpb25hbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlRl
cm5hcnlFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIHByZWRpY2F0ZTogdGhpcy5fY3JlYXRl
SW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAgICBjb25zZXF1ZW50OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmNvbnNlcXVlbnQpLAorICAgICAgICAgICAgICAgIGFs
dGVybmF0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5hbHRlcm5hdGUpLAorICAgICAg
ICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNl
ICdDb250aW51ZVN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuQ29udGludWVTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5v
ZGUubGFiZWwpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAg
ICB9OworICAgICAgICBjYXNlICdEb1doaWxlU3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5Eb1doaWxlU3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBu
b2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdEZWJ1Z2dlclN0YXRlbWVu
dCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3Bl
Y3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRGVidWdnZXJTdGF0ZW1lbnQsCisgICAgICAgICAg
ICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ0Vt
cHR5U3RhdGVtZW50JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlw
ZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5FbXB0eVN0YXRlbWVudCwKKyAg
ICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
Y2FzZSAnRXhwcmVzc2lvblN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRXhwcmVz
c2lvblN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBleHByZXNzaW9uOiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmV4cHJlc3Npb24pLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2Rl
LnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdGb3JTdGF0ZW1lbnQnOgorICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZUFTVC5BU1RUeXBlLkZvclN0YXRlbWVudCwKKyAgICAgICAgICAgICAgICBpbml0OiB0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmluaXQpLAorICAgICAgICAgICAgICAgIHByZWRp
Y2F0ZTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS50ZXN0KSwKKyAgICAgICAgICAgICAg
ICB1cGRhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudXBkYXRlKSwKKyAgICAgICAg
ICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmJvZHkpLAorICAgICAg
ICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNl
ICdGb3JJblN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg
IHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuRm9ySW5TdGF0ZW1lbnQs
CisgICAgICAgICAgICAgICAgbGVmdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sZWZ0
KSwKKyAgICAgICAgICAgICAgICByaWdodDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5y
aWdodCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9k
ZS5ib2R5KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAg
fTsKKyAgICAgICAgY2FzZSAnRnVuY3Rpb25EZWNsYXJhdGlvbic6CisgICAgICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFT
VFR5cGUuRnVuY3Rpb25EZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAgICBpZDogdGhpcy5fY3Jl
YXRlSW50ZXJuYWxBU1Qobm9kZS5pZCksCisgICAgICAgICAgICAgICAgcGFyYW1zOiBub2RlLnBh
cmFtcy5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAg
ICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAgICAgICAg
ICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAn
RnVuY3Rpb25FeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAg
ICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5GdW5jdGlvbkV4cHJl
c3Npb24sCisgICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUu
aWQpLAorICAgICAgICAgICAgICAgIHBhcmFtczogbm9kZS5wYXJhbXMubWFwKHRoaXMuX2NyZWF0
ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGJvZHk6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNUKG5vZGUuYm9keSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUu
cmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ0lkZW50aWZpZXInOgorICAgICAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNl
Q29kZUFTVC5BU1RUeXBlLklkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgbmFtZTogbm9kZS5u
YW1lLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9Owor
ICAgICAgICBjYXNlICdJZlN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAg
ICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuSWZTdGF0
ZW1lbnQsCisgICAgICAgICAgICAgICAgcHJlZGljYXRlOiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFT
VChub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNvbnNlcXVlbnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNUKG5vZGUuY29uc2VxdWVudCksCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlOiB0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFsdGVybmF0ZSksCisgICAgICAgICAgICAgICAg
cmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ0xpdGVyYWwn
OgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0
b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLkxpdGVyYWwsCisgICAgICAgICAgICAgICAgdmFsdWU6
IG5vZGUudmFsdWUsCisgICAgICAgICAgICAgICAgcmF3OiBub2RlLnJhdywKKyAgICAgICAgICAg
ICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnTGFi
ZWxlZFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5
cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuTGFiZWxlZFN0YXRlbWVudCwK
KyAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5sYWJl
bCksCisgICAgICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5i
b2R5KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsK
KyAgICAgICAgY2FzZSAnTG9naWNhbEV4cHJlc3Npb24nOgorICAgICAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBl
LkxvZ2ljYWxFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNUKG5vZGUubGVmdCksCisgICAgICAgICAgICAgICAgcmlnaHQ6IHRoaXMuX2NyZWF0
ZUludGVybmFsQVNUKG5vZGUucmlnaHQpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJh
bmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzoKKyAg
ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNv
dXJjZUNvZGVBU1QuQVNUVHlwZS5NZW1iZXJFeHByZXNzaW9uLAorICAgICAgICAgICAgICAgIG9i
amVjdDogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5vYmplY3QpLAorICAgICAgICAgICAg
ICAgIHByb3BlcnR5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnByb3BlcnR5KSwKKyAg
ICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
Y2FzZSAnTmV3RXhwcmVzc2lvbic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuTmV3RXhwcmVzc2lv
biwKKyAgICAgICAgICAgICAgICBjYWxsZWU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUu
Y2FsbGVlKSwKKyAgICAgICAgICAgICAgICBhcmd1bWVudHM6IG5vZGUuYXJndW1lbnRzLm1hcCh0
aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnT2JqZWN0RXhwcmVz
c2lvbic6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuT2JqZWN0RXhwcmVzc2lvbiwKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0aWVzOiBub2RlLnByb3BlcnRpZXMubWFwKHRoaXMuX2NyZWF0ZUludGVy
bmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisg
ICAgICAgICAgICB9OworICAgICAgICBjYXNlICdQcm9ncmFtJzoKKyAgICAgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZS5Qcm9ncmFtLAorICAgICAgICAgICAgICAgIGJvZHk6IG5vZGUuYm9keS5tYXAodGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5v
ZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1Byb3BlcnR5JzoKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVBU1QuQVNUVHlwZS5Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICBrZXk6IHRoaXMuX2Ny
ZWF0ZUludGVybmFsQVNUKG5vZGUua2V5KSwKKyAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1Qobm9kZS52YWx1ZSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5v
ZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1JldHVyblN0YXRlbWVudCc6
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuUmV0dXJuU3RhdGVtZW50LAorICAgICAgICAgICAgICAg
IGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KSwKKyAgICAg
ICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2Fz
ZSAnU2VxdWVuY2VFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5TZXF1ZW5jZUV4
cHJlc3Npb24sCisgICAgICAgICAgICAgICAgZXhwcmVzc2lvbnM6IG5vZGUuZXhwcmVzc2lvbnMu
bWFwKHRoaXMuX2NyZWF0ZUludGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAg
IHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9OworICAgICAgICBjYXNlICdTd2l0Y2hT
dGF0ZW1lbnQnOgorICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaFN0YXRlbWVudCwKKyAgICAg
ICAgICAgICAgICBkaXNjcmltaW5hbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZGlz
Y3JpbWluYW50KSwKKyAgICAgICAgICAgICAgICBjYXNlczogbm9kZS5jYXNlcy5tYXAodGhpcy5f
Y3JlYXRlSW50ZXJuYWxBU1QuYmluZCh0aGlzKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5v
ZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1N3aXRjaENhc2UnOgorICAg
ICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291
cmNlQ29kZUFTVC5BU1RUeXBlLlN3aXRjaENhc2UsCisgICAgICAgICAgICAgICAgcHJlZGljYXRl
OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChub2RlLnRlc3QpLAorICAgICAgICAgICAgICAgIGNv
bnNlcXVlbnQ6IG5vZGUuY29uc2VxdWVudC5tYXAodGhpcy5fY3JlYXRlSW50ZXJuYWxBU1QuYmlu
ZCh0aGlzKSksCisgICAgICAgICAgICAgICAgcmFuZ2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAg
IH07CisgICAgICAgIGNhc2UgJ1RoaXNFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlw
ZS5UaGlzRXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAg
ICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVGhyb3dTdGF0ZW1lbnQnOgorICAgICAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgICAgICB0eXBlOiBXZWJJbnNwZWN0b3IuU291cmNlQ29kZUFT
VC5BU1RUeXBlLlRocm93U3RhdGVtZW50LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlz
Ll9jcmVhdGVJbnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KSwKKyAgICAgICAgICAgICAgICByYW5n
ZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVHJ5U3RhdGVtZW50
JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5UcnlTdGF0ZW1lbnQsCisgICAgICAgICAgICAgICAg
YmxvY2s6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYmxvY2spLAorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXaGF0IGFyZSBndWFyZGVkIGhhbmRsZXJzPworICAgICAgICAgICAgICAg
IGd1YXJkZWRIYW5kbGVyczogbm9kZS5ndWFyZGVkSGFuZGxlcnMubWFwKHRoaXMuX2NyZWF0ZUlu
dGVybmFsQVNULmJpbmQodGhpcykpLAorICAgICAgICAgICAgICAgIGhhbmRsZXJzOiBub2RlLmhh
bmRsZXJzLm1hcCh0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAg
ICAgICAgICBmaW5hbGl6ZXI6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuZmluYWxpemVy
KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAg
ICAgICAgY2FzZSAnVW5hcnlFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg
ICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5VbmFy
eUV4cHJlc3Npb24sCisgICAgICAgICAgICAgICAgb3BlcmF0b3I6IG5vZGUub3BlcmF0b3IsCisg
ICAgICAgICAgICAgICAgYXJndW1lbnQ6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuYXJn
dW1lbnQpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAgICB9
OworICAgICAgICBjYXNlICdVcGRhdGVFeHByZXNzaW9uJzoKKyAgICAgICAgICAgIC8vIFByZWZp
eC9wb3N0Zml4IGV4cHJlc3Npb25zIGluIGVzcHJpbWEuCisgICAgICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgICAgIHR5cGU6IChub2RlLnByZWZpeCA/IFdlYkluc3BlY3Rvci5Tb3VyY2VD
b2RlQVNULkFTVFR5cGUuUHJlZml4RXhwcmVzc2lvbiA6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2Rl
QVNULkFTVFR5cGUuUG9zdGZpeEV4cHJlc3Npb24pLAorICAgICAgICAgICAgICAgIG9wZXJhdG9y
OiBub2RlLm9wZXJhdG9yLAorICAgICAgICAgICAgICAgIGFyZ3VtZW50OiB0aGlzLl9jcmVhdGVJ
bnRlcm5hbEFTVChub2RlLmFyZ3VtZW50KSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5y
YW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdGlvbic6
CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHR5cGU6IFdlYkluc3BlY3Rv
ci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuVmFyaWFibGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAg
ICAgICBkZWNsYXJhdGlvbnM6IG5vZGUuZGVjbGFyYXRpb25zLm1hcCh0aGlzLl9jcmVhdGVJbnRl
cm5hbEFTVC5iaW5kKHRoaXMpKSwKKyAgICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQor
ICAgICAgICAgICAgfTsKKyAgICAgICAgY2FzZSAnVmFyaWFibGVEZWNsYXJhdG9yJzoKKyAgICAg
ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5zcGVjdG9yLlNvdXJj
ZUNvZGVBU1QuQVNUVHlwZS5WYXJpYWJsZURlY2xhcmF0b3IsCisgICAgICAgICAgICAgICAgaWQ6
IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuaWQpLAorICAgICAgICAgICAgICAgIGluaXQ6
IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUuaW5pdCksCisgICAgICAgICAgICAgICAgcmFu
Z2U6IG5vZGUucmFuZ2UKKyAgICAgICAgICAgIH07CisgICAgICAgIGNhc2UgJ1doaWxlU3RhdGVt
ZW50JzoKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgdHlwZTogV2ViSW5z
cGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZS5XaGlsZVN0YXRlbWVudCwKKyAgICAgICAgICAg
ICAgICBwcmVkaWNhdGU6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUudGVzdCksCisgICAg
ICAgICAgICAgICAgYm9keTogdGhpcy5fY3JlYXRlSW50ZXJuYWxBU1Qobm9kZS5ib2R5KSwKKyAg
ICAgICAgICAgICAgICByYW5nZTogbm9kZS5yYW5nZQorICAgICAgICAgICAgfTsKKyAgICAgICAg
Y2FzZSAnV2l0aFN0YXRlbWVudCc6CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
ICAgIHR5cGU6IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULkFTVFR5cGUuV2l0aFN0YXRlbWVu
dCwKKyAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMuX2NyZWF0ZUludGVybmFsQVNUKG5vZGUu
b2JqZWN0KSwKKyAgICAgICAgICAgICAgICBib2R5OiB0aGlzLl9jcmVhdGVJbnRlcm5hbEFTVChu
b2RlLmJvZHkpLAorICAgICAgICAgICAgICAgIHJhbmdlOiBub2RlLnJhbmdlCisgICAgICAgICAg
ICB9OworICAgICAgICB9CisgICAgfSwKKworICAgIF9yZWN1cnNlIDogZnVuY3Rpb24obm9kZSwg
ZnVuYykgCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNUVHlwZTsK
KworICAgICAgICBzd2l0Y2gobm9kZS50eXBlKSB7CisgICAgICAgIGNhc2UgVHlwZXMuQXNzaWdu
bWVudEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmxlZnQsIGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLnJpZ2h0LCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LkFycmF5RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0
aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5lbGVtZW50cywgZnVuYyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5CbG9ja1N0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5ib2R5LCBmdW5jKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246
CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmxlZnQsIGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnJpZ2h0LCBmdW5j
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkJyZWFrU3RhdGVtZW50
OgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFR5cGVzLkNhdGNoQ2xhdXNlOgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wYXJhbSwgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9y
ZWN1cnNlKG5vZGUuYm9keSwgZnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUeXBlcy5Db250aW51ZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1bmMobm9kZSk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGFiZWwsIGZ1bmMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVHlwZXMuRG9XaGlsZVN0YXRlbWVudDoKKyAgICAgICAgICAgIGZ1
bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYyk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJlZGljYXRlLCBmdW5jKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkRlYnVnZ2VyU3RhdGVtZW50OgorICAgICAg
ICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVz
LkVtcHR5U3RhdGVtZW50OgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFR5cGVzLkV4cHJlc3Npb25TdGF0ZW1lbnQ6CisgICAgICAgICAg
ICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmV4cHJlc3Npb24s
IGZ1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuRm9yU3RhdGVt
ZW50OgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uo
bm9kZS5pbml0LCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5wcmVkaWNh
dGUsIGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLnVwZGF0ZSwgZnVuYyk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVudDoKKyAgICAgICAgICAg
IGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUubGVmdCwgZnVuYyk7
CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucmlnaHQsIGZ1bmMpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmJvZHksIGZ1bmMpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHlwZXMuRnVuY3Rpb25DYWxsOgorICAgICAgICAgICAgZnVuYyhub2RlKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5jYWxsZWUsIGZ1bmMpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYXJndW1lbnRzLCBmdW5jKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uRGVjbGFyYXRpb246CisgICAgICAg
ICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5j
KTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnBhcmFtcywgZnVuYyk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgICAgICAg
ICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmlkLCBmdW5jKTsK
KyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLnBhcmFtcywgZnVuYyk7CisgICAg
ICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwgZnVuYyk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBUeXBlcy5JZGVudGlmaWVyOgorICAgICAgICAgICAgZnVuYyhub2Rl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLklmU3RhdGVtZW50Ogor
ICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5w
cmVkaWNhdGUsIGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNvbnNlcXVl
bnQsIGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmFsdGVybmF0ZSwgZnVu
Yyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5MaXRlcmFsOgorICAg
ICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLkxhYmVsZWRTdGF0ZW1lbnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAg
ICAgdGhpcy5fcmVjdXJzZShub2RlLmxhYmVsLCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMuX3Jl
Y3Vyc2Uobm9kZS5ib2R5LCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAg
ICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5sZWZ0LCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMu
X3JlY3Vyc2Uobm9kZS5yaWdodCwgZnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBUeXBlcy5NZW1iZXJFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAg
ICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5vYmplY3QsIGZ1bmMpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZShub2RlLnByb3BlcnR5LCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUp
OworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2RlLmNhbGxlZSwgZnVuYyk7CisgICAgICAg
ICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5hcmd1bWVudHMsIGZ1bmMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuT2JqZWN0RXhwcmVzc2lvbjoKKyAgICAgICAg
ICAgIGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5wcm9w
ZXJ0aWVzLCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlBy
ZWZpeEV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLmFyZ3VtZW50LCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFR5cGVzLlByb2dyYW06CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAg
ICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuYm9keSwgZnVuYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5Qcm9wZXJ0eToKKyAgICAgICAgICAgIGZ1bmMobm9k
ZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUua2V5LCBmdW5jKTsKKyAgICAgICAg
ICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS52YWx1ZSwgZnVuYyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUeXBlcy5Qb3N0Zml4RXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMo
bm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuUmV0dXJuU3RhdGVtZW50Ogor
ICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5h
cmd1bWVudCwgZnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5T
ZXF1ZW5jZUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAg
dGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuZXhwcmVzc2lvbnMsIGZ1bmMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU3dpdGNoU3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5kaXNjcmltaW5hbnQs
IGZ1bmMpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZUFycmF5KG5vZGUuY2FzZXMsIGZ1bmMp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuU3dpdGNoQ2FzZToKKyAg
ICAgICAgICAgIGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUucHJl
ZGljYXRlLCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmNvbnNl
cXVlbnQsIGZ1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVGVy
bmFyeUV4cHJlc3Npb246CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhp
cy5fcmVjdXJzZShub2RlLnByZWRpY2F0ZSwgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuY29uc2VxdWVudCwgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5v
ZGUuYWx0ZXJuYXRlLCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5
cGVzLlRoaXNFeHByZXNzaW9uOgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlRocm93U3RhdGVtZW50OgorICAgICAgICAgICAg
ZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5hcmd1bWVudCwgZnVu
Yyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5UcnlTdGF0ZW1lbnQ6
CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShub2Rl
LmJsb2NrLCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2VBcnJheShub2RlLmd1YXJk
ZWRIYW5kbGVycywgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5o
YW5kbGVycywgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuZmluYWxpemVy
LCBmdW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLlVuYXJ5RXhw
cmVzc2lvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1
cnNlKG5vZGUuYXJndW1lbnQsIGZ1bmMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdGlvbjoKKyAgICAgICAgICAgIGZ1bmMobm9kZSk7Cisg
ICAgICAgICAgICB0aGlzLl9yZWN1cnNlQXJyYXkobm9kZS5kZWNsYXJhdGlvbnMsIGZ1bmMpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVHlwZXMuVmFyaWFibGVEZWNsYXJhdG9y
OgorICAgICAgICAgICAgZnVuYyhub2RlKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9k
ZS5pZCwgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuaW5pdCwgZnVuYyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUeXBlcy5XaGlsZVN0YXRlbWVudDoK
KyAgICAgICAgICAgIGZ1bmMobm9kZSk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUu
cHJlZGljYXRlLCBmdW5jKTsKKyAgICAgICAgICAgIHRoaXMuX3JlY3Vyc2Uobm9kZS5ib2R5LCBm
dW5jKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFR5cGVzLldpdGhTdGF0ZW1l
bnQ6CisgICAgICAgICAgICBmdW5jKG5vZGUpOworICAgICAgICAgICAgdGhpcy5fcmVjdXJzZShu
b2RlLm9iamVjdCwgZnVuYyk7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUuYm9keSwg
ZnVuYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0sCisKKyAgICBfcmVj
dXJzZUFycmF5IDogZnVuY3Rpb24oYXJyYXksIGZ1bmMpIAorICAgIHsKKyAgICAgICAgZnVuY3Rp
b24gZm9yRWFjaChub2RlKSB7CisgICAgICAgICAgICB0aGlzLl9yZWN1cnNlKG5vZGUsIGZ1bmMp
OworICAgICAgICB9CisKKyAgICAgICAgYXJyYXkuZm9yRWFjaChmb3JFYWNoLmJpbmQodGhpcykp
OworICAgIH0KK307CisKK1dlYkluc3BlY3Rvci5Tb3VyY2VDb2RlQVNULnByb3RvdHlwZS5fX3By
b3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnByb3RvdHlwZTsKKworLyogVGhpcyBpcyBhIG5p
Y2Ugc3RhcnRpbmcgb2ZmIHBvaW50IGlmIHlvdSB3YW50IHRvIHdyaXRlIGEgcmVjdXJzaXZlIGZ1
bmN0aW9uOgorCisgICAgdmFyIFR5cGVzID0gV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVBU1QuQVNU
VHlwZTsKKyAgICBzd2l0Y2ggKC4uLikgeworICAgIGNhc2UgVHlwZXMuQXNzaWdubWVudEV4cHJl
c3Npb246CisgICAgY2FzZSBUeXBlcy5BcnJheUV4cHJlc3Npb246CisgICAgY2FzZSBUeXBlcy5C
bG9ja1N0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkJpbmFyeUV4cHJlc3Npb246CisgICAgY2Fz
ZSBUeXBlcy5CcmVha1N0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkNhdGNoQ2xhdXNlOgorICAg
IGNhc2UgVHlwZXMuQ29udGludWVTdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBlcy5Eb1doaWxlU3Rh
dGVtZW50OgorICAgIGNhc2UgVHlwZXMuRGVidWdnZXJTdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBl
cy5FbXB0eVN0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLkV4cHJlc3Npb25TdGF0ZW1lbnQ6Cisg
ICAgY2FzZSBUeXBlcy5Gb3JTdGF0ZW1lbnQ6CisgICAgY2FzZSBUeXBlcy5Gb3JJblN0YXRlbWVu
dDoKKyAgICBjYXNlIFR5cGVzLkZ1bmN0aW9uQ2FsbDoKKyAgICBjYXNlIFR5cGVzLkZ1bmN0aW9u
RGVjbGFyYXRpb246CisgICAgY2FzZSBUeXBlcy5GdW5jdGlvbkV4cHJlc3Npb246CisgICAgY2Fz
ZSBUeXBlcy5JZGVudGlmaWVyOgorICAgIGNhc2UgVHlwZXMuSWZTdGF0ZW1lbnQ6CisgICAgY2Fz
ZSBUeXBlcy5MaXRlcmFsOgorICAgIGNhc2UgVHlwZXMuTGFiZWxlZFN0YXRlbWVudDoKKyAgICBj
YXNlIFR5cGVzLkxvZ2ljYWxFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuTWVtYmVyRXhwcmVz
c2lvbjoKKyAgICBjYXNlIFR5cGVzLk5ld0V4cHJlc3Npb246CisgICAgY2FzZSBUeXBlcy5PYmpl
Y3RFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuUHJlZml4RXhwcmVzc2lvbjoKKyAgICBjYXNl
IFR5cGVzLlByb2dyYW06CisgICAgY2FzZSBUeXBlcy5Qcm9wZXJ0eToKKyAgICBjYXNlIFR5cGVz
LlBvc3RmaXhFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuUmV0dXJuU3RhdGVtZW50OgorICAg
IGNhc2UgVHlwZXMuU2VxdWVuY2VFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuU3dpdGNoU3Rh
dGVtZW50OgorICAgIGNhc2UgVHlwZXMuU3dpdGNoQ2FzZToKKyAgICBjYXNlIFR5cGVzLlRlcm5h
cnlFeHByZXNzaW9uOgorICAgIGNhc2UgVHlwZXMuVGhpc0V4cHJlc3Npb246CisgICAgY2FzZSBU
eXBlcy5UaHJvd1N0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLlRyeVN0YXRlbWVudDoKKyAgICBj
YXNlIFR5cGVzLlVuYXJ5RXhwcmVzc2lvbjoKKyAgICBjYXNlIFR5cGVzLlZhcmlhYmxlRGVjbGFy
YXRpb246CisgICAgY2FzZSBUeXBlcy5WYXJpYWJsZURlY2xhcmF0b3I6CisgICAgY2FzZSBUeXBl
cy5XaGlsZVN0YXRlbWVudDoKKyAgICBjYXNlIFR5cGVzLldpdGhTdGF0ZW1lbnQ6CisgICAgfQor
Ki8KSW5kZXg6IFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJj
ZUNvZGVUZXh0RWRpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1NvdXJjZUNvZGVUZXh0RWRpdG9yLmpzCShyZXZpc2lvbiAxNzEw
MTYpCisrKyBTb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9Tb3VyY2VD
b2RlVGV4dEVkaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtOTc1LDYgKzk3NSw5IEBAIFdlYklu
c3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QKICAgICAgICAgZWxzZSBpZiAoKHRo
aXMuX3NvdXJjZUNvZGUgaW5zdGFuY2VvZiBXZWJJbnNwZWN0b3IuU291cmNlTWFwUmVzb3VyY2Ug
fHwgdGhpcy5fc291cmNlQ29kZS5zb3VyY2VNYXBzLmxlbmd0aCAhPT0gMCkgJiYgV2ViSW5zcGVj
dG9yLm1vZGlmaWVyS2V5cy5tZXRhS2V5ICYmICFXZWJJbnNwZWN0b3IubW9kaWZpZXJLZXlzLmFs
dEtleSAmJiAhV2ViSW5zcGVjdG9yLm1vZGlmaWVyS2V5cy5zaGlmdEtleSkKICAgICAgICAgICAg
IG1vZGUgPSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1v
ZGUuTm9uU3ltYm9sVG9rZW5zOwogCisgICAgICAgIGlmICghKG1vZGUgPT09IFdlYkluc3BlY3Rv
ci5Db2RlTWlycm9yVG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVz
c2lvbikpCisgICAgICAgICAgICBtb2RlID0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRy
YWNraW5nQ29udHJvbGxlci5Nb2RlLlBvc3RKYXZhU2NyaXB0RXhwcmVzc2lvbjsKKwogICAgICAg
ICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9sbGVyLmVuYWJsZWQgPSBtb2RlICE9PSBXZWJJbnNw
ZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uZTsKIAogICAg
ICAgICBpZiAobW9kZSA9PT0gdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlKQpAQCAt
OTkyLDYgKzk5NSw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90b3QK
ICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9s
bGVyLk1vZGUuSmF2YVNjcmlwdEV4cHJlc3Npb246CisgICAgICAgIGNhc2UgV2ViSW5zcGVjdG9y
LkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29udHJvbGxlci5Nb2RlLlBvc3RKYXZhU2NyaXB0RXhw
cmVzc2lvbjoKICAgICAgICAgICAgIHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIubW91c2VP
dmVyRGVsYXlEdXJhdGlvbiA9IFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5EdXJh
dGlvblRvTW91c2VPdmVyVG9rZW5Ub01ha2VIb3ZlcmVkVG9rZW47CiAgICAgICAgICAgICB0aGlz
LnRva2VuVHJhY2tpbmdDb250cm9sbGVyLm1vdXNlT3V0UmVsZWFzZURlbGF5RHVyYXRpb24gPSBX
ZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3IuRHVyYXRpb25Ub01vdXNlT3V0T2ZIb3Zl
cmVkVG9rZW5Ub1JlbGVhc2U7CiAgICAgICAgICAgICB0aGlzLnRva2VuVHJhY2tpbmdDb250cm9s
bGVyLmNsYXNzTmFtZUZvckhpZ2hsaWdodGVkUmFuZ2UgPSBXZWJJbnNwZWN0b3IuU291cmNlQ29k
ZVRleHRFZGl0b3IuSG92ZXJlZEV4cHJlc3Npb25IaWdobGlnaHRTdHlsZUNsYXNzTmFtZTsKQEAg
LTEwMjksNiArMTAzMyw3IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VDb2RlVGV4dEVkaXRvci5wcm90
b3QKICAgICAgICAgICAgIHRoaXMuX2Rpc21pc3NQb3BvdmVyKCk7CiAgICAgfSwKIAorCiAgICAg
dG9rZW5UcmFja2luZ0NvbnRyb2xsZXJIaWdobGlnaHRlZFJhbmdlV2FzQ2xpY2tlZDogZnVuY3Rp
b24odG9rZW5UcmFja2luZ0NvbnRyb2xsZXIpCiAgICAgewogICAgICAgICBpZiAodGhpcy50b2tl
blRyYWNraW5nQ29udHJvbGxlci5tb2RlICE9PSBXZWJJbnNwZWN0b3IuQ29kZU1pcnJvclRva2Vu
VHJhY2tpbmdDb250cm9sbGVyLk1vZGUuTm9uU3ltYm9sVG9rZW5zKQpAQCAtMTA1Miw3ICsxMDU3
LDkgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5nQ29u
dHJvbGxlci5Nb2RlLkphdmFTY3JpcHRFeHByZXNzaW9uKSB7CisgICAgICAgIGlmICh0aGlzLnRv
a2VuVHJhY2tpbmdDb250cm9sbGVyLm1vZGUgPT09IFdlYkluc3BlY3Rvci5Db2RlTWlycm9yVG9r
ZW5UcmFja2luZ0NvbnRyb2xsZXIuTW9kZS5KYXZhU2NyaXB0RXhwcmVzc2lvbgorICAgICAgICAg
ICAgfHwgdGhpcy50b2tlblRyYWNraW5nQ29udHJvbGxlci5tb2RlID09PSBXZWJJbnNwZWN0b3Iu
Q29kZU1pcnJvclRva2VuVHJhY2tpbmdDb250cm9sbGVyLk1vZGUuUG9zdEphdmFTY3JpcHRFeHBy
ZXNzaW9uKSAKKyAgICAgICAgewogICAgICAgICAgICAgdGhpcy5fdG9rZW5UcmFja2luZ0NvbnRy
b2xsZXJIaWdobGlnaHRlZEphdmFTY3JpcHRFeHByZXNzaW9uKGNhbmRpZGF0ZSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTEwNzcsMzkgKzEwODQsNzYgQEAgV2ViSW5zcGVj
dG9yLlNvdXJjZUNvZGVUZXh0RWRpdG9yLnByb3RvdAogCiAgICAgICAgIGZ1bmN0aW9uIHBvcHVs
YXRlKGVycm9yLCByZXN1bHQsIHdhc1Rocm93bikKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGVycm9yIHx8IHdhc1Rocm93bikKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGUgIT09IHRoaXMudG9rZW5UcmFja2luZ0NvbnRyb2xsZXIuY2FuZGlk
YXRlKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAgICAgdmFyIGRhdGEgPSBX
ZWJJbnNwZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHJlc3VsdCk7Ci0gICAgICAgICAg
ICBzd2l0Y2ggKGRhdGEudHlwZSkgewotICAgICAgICAgICAgY2FzZSAiZnVuY3Rpb24iOgotICAg
ICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yRnVuY3Rpb24oZGF0YSk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJvYmplY3QiOgotICAgICAgICAgICAg
ICAgIGlmIChkYXRhLnN1YnR5cGUgPT09ICJyZWdleHAiKSAKLSAgICAgICAgICAgICAgICAgICAg
dGhpcy5fc2hvd1BvcG92ZXJGb3JSZWdFeHAoZGF0YSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckZvck9iamVjdChkYXRhKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgInN0cmluZyI6Ci0gICAgICAg
ICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJGb3JTdHJpbmcoZGF0YSk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJudW1iZXIiOgotICAgICAgICAgICAgICAgIHRo
aXMuX3Nob3dQb3BvdmVyRm9yTnVtYmVyKGRhdGEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSAiYm9vbGVhbiI6Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2hvd1Bv
cG92ZXJGb3JCb29sZWFuKGRhdGEpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSAidW5kZWZpbmVkIjoKLSAgICAgICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckZv
clVuZGVmaW5lZChkYXRhKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHZh
ciBkYXRhOworICAgICAgICAgICAgdmFyIHNvdXJjZUNvZGUgPSB0aGlzLl9zb3VyY2VDb2RlOwor
ICAgICAgICAgICAgdmFyIHNvdXJjZUlEID0gc291cmNlQ29kZS5fc2NyaXB0c1swXS5faWQ7Cisg
ICAgICAgICAgICB2YXIgZGlzcGxheSA9IF9kaXNwbGF5LmJpbmQodGhpcyk7CisgICAgICAgICAg
ICB2YXIgcmFuZ2UgPSBjYW5kaWRhdGUuaG92ZXJlZFRva2VuUmFuZ2U7CisgICAgICAgICAgICB2
YXIgb2Zmc2V0OworICAgICAgICAgICAgaWYgKHRoaXMuX2Zvcm1hdHRlclNvdXJjZU1hcCkKKyAg
ICAgICAgICAgICAgICBvZmZzZXQgPSB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAuZm9ybWF0dGVk
VG9PcmlnaW5hbE9mZnNldChyYW5nZS5zdGFydC5saW5lLCByYW5nZS5zdGFydC5jaCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb2Zmc2UgPSB0aGlzLnRva2VuVHJhY2tpbmdD
b250cm9sbGVyLl9jb2RlTWlycm9yLmdldERvYygpLmluZGV4RnJvbVBvcyh7IGxpbmUgOiByYW5n
ZS5zdGFydC5saW5lLCBjaCA6IHJhbmdlLnN0YXJ0LmNoIH0pOworICAgICAgICAgICAgY29uc29s
ZS5sb2coIk9mZnNldDogIiArIG9mZnNldCk7CisKKyAgICAgICAgICAgIGlmIChlcnJvciB8fCB3
YXNUaHJvd24pCisgICAgICAgICAgICAgICAgZGF0YSA9IHsgdHlwZSA6ICJudW1iZXIiLCBfZGVz
Y3JpcHRpb24gOiAiIiwgZ2V0IGRlc2NyaXB0aW9uKCkgeyByZXR1cm4gdGhpcy5fZGVzY3JpcHRp
b24gfSB9OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGRhdGEgPSBXZWJJbnNw
ZWN0b3IuUmVtb3RlT2JqZWN0LmZyb21QYXlsb2FkKHJlc3VsdCk7CisKKyAgICAgICAgICAgIGZ1
bmN0aW9uIF9kaXNwbGF5KCkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7
CisgICAgICAgICAgICAgICAgY2FzZSAiZnVuY3Rpb24iOgorICAgICAgICAgICAgICAgICAgICB0
aGlzLl9zaG93UG9wb3ZlckZvckZ1bmN0aW9uKGRhdGEpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJvYmplY3QiOgorICAgICAgICAgICAgICAgICAg
ICBpZiAoZGF0YS5zdWJ0eXBlID09PSAicmVnZXhwIikgCisgICAgICAgICAgICAgICAgICAgICAg
ICB0aGlzLl9zaG93UG9wb3ZlckZvclJlZ0V4cChkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJGb3JPYmplY3Qo
ZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
InN0cmluZyI6CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yU3RyaW5n
KGRhdGEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
ICJudW1iZXIiOgorICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckZvck51bWJl
cihkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAiYm9vbGVhbiI6CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dQb3BvdmVyRm9yQm9v
bGVhbihkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAidW5kZWZpbmVkIjoKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd1BvcG92ZXJG
b3JVbmRlZmluZWQoZGF0YSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlcihl
cnJvciwgdHlwZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXR5cGVzLmRpc3BsYXlUeXBlTmFt
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgaWYgKGRh
dGEuX2Rlc2NyaXB0aW9uLmxlbmd0aCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5fZGVzY3Jp
cHRpb24gKz0gIlxuIgorICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGF0YS5fZGVz
Y3JpcHRpb24gKz0gIlR5cGVzOlxuIjsKKyAgICAgICAgICAgICAgICBkYXRhLl9kZXNjcmlwdGlv
biArPSBKU09OLnN0cmluZ2lmeSh0eXBlcywgdW5kZWZpbmVkLCAyKTsKKyAgICAgICAgICAgICAg
ICAvL2RhdGEuX2Rlc2NyaXB0aW9uICs9IHR5cGVzLmRpc3BsYXlUeXBlTmFtZSArICJcbiI7Cisg
ICAgICAgICAgICAgICAgLy9kYXRhLl9kZXNjcmlwdGlvbiArPSAiTFVCOiAiICsgdHlwZXMubGVh
c3RVcHBlckJvdW5kLmpvaW4oIiwgIikgKyAiXG4iOworICAgICAgICAgICAgICAgIC8vZGF0YS5f
ZGVzY3JpcHRpb24gKz0gIkdsb2JhbDpcbiI7CisgICAgICAgICAgICAgICAgLy9kYXRhLl9kZXNj
cmlwdGlvbiArPSAKKworICAgICAgICAgICAgICAgIGRpc3BsYXkoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgUnVudGltZUFnZW50LmdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVBdE9m
ZnNldChXZWJJbnNwZWN0b3IuU2NyaXB0LlR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IuVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCwgc291cmNlSUQsIG9mZnNldCwgaGFuZGxl
cik7CiAgICAgICAgIH0KIAotICAgICAgICBEZWJ1Z2dlckFnZW50LmV2YWx1YXRlT25DYWxsRnJh
bWUuaW52b2tlKHtjYWxsRnJhbWVJZDogV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTWFuYWdlci5hY3Rp
dmVDYWxsRnJhbWUuaWQsIGV4cHJlc3Npb246IGNhbmRpZGF0ZS5leHByZXNzaW9uLCBvYmplY3RH
cm91cDogInBvcG92ZXIiLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGU6IHRy
dWV9LCBwb3B1bGF0ZS5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKHRoaXMudG9rZW5UcmFja2lu
Z0NvbnRyb2xsZXIubW9kZSA9PT0gV2ViSW5zcGVjdG9yLkNvZGVNaXJyb3JUb2tlblRyYWNraW5n
Q29udHJvbGxlci5Nb2RlLlBvc3RKYXZhU2NyaXB0RXhwcmVzc2lvbikgeworICAgICAgICAgICAg
cG9wdWxhdGUuY2FsbCh0aGlzLCB0cnVlLCBudWxsLCB0cnVlKQorICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIERlYnVnZ2VyQWdlbnQuZXZhbHVhdGVPbkNhbGxGcmFtZS5pbnZva2Uoe2NhbGxG
cmFtZUlkOiBXZWJJbnNwZWN0b3IuZGVidWdnZXJNYW5hZ2VyLmFjdGl2ZUNhbGxGcmFtZS5pZCwg
ZXhwcmVzc2lvbjogY2FuZGlkYXRlLmV4cHJlc3Npb24sIG9iamVjdEdyb3VwOiAicG9wb3ZlciIs
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZTogdHJ1ZX0sIHBvcHVsYXRlLmJp
bmQodGhpcykpOwogICAgIH0sCiAKICAgICBfc2hvd1BvcG92ZXI6IGZ1bmN0aW9uKGNvbnRlbnQp
CkBAIC0xMTc1LDYgKzEyMTksNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlQ29kZVRleHRFZGl0b3Iu
cHJvdG90CiAgICAgICAgICAgICB0aGlzLl9zaG93UG9wb3ZlckZvck51bGwoZGF0YSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgY29uc29sZS5sb2coIlxuT2JqZWN0
UG9wb3ZlcjpcbkRhdGE6XG4iICsgSlNPTi5zdHJpbmdpZnkoZGF0YSwgdW5kZWZpbmVkLCAyKSkK
IAogICAgICAgICB2YXIgY29udGVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwog
ICAgICAgICBjb250ZW50LmNsYXNzTmFtZSA9ICJvYmplY3QgZXhwYW5kYWJsZSI7CkluZGV4OiBT
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9UZXh0RWRpdG9yLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Rl
eHRFZGl0b3IuanMJKHJldmlzaW9uIDE3MTAxNikKKysrIFNvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1RleHRFZGl0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYg
KzY3LDQ2IEBAIFdlYkluc3BlY3Rvci5UZXh0RWRpdG9yID0gZnVuY3Rpb24oZWxlbWUKICAgICB0
aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBudWxsOwogCiAgICAgdGhpcy5fZGVsZWdhdGUgPSBk
ZWxlZ2F0ZSB8fCBudWxsOworCisgICAgZnVuY3Rpb24gbW91c2VVcFRlc3QoZXZlbnQpIHsKKwor
ICAgICAgICBpZiAoIWRlbGVnYXRlIHx8ICFkZWxlZ2F0ZS5fc291cmNlQ29kZSB8fCAhZGVsZWdh
dGUuX3NvdXJjZUNvZGUuX3NjcmlwdHMgfHwgIWRlbGVnYXRlLl9zb3VyY2VDb2RlLl9zY3JpcHRz
WzBdKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdGhpcy5fdG9rZW5UcmFja2luZ0Nv
bnRyb2xsZXIuZW5hYmxlZCA9IHRydWUKKworICAgICAgICB2YXIgc2NyaXB0ID0gZGVsZWdhdGUu
X3NvdXJjZUNvZGUuX3NjcmlwdHNbMF0KKyAgICAgICAgICAgLCBzb3VyY2VJRCA9IHNjcmlwdC5f
aWQKKyAgICAgICAgICAgLCB0b2tlbkluZm8gPSB0aGlzLl90b2tlblRyYWNraW5nQ29udHJvbGxl
ci5faG92ZXJlZFRva2VuSW5mbworICAgICAgICAgICAsIHRva2VuIAorCisgICAgICAgIGlmICgh
dG9rZW5JbmZvIHx8ICF0b2tlbkluZm8udG9rZW4pCisgICAgICAgICAgICByZXR1cm4KKworICAg
ICAgICB0b2tlbiA9IHRva2VuSW5mby50b2tlbgorICAgICAgICBjb25zb2xlLmxvZygiXG5DYW5k
aWRhdGU6XG4iICsgSlNPTi5zdHJpbmdpZnkodG9rZW5JbmZvLCB1bmRlZmluZWQsIDIpKQorICAg
ICAgICBpZiAodG9rZW4uc3RhdGUubGFzdFR5cGUgPT09ICJ2YXJpYWJsZSIpIHsKKworICAgICAg
ICAgICAgLy9kZWxlZ2F0ZS5zb3VyY2VDb2RlLl9zY3JpcHRzLmZvckVhY2goZnVuY3Rpb24oZSwg
aWR4KSB7CisgICAgICAgICAgICAvLyAgICBjb25zb2xlLmxvZygiXG5JRFg6ICIgKyBpZHggKyAi
XG5VUkw6ICIgKyBlLl91cmwgKyAiXG5JRDogIiArIGUuX2lkKQorICAgICAgICAgICAgLy99KQor
CisgICAgICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJvciwgdHlwZVN0cmluZykgeworICAg
ICAgICAgICAgICAgIGlmIChlcnJvcikgCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9n
KCJFUlJPUiBmcm9tIGhhbmRsZXI6ICIgKyBlcnJvcikKKworICAgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJcblx0Z290IHJ1bnRpbWUgdHlwZXMgaW4gdXJsOiBcIiIgKyBzY3JpcHQuX3VybCAr
ICJcIiIgKyAiXG5cdFJ1bnRpbWUgdHlwZXMgZm9yIHZhcmlhYmxlOiAnIiArIHRva2VuLnN0cmlu
ZyArICInIGlzOiAnIiArIHR5cGVTdHJpbmcgKyAiJyIpCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAvL2NvbnNvbGUubG9nKCJcblN0YXJ0IGxpbmU6ICIgKyB0b2tlbkluZm8ucG9zaXRpb24u
bGluZSkKKworICAgICAgICAgICAgdmFyIGxpbmUgPSB0b2tlbkluZm8ucG9zaXRpb24ubGluZSAr
IDEKKyAgICAgICAgICAgIFJ1bnRpbWVBZ2VudC5nZXRSdW50aW1lVHlwZUZvclZhcmlhYmxlSW5U
ZXh0UmFuZ2UodG9rZW4uc3RyaW5nLCBzb3VyY2VJRCwgbGluZSwgdG9rZW5JbmZvLnBvc2l0aW9u
LmNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmUsIHRva2VuSW5mby5wb3NpdGlvbi5jaCArIHRva2VuLnN0cmluZy5s
ZW5ndGgsIGNhbGxiYWNrKQorICAgICAgICB9CisgICAgfQorCisgICAgLy9kb2N1bWVudC5hZGRF
dmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCBtb3VzZVVwVGVzdC5iaW5kKHRoaXMpLCB0cnVlKTsK
KyAgICAKIH07CiAKIFdlYkluc3BlY3Rvci5PYmplY3QuYWRkQ29uc3RydWN0b3JGdW5jdGlvbnMo
V2ViSW5zcGVjdG9yLlRleHRFZGl0b3IpOwpAQCAtMTI1NCwxMiArMTI5NCwxNCBAQCBXZWJJbnNw
ZWN0b3IuVGV4dEVkaXRvci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgdmFyIGZvcm1h
dHRlZExpbmVFbmRpbmdzID0gW107CiAgICAgICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSB7b3Jp
Z2luYWw6IFswXSwgZm9ybWF0dGVkOiBbMF19OwogICAgICAgICAgICAgICAgIHZhciBidWlsZGVy
ID0gbmV3IEZvcm1hdHRlckNvbnRlbnRCdWlsZGVyKG1hcHBpbmcsIG9yaWdpbmFsTGluZUVuZGlu
Z3MsIGZvcm1hdHRlZExpbmVFbmRpbmdzLCAwLCAwLCBpbmRlbnRTdHJpbmcpOworICAgICAgICAg
ICAgICAgIC8vdmFyIGZvcm1hdHRlciA9IG5ldyBGb3JtYXR0ZXIodGhpcy5fZGVsZWdhdGUuX3Nv
dXJjZUNvZGUuX3NjcmlwdHNbMF0sIGJ1aWxkZXIpOwogICAgICAgICAgICAgICAgIHZhciBmb3Jt
YXR0ZXIgPSBuZXcgRm9ybWF0dGVyKHRoaXMuX2NvZGVNaXJyb3IsIGJ1aWxkZXIpOwogICAgICAg
ICAgICAgICAgIGZvcm1hdHRlci5mb3JtYXQoc3RhcnQsIGVuZCk7CiAKICAgICAgICAgICAgICAg
ICB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXAgPSBXZWJJbnNwZWN0b3IuRm9ybWF0dGVyU291cmNl
TWFwLmZyb21CdWlsZGVyKGJ1aWxkZXIpOwogCiAgICAgICAgICAgICAgICAgdGhpcy5fY29kZU1p
cnJvci5zZXRWYWx1ZShidWlsZGVyLmZvcm1hdHRlZENvbnRlbnQpOworICAgICAgICAgICAgICAg
IHRoaXMuX2RlbGVnYXRlLl9zb3VyY2VDb2RlLl9zY3JpcHRzWzBdLmluc2VydFR5cGVBbm5vdGF0
aW9ucyh0aGlzLl9jb2RlTWlycm9yLCB0aGlzLl9mb3JtYXR0ZXJTb3VyY2VNYXApOwogCiAgICAg
ICAgICAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uVG9SZXZlYWwpIHsKICAgICAgICAgICAgICAg
ICAgICAgdmFyIG5ld1JldmVhbFBvc2l0aW9uID0gdGhpcy5fZm9ybWF0dGVyU291cmNlTWFwLm9y
aWdpbmFsVG9Gb3JtYXR0ZWQodGhpcy5fcG9zaXRpb25Ub1JldmVhbC5saW5lTnVtYmVyLCB0aGlz
Ll9wb3NpdGlvblRvUmV2ZWFsLmNvbHVtbk51bWJlcik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234890</attachid>
            <date>2014-07-14 16:31:27 -0700</date>
            <delta_ts>2014-07-14 16:46:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55453</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE0LTA3LTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgaW1wcm92ZW1lbnRzIHRvIFR5cGUgUHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGltcHJvdmVkIHRoZSBBUEkgYmV0d2VlbiB0
aGUgaW5zcGVjdG9yIGFuZCBKU0MuIFdlIG5vIGxvbmdlciBzZW5kIG9uZSBodWdlCisgICAgICAg
IHN0cmluZyB0byB0aGUgaW5zcGVjdG9yLiBXZSBub3cgc2VuZCBzdHJ1Y3R1cmVkIGRhdGEgdGhh
dCByZXByZXNlbnRzIHRoZSB0eXBlCisgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgSlNDIGhhcyBj
b2xsZWN0ZWQuIEkndmUgYWxzbyBjcmVhdGVkIGEgYmVnaW5uaW5nIGltcGxlbWVudGF0aW9uIAor
ICAgICAgICBvZiBhIHR5cGUgbGF0dGljZSB0aGF0IGFsbG93cyB1cyB0byByZXNvbHZlIGEgZGlz
cGxheSBuYW1lIGZvciBhIHR5cGUgdGhhdAorICAgICAgICBjb25zaXN0cyBvZiBhIHNpbmdsZSB3
b3JkLgorCisgICAgICAgIEkgY3JlYXRlZCBhIGRhdGEgc3RydWN0dXJlIHRoYXQga25vd3Mgd2hp
Y2ggZnVuY3Rpb25zIGhhdmUgZXhlY3V0ZWQuIFRoaXMKKyAgICAgICAgc29sdmVzIHRoZSBidWcg
d2hlcmUgdHlwZXMgaW5zaWRlIGFuIHVuLWV4ZWN1dGVkIGZ1bmN0aW9uIHdpbGwgcmVzb2x2ZQor
ICAgICAgICB0byB0aGUgdHlwZSBvZiB0aGUgZW5jbG9zaW5nIGV4cHJlc3Npb24gb2YgdGhhdCBm
dW5jdGlvbi4gVGhpcyBkYXRhCisgICAgICAgIHN0cnVjdHVyZSBtYXkgYWxzbyBiZSB1c2VmdWwg
bGF0ZXIgaWYgdGhlIGluc3BlY3RvciBjaG9vc2VzIHRvIGNyZWF0ZSBhIFVJCisgICAgICAgIGFy
b3VuZCBzaG93aW5nIHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGV4ZWN1dGVkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAqIGJ5dGVjb2RlL1R5cGVMb2NhdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxl
QXRPZmZzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAg
ICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6
OlByb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6aW5p
dGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5o
OgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpoaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hG
aWRlbGl0eUxvZyk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9j
ZXNzTG9nVGhyZWFkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmg6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6cmVjb3JkVHlwZUlu
Zm9ybWF0aW9uRm9yTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjps
b2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlcjo6aW5zZXJ0TmV3TG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6Cisg
ICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpmaW5kTG9jYXRpb24pOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVkQXRPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omluc2VydFVuZXhlY3V0ZWRSYW5nZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6cmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRUeXBl
c0ZvclZhcmlhYmxlSW5BdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlOjpGdW5jdGlvblJhbmdlOjpGdW5jdGlvblJhbmdlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlOjpGdW5jdGlvblJhbmdlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOjpGdW5jdGlvblJhbmdlOjpoYXNoKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpmdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVT
ZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhbHVlKToK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6
VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZG9lc1R5cGVDb25m
b3JtVG8pOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkaXNwbGF5TmFtZSk6CisgICAgICAgIChK
U0M6OlR5cGVTZXQ6OmFsbFR5cGVOYW1lcyk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFsbFN0
cnVjdHVyZVJlcHJlc2VudGF0aW9ucyk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmxlYXN0VXBw
ZXJCb3VuZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmcp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6Y29uc3RydWN0b3JOYW1lKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcyk6CisgICAgICAgIChK
U0M6OlZNOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpWTTo6dXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkpOgorICAgICAgICAoSlNDOjpWTTo6aGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyKToKKwogMjAxNC0wNy0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydCB1bmludGVuZGVkIGNoYW5nZSBpbiByMTcxMDUx
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg1LDEyICsxNjg1LDE3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
CiAKKyAgICBpZiAodm0oKS0+aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAg
ICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJj
ZUlEKCksIG1fb3duZXJFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRP
ZmZzZXQoKSk7CisKICAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xv
YmFsT2JqZWN0KCkpCiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwg
b3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRl
Y2xzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMo
KSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChpKTsKKyAgICAgICAgaWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5n
ZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBs
aW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgpOwogICAgICAgICB1bnNp
Z25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVj
dXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICAgICAgYm9vbCBzdGFydENvbHVtbklzT25P
d25lclN0YXJ0TGluZSA9ICF1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwpA
QCAtMTcwNyw2ICsxNzEyLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgIG1fZnVuY3Rpb25FeHBycy5yZXNpemVUb0ZpdCh1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0
YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAgICAgIGlmICh2
bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICAgICAgdm0o
KS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgp
LT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVu
bGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCks
IHVubGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgp
KTsKICAgICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5l
Q291bnQoKTsKICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5s
aW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAg
IGJvb2wgc3RhcnRDb2x1bW5Jc09uT3duZXJTdGFydExpbmUgPSAhdW5saW5rZWRFeGVjdXRhYmxl
LT5maXJzdExpbmVPZmZzZXQoKTsKQEAgLTE5NzYsMTEgKzE5ODMsMTQgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQ6IAotICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0
aW9uQXJndW1lbnQ6Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rp
b25UaGlzT2JqZWN0OiB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25Bcmd1bWVudDogewogICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlh
YmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29k
ZUZ1bmN0aW9uVGhpc09iamVjdDogeworICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2Jh
bFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50OiB7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldCA9IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKICAgICAgICAgICAg
ICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3Rh
dGVtZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9j
YXRpb24uaAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1R5cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5hbWVz
cGFjZSBKU0MgewogZW51bSBIaWdoRmlkZWxpdHlHbG9iYWxJREZsYWdzIHsKICAgICBIaWdoRmlk
ZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbiA9IC0xLAogICAgIEhpZ2hGaWRlbGl0eU5vR2xv
YmFsSURFeGlzdHMgPSAtMiwKLSAgICBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPSAtMwor
ICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zLAorICAgIEhpZ2hGaWRlbGl0eVRo
aXNTdGF0ZW1lbnQgPSAtNAogfTsKIAogY2xhc3MgVHlwZUxvY2F0aW9uIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1fdW5saW5rZWRC
b2R5RW5kQ29sdW1uKG1fbGluZUNvdW50ID8gbm9kZS0+ZW5kQ29sdW1uKCkgOiBub2RlLT5lbmRD
b2x1bW4oKSAtIG5vZGUtPnN0YXJ0Q29sdW1uKCkpCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KG5vZGUt
PnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKICAgICAsIG1f
c291cmNlTGVuZ3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQorICAgICwgbV9oaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQobm9kZS0+ZnVuY3Rpb25OYW1lU3RhcnQoKSkKKyAg
ICAsIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldChub2RlLT5zdGFydFN0YXJ0
T2Zmc2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCiAgICAgLCBtX2ZlYXR1cmVz
KG5vZGUtPmZlYXR1cmVzKCkpCiAgICAgLCBtX2Z1bmN0aW9uTW9kZShub2RlLT5mdW5jdGlvbk1v
ZGUoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDYgKzEyNSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQogICAgIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQogICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisgICAgdW5zaWdu
ZWQgaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBo
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAKICAgICBTdHJpbmcgcGFyYW1TdHJp
bmcoKSBjb25zdDsKIApAQCAtMTg2LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CiAgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKICAg
ICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFbmRPZmZzZXQ7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzcsNyArMzM3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZN
JgogCiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChjb2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwogCi0gICAgYm9vbCBjYW5MYXpp
bHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3Jl
VGhhblZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOworICAgIGJvb2wgY2Fu
TGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0aW9uRm9y
TW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rcyAmJiAhaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKTsKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0g
Y29kZUJsb2NrLT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlv
blN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
ID0gZnVuY3Rpb25TdGFja1tpXTsKQEAgLTExMTYsNiArMTExNiwxNCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsCiAgICAgcmV0dXJuIGRzdDsKIH0KIAordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZERpdm90KQoreworICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RhcnREaXZvdC5vZmZzZXQ7
IC8vIFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBvaW50cywgQU5EIDAgaW5kZXhl
ZC4KKyAgICB1bnNpZ25lZCBlbmQgPSBlbmREaXZvdC5vZmZzZXQgLSAxOyAvLyBFbmQgUmFuZ2Vz
IGFscmVhZHkgZ28gb25lIHBhc3QgdGhlIGluY2x1c2l2ZSByYW5nZSwgc28gc3VidHJhY3QgMS4K
KyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAt
IDE7CisgICAgbV9jb2RlQmxvY2stPmFkZEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lv
bkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIHN0YXJ0LCBlbmQpOworfQorCiB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiBy
ZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxh
ZyBmbGFnKQogewogICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlk
ZWxpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjQsMTMgKzMyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RP
ZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmREaXZvdCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGFy
dERpdm90Lm9mZnNldCArIDE7IC8vIFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBv
aW50cywgQU5EIDEgaW5kZXhlZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGVuZERpdm90
Lm9mZnNldDsgLy8gRW5kIFJhbmdlcyBhbHJlYWR5IGdvIG9uZSBwYXN0IHRoZSBpbmNsdXNpdmUg
cmFuZ2UsIHNvIG5vIG5lZWQgdG8gZG8gKyAxIC0gMS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25JbmZvKGlu
c3RydWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKLSAgICAgICAgfQogCiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBsZWZ0SGFuZFNpZGVOZWVkc0NvcHkoYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCBib29sIHJpZ2h0SXNQdXJlKQogICAgICAgICB7CkBAIC0zNDgsNiArMzQxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGUobik7CiAgICAgICAgIH0K
IAorICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmREaXZvdCk7CiAgICAgICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoUmVnaXN0ZXJJRCogZHN0LCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVG
bGFnKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJv
b2wpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3MTA4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NzAsOCArOTcwLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29s
bGVjdAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBH
QyBzdGFydGluZyBjb2xsZWN0aW9uLlxuIik7CiAjZW5kaWYKLSAgICBpZiAodm0oKS0+aXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5
TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coZmFsc2UsICJHQyIpOwogICAgIAogICAgIGRv
dWJsZSBiZWZvcmUgPSAwOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CkBAIC05ODEsNiAr
OTc5LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICAK
ICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7
CiAgICAgCisgICAgaWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAgICB2bSgp
LT5oaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiR0MiKTsKKyAgICB9
CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAgQVNTRVJU
KHZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0
cmluZ1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCShyZXZp
c2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBA
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtMTkxLDExICsx
OTMsMjYgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cgogewogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0
T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl92YXJpYWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwgU3RyaW5nKiBvdXRfdHlwZXMpIAordm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVBdE9mZnNldChF
cnJvclN0cmluZyosIGludCBpbl90eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yLCBjb25zdCBTdHJp
bmcmIGluX3NvdXJjZUlELCBpbnQgaW5fZGl2b3QsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+JiBvdXRfdHlwZXMpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsVk0oKTsKLSAgICBTdHJpbmcgdHlwZXModm0uZ2V0VHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KGluX2Rpdm90LCBpbl92YXJpYWJsZU5hbWUsIGluX2lkKSk7Ci0gICAgKm91dF90eXBl
cyA9IHR5cGVzOworICAgIG91dF90eXBlcyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7CisgICAgb3V0X3R5cGVzLT5zZXREaXNwbGF5
VHlwZU5hbWUoIiIpOworICAgIG91dF90eXBlcy0+c2V0TGVhc3RVcHBlckJvdW5kKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpKTsKKyAgICBvdXRfdHlwZXMt
PnNldEdsb2JhbFR5cGVOYW1lcyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVzLT5zZXRHbG9iYWxTdHJ1Y3R1cmVzKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVzLT5zZXRMb2NhbFR5cGVOYW1lcyhJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVz
LT5zZXRMb2NhbFN0cnVjdHVyZXMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpKTsKKworICAgIGlmICgh
dm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBva2F5OworICAgIGludHB0cl90IHNvdXJjZUlEID0gaW5fc291cmNlSUQudG9J
bnRQdHJTdHJpY3QoJm9rYXkpOworICAgIEFTU0VSVChva2F5KTsKKworICAgIHZtLmhpZ2hGaWRl
bGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1ZXJ5Iik7CisgICAgdm0u
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZv
ckluc3BlY3RvcihzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihpbl90
eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yKSwgaW5fZGl2b3QsIHNvdXJjZUlELCBvdXRfdHlwZXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oCShyZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0
aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3Zl
cnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZp
cnR1YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl92YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwg
U3RyaW5nKiBvdXRfdHlwZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1l
VHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fdHlwZUluZm9ybWF0
aW9uRGVzY3JpcHRvciwgY29uc3QgU3RyaW5nJiBpbl9zb3VyY2VJRCwgaW50IGluX2Rpdm90LCBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiYg
b3V0X3R5cGVzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2Ny
aXB0RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIg
PSBzY3JpcHREZWJ1Z1NlcnZlcjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkocmV2aXNpb24gMTcxMDgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24JKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsMjUgQEAKICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInN0YXJ0T2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJTdGFydCBvZmZzZXQgb2YgcmFuZ2UgKGluY2x1c2l2ZSkuIiB9LAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZW5kT2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJFbmQgb2Zmc2V0IG9mIHJhbmdlIChleGNsdXNpdmUpLiIgfQogICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RydWN0dXJlRGVzY3JpcHRp
b24iLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkg
b2Ygc3RyaW5ncywgd2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9iamVjdCBmaWVsZHMuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURlc2NyaXB0aW9u
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQ29udGFpbmVyIGZvciB0eXBlIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gZ2F0aGVy
ZWQuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGlzcGxheVR5cGVOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIldoYXQgdGhlIGluc3BlY3RvciBzaG91bGQgZGlzcGxheSBhcyBh
IHNpbXBsZSB0eXBlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxlYXN0VXBwZXJC
b3VuZCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJMZWFzdCB1cHBlciBib3VuZCBvZiBvYmpl
Y3QgZmllbGRzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2FsU3RydWN0dXJl
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJTdHJ1Y3R1cmVEZXNjcmlw
dGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIGRlc2Ny
aXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBhdCB0aGlzIHRoaXMgaW5zdHJ1Y3Rpb24u
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxUeXBlTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiAidHJ1
ZSIsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgdHlwZXMgc2Vl
biBhdCBpbnN0cnVjdGlvbi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxT
dHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVy
ZURlc2NyaXB0aW9uIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkg
b2YgZGVzY3JpcHRpb25zIGZvciBhbGwgc3RydWN0dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxl
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFR5cGVOYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgdHlwZXMgc2Vl
biBhdCBnbG9iYWxseS4iIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAg
ImNvbW1hbmRzIjogWwpAQCAtMjAwLDEyICsyMTksMTIgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAiZ2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0IiwKICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFyaWFibGVO
YW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlZhcmlhYmxlIHdlIHdhbnQg
dHlwZSBpbmZyb21hdGlvbiBmb3IuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiV2hhdCBraW5kIG9mIHR5cGUgaW5mb3JtYXRpb24gZG8gd2Ugd2FudCAobm9ybWFsLCBmdW5j
dGlvbiByZXR1cm4gdmFsdWVzLCAndGhpcycgc3RhdGVtZW50KS4iIH0sCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNjcmlwdCIgfSwKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3NpZ25tZW50IHJhbmdlIiB9CiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
eXBlcyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJUeXBlcyBmb3IgcmVxdWVz
dGVkIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAiJHJl
ZiI6ICJUeXBlRGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVlc3Rl
ZCB2YXJpYWJsZS4iIH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiUmV0dXJucyBkZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKQEAgLTEwMyw2ICsxMDQsOCBAQCBTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKFN0cnVjCiAgICAgLCBtX2xhc3RMaW5lKC0xKQogICAgICwgbV9zdGFydENvbHVt
bihVSU5UX01BWCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoVUlOVF9NQVgpCisgICAgLCBtX2hpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoVUlOVF9NQVgpCiB7CiB9CiAKQEAgLTM3OSw2ICsz
ODIsMTAgQEAgY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZgogUHJvZ3Jh
bUV4ZWN1dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dy
YW1FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNlKQog
eworICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gMDsKKyAgICBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBzb3VyY2UubGVuZ3RoKCkgLSAx
OworICAgIGlmIChleGVjLT52bSgpLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
CisgICAgICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIG1faGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZ0VuZE9mZnNldCk7CiB9CiAKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtNDAyLDYgKzQwOSw4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVu
Y3Rpb25FeGVjdXRhYmxlKFYKICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKICAg
ICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1
bW47CisgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB1bmxpbmtl
ZEV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAg
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJs
ZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01MDAsNiArNTA5LDEwIEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rp
b25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kLmdldCgpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2
bSwgbV9zb3VyY2UsIGxpbmVObygpKSwgc2NvcGUpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmFk
ZEZ1bmN0aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIHZhbHVl
KTsKKyAgICAgICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisg
ICAgICAgICAgICB2bS5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShzb3VyY2VJRCgpLCAKKyAgICAgICAg
ICAgICAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCksIAorICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgIH0KIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw4IEBAIHB1YmxpYzoKICAgICBp
bnQgbGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lOyB9CiAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgdW5zaWdu
ZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KKyAgICB1bnNpZ25l
ZCBoaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KIAogICAgIGJvb2wgdXNlc0V2YWwoKSBj
b25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KICAgICBib29sIHVzZXNB
cmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsg
fQpAQCAtNDM1LDYgKzQzNyw4IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9sYXN0TGluZTsKICAg
ICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOwogICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworICAg
IHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKIH07CiAKIGNsYXNz
IEV2YWxFeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShyZXZp
c2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxp
dHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywzOSArNTMsMTkgQEAgSGlnaEZpZGVsaXR5
TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9CiAK
LXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5bmNo
cm9ub3VzbHksIFN0cmluZyByZWFzb24pCit2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hp
Z2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KICAgICBpZiAoIW1fY3Vy
cmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAotICAgIEJ5dGVTcGlu
TG9ja2VyKiBsb2NrZXIgPSBuZXcgQnl0ZVNwaW5Mb2NrZXIobV9sb2NrKTsKLSAgICBUaHJlYWRE
YXRhKiBkYXRhID0gbmV3IFRocmVhZERhdGE7Ci0gICAgZGF0YS0+bV9wcm9jY2Vzc0xvZ1RvT2Zm
c2V0ID0gbV9jdXJyZW50T2Zmc2V0OwotICAgIGRhdGEtPm1fcHJvY2Vzc0xvZ1B0ciA9IG1fbG9n
U3RhcnRQdHI7Ci0gICAgZGF0YS0+bV9sb2NrZXIgPSBsb2NrZXI7Ci0KLSAgICBtX2N1cnJlbnRP
ZmZzZXQgPSAwOwotICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25leHRCdWZmZXIpOwot
ICAgIAotICAgIGlmIChhc3luY2hyb25vdXNseSkKLSAgICAgICAgY3JlYXRlVGhyZWFkKGFjdHVh
bGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hpZ2hGaWRlbGl0eUxv
ZyIpOwotICAgIGVsc2UgCi0gICAgICAgIGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9u
KGRhdGEpOwotfQotCi12b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9nVGhy
ZWFkRnVuY3Rpb24odm9pZCogYXJnKQotewogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50VGlt
ZU1TKCk7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEqPihh
cmcpOwotICAgIExvZ0VudHJ5KiBlbnRyeSA9IGRhdGEtPm1fcHJvY2Vzc0xvZ1B0cjsKKyAgICBM
b2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJlSUQs
IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IHByb2Nlc3NM
b2dUb09mZnNldCA9IGRhdGEtPm1fcHJvY2Nlc3NMb2dUb09mZnNldDsgCiAgICAgc2l6ZV90IGkg
PSAwOwotICAgIHdoaWxlIChpIDwgcHJvY2Vzc0xvZ1RvT2Zmc2V0KSB7CisgICAgd2hpbGUgKGkg
PCBtX2N1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+c3Ry
dWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAogICAgICAg
ICBpZiAoaWQpIHsKQEAgLTEwNSwxMSArODUsMTIgQEAgdm9pZCBIaWdoRmlkZWxpdHlMb2c6OmFj
dHVhbGx5UHJvY2Vzc0xvZwogICAgICAgICBpKys7CiAgICAgfQogCi0gICAgZGVsZXRlIGRhdGEt
Pm1fbG9ja2VyOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRU
aW1lTVMoKTsKLSAgICBpZiAodmVyYm9zZSkKKyAgICBtX2N1cnJlbnRPZmZzZXQgPSAwOworCisg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygp
OwogICAgICAgICBkYXRhTG9nRigiIFByb2Nlc3NpbmcgdGhlIGxvZyB0b29rOiAnJWYnIG1zXG4i
LCBhZnRlciAtIGJlZm9yZSk7CisgICAgfQogfQogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJl
dmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTMgQEAgcHVibGljOgogICAg
IAogICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsKICAgICAgICAgaWYgKG1fY3VycmVudE9m
ZnNldCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCi0gICAgICAgICAgICBwcm9jZXNzSGlnaEZp
ZGVsaXR5TG9nKHRydWUsICJMb2cgRnVsbCIpOworICAgICAgICAgICAgcHJvY2Vzc0hpZ2hGaWRl
bGl0eUxvZygiTG9nIEZ1bGwiKTsKICAgICB9CiAKLSAgICB2b2lkIHByb2Nlc3NIaWdoRmlkZWxp
dHlMb2coYm9vbCBhc3luY2hyb25vdXNseSA9IGZhbHNlLCBTdHJpbmcgPSAiIik7CisgICAgdm9p
ZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBp
bml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKCk7Ci0gICAgc3RhdGljIHZvaWQgYWN0dWFsbHlQcm9j
ZXNzTG9nVGhyZWFkRnVuY3Rpb24odm9pZCopOwogCiAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxp
dHlMb2dTaXplOwogICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcz
ICsyNiwxNTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIuaCIKIAorI2luY2x1ZGUgIkluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiCiAj
aW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLVN0cmluZyBIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6OmdldFR5cGVzRm9yVmFyaWFibGVJbkF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBT
dHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRyX3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2Nh
dGlvbikKIHsKLSAgICBTdHJpbmcgZ2xvYmFsID0gZ2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKLSAgICBpZiAoIWdsb2JhbC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWw7Ci0gICAgCi0gICAgcmV0dXJuIGdldExv
Y2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlE
KTsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBsb2NhdGlv
bi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/IFR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvclRoaXNTdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CisKKyAgICBk
YXRhTG9nRigiW1N0YXJ0LCBFbmRdOjpbJXUsICV1XVxuIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFy
dCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOworCisgICAgaWYgKGZpbmRMb2NhdGlvbihsb2NhdGlv
bi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9zb3VyY2VJRCwgZGVzY3JpcHRvcikpCisgICAg
ICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMgaW4gU3lzdGVtXVxuIik7CisgICAgZWxzZQorICAg
ICAgICBkYXRhTG9nKCJcdFx0W0VudHJ5IElTIE5PVCBpbiBzeXN0ZW1dXG4iKTsKKworICAgIGRh
dGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0
eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxW
YXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAiW1RoaXMgU3RhdGVtZW50
XSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKKworICAgIGRhdGFMb2coIlx0XHQjTG9jYWwj
XG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKS5yZXBs
YWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CisgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5
cGVTZXQpCisgICAgICAgIGRhdGFMb2coIlx0XHQjR2xvYmFsI1xuXHRcdCIsIGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4i
KTsKIH0KIAotU3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFsVHlwZXNG
b3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmICwgaW50cHRy
X3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6aW5zZXJ0TmV3TG9j
YXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCk7Ci0gICAgaWYgKCFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuICAiIjsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0Yo
IlJlZ2lzdGVyaW5nIGxvY2F0aW9uOjogZGl2b3RTdGFydDoldSwgZGl2b3RFbmQ6JXVcbiIsIGxv
Y2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKIAotICAgIGlmIChs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlz
dHMpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBpZiAoIW1fYnVja2V0TWFwLmNvbnRhaW5zKGxv
Y2F0aW9uLT5tX3NvdXJjZUlEKSkgeworICAgICAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4gYnVj
a2V0OworICAgICAgICBtX2J1Y2tldE1hcC5zZXQobG9jYXRpb24tPm1fc291cmNlSUQsIGJ1Y2tl
dCk7CisgICAgfQogCi0gICAgcmV0dXJuIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPnNlZW5U
eXBlcygpOworICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAu
ZmluZChsb2NhdGlvbi0+bV9zb3VyY2VJRCktPnZhbHVlOworICAgIGJ1Y2tldC5hcHBlbmQobG9j
YXRpb24pOwogfQogCi1TdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiAsIGlu
dHB0cl90IHNvdXJjZUlEKQordm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yIGRlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mIHJldCkK
IHsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3Vy
Y2VJRCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwg
c291cmNlSUQsIGRlc2NyaXB0b3IpOwogICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVy
biAgIiI7CisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBsb2NhdGlvbi0+bV9pbnN0cnVj
dGlvblR5cGVTZXQtPnNlZW5UeXBlcygpOworICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBl
U2V0ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5Tm9HbG9i
YWxJREV4aXN0cykgeworICAgICAgICByZXQtPnNldERpc3BsYXlUeXBlTmFtZShsb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgcmV0LT5zZXRMZWFzdFVw
cGVyQm91bmQobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+bGVhc3RVcHBlckJvdW5kKCkpOwor
ICAgICAgICByZXQtPnNldEdsb2JhbFR5cGVOYW1lcyhsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0
LT5hbGxUeXBlTmFtZXMoKSk7CisgICAgICAgIHJldC0+c2V0R2xvYmFsU3RydWN0dXJlcyhsb2Nh
dGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0LT5zZXREaXNwbGF5VHlwZU5hbWUobG9jYXRpb24tPm1f
aW5zdHJ1Y3Rpb25UeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgcmV0LT5zZXRMZWFz
dFVwcGVyQm91bmQobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5sZWFzdFVwcGVyQm91
bmQoKSk7CisgICAgfQorCisgICAgcmV0LT5zZXRMb2NhbFR5cGVOYW1lcyhsb2NhdGlvbi0+bV9p
bnN0cnVjdGlvblR5cGVTZXQtPmFsbFR5cGVOYW1lcygpKTsKKyAgICByZXQtPnNldExvY2FsU3Ry
dWN0dXJlcyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFsbFN0cnVjdHVyZVJlcHJl
c2VudGF0aW9ucygpKTsKIH0KIAotdm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6Omluc2Vy
dE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCitzdGF0aWMgYm9vbCBkZXNjcmlw
dG9yTWF0Y2hlc1R5cGVMb2NhdGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiB7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2dGKCJSZWdpc3RlcmluZyBsb2NhdGlvbjo6IGRpdm90U3RhcnQ6JXUsIGRpdm90
RW5kOiV1XG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7
CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0
aW9uUmV0dXJuICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5
UmV0dXJuU3RhdGVtZW50KSAgCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2J1
Y2tldE1hcC5jb250YWlucyhsb2NhdGlvbi0+bV9zb3VyY2VJRCkpIHsKLSAgICAgICAgVmVjdG9y
PFR5cGVMb2NhdGlvbio+IGJ1Y2tldDsKLSAgICAgICAgbV9idWNrZXRNYXAuc2V0KGxvY2F0aW9u
LT5tX3NvdXJjZUlELCBidWNrZXQpOwotICAgIH0KKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0
TWFwLmZpbmQobG9jYXRpb24tPm1fc291cmNlSUQpLT52YWx1ZTsKLSAgICBidWNrZXQuYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVs
aXR5UmV0dXJuU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGln
aEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVHlwZUxvY2F0aW9uKiBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6
OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQpCitUeXBlTG9j
YXRpb24qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRp
dm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNj
cmlwdG9yKQogeworICAgIGlmICghbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaGFzRXhlY3V0
ZWRBdE9mZnNldChzb3VyY2VJRCwgZGl2b3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwog
ICAgIEFTU0VSVChtX2J1Y2tldE1hcC5jb250YWlucyhzb3VyY2VJRCkpOyAKIAogICAgIFZlY3Rv
cjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAuZmluZChzb3VyY2VJRCktPnZh
bHVlOwotICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7IC8vIEJlY2F1c2UgYXNzaWdu
bWVudHMgbWF5IGJlIG5lc3RlZCwgbWFrZSBzdXJlIHdlIGZpbmQgdGhlIGNsb3Nlc3QgZW5jbG9z
aW5nIGFzc2lnbm1lbnQgdG8gdGhpcyBjaGFyYWN0ZXIgb2Zmc2V0LgogICAgIFR5cGVMb2NhdGlv
biogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IFVJTlRfTUFY
OyAvLyBCZWNhdXNlIGFzc2lnbm1lbnRzIG1heSBiZSBuZXN0ZWQsIG1ha2Ugc3VyZSB3ZSBmaW5k
IHRoZSBjbG9zZXN0IGVuY2xvc2luZyBhc3NpZ25tZW50IHRvIHRoaXMgY2hhcmFjdGVyIG9mZnNl
dC4KICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1Y2tldC5zaXplKCk7IGkgPCBzaXpl
OyBpKyspIHsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGJ1Y2tldC5hdChpKTsK
LSAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPD0gZGl2b3QgJiYgZGl2b3QgPD0g
bG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24tPm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+
bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yID09IFR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiAmJiBsb2NhdGlvbi0+bV9k
aXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPT0gZGl2b3QpCisgICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb247CisKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3Rh
cnQgPD0gZGl2b3QgJiYgZGl2b3QgPD0gbG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24t
Pm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlICYmIGRlc2Ny
aXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKGRlc2NyaXB0b3IsIGxvY2F0aW9uKSkgewogICAgICAg
ICAgICAgZGlzdGFuY2UgPSBsb2NhdGlvbi0+bV9kaXZvdEVuZCAtIGxvY2F0aW9uLT5tX2Rpdm90
U3RhcnQ7CiAgICAgICAgICAgICBiZXN0TWF0Y2ggPSBsb2NhdGlvbjsKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBCZXN0TWF0Y2ggc2hvdWxkIG5ldmVyIGJlIG51bGwuIFRoaXMg
ZG9lc24ndCBob2xkIGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSBzb21lIEV2YWwvV2l0aC9W
YXJJbmplY3Rpb24gdmFyaWFibGUgYXNzaWdubWVudHMuCisgICAgLy8gRklYTUU6IEJlc3RNYXRj
aCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBwYXN0IHRoaXMgcG9pbnQuIFRoaXMgZG9lc24ndCBob2xk
IGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSBzb21lIEV2YWwvV2l0aC9WYXJJbmplY3Rpb24g
dmFyaWFibGUgYXNzaWdubWVudHMuCiAgICAgcmV0dXJuIGJlc3RNYXRjaDsKIH0KIAorYm9vbCBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQs
IHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3Jh
bmdlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSYW5nZU1hcCYgbWFw
ID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0g
VUlOVF9NQVg7CisgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGZhbHNlOworICAgIGZvciAoYXV0byBp
dGVyID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5nZSA9IGl0ZXItPmZpcnN0OworICAg
ICAgICBpZiAocmFuZ2UubV9zdGFydCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDw9IHJhbmdlLm1fZW5k
ICYmIHJhbmdlLm1fZW5kIC0gcmFuZ2UubV9zdGFydCA8IGRpc3RhbmNlKSB7CisgICAgICAgICAg
ICBoYXNFeGVjdXRlZCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gcmFu
Z2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGhhc0V4ZWN1dGVkOworfQorCit2b2lkIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6aW5zZXJ0
VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
KSAKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3JhbmdlTWFwLmVuZCgpKSB7
CisgICAgICAgIFJhbmdlTWFwIG1hcDsKKyAgICAgICAgbV9yYW5nZU1hcFtpZF0gPSBtYXA7Cisg
ICAgfQorCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsK
KyAgICBGdW5jdGlvblJhbmdlIHJhbmdlOworICAgIHJhbmdlLm1fc3RhcnQgPSBzdGFydDsKKyAg
ICByYW5nZS5tX2VuZCA9IGVuZDsKKyAgICAvLyBPbmx5IGluc2VydCB1bmV4ZWN1dGVkIHJhbmdl
cyBvbmNlIGZvciBhIGdpdmVuIHNvdXJjZUlEIGJlY2F1c2Ugd2UgbWF5IHJ1biBpbnRvIGEgc2l0
dWF0aW9uIHdoZXJlIGFuIGV4ZWN1dGFibGUgZXhlY3V0ZXMsIHRoZW4gaXMgR0NlZCwgYW5kIHRo
ZW4gaXMgYWxsb2NhdGVkIGFnYWluLAorICAgIC8vIGFuZCB0cmllcyB0byByZWluc2VydCBpdHNl
bGYsIGNsYWltaW5nIGl0IGhhcyBuZXZlciBydW4sIGJ1dCB0aGlzIGlzIGZhbHNlIGJlY2F1c2Ug
aXQgaW5kZWVkIGFscmVhZHkgZXhlY3V0ZWQuCisgICAgaWYgKG1hcC5maW5kKHJhbmdlKSA9PSBt
YXAuZW5kKCkpCisgICAgICAgIG1hcFtyYW5nZV0gPSBmYWxzZTsKK30KKwordm9pZCBGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShpbnRwdHJfdCBpZCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICAvL1JFTEVBU0VfQVNTRVJUKG1fcmFu
Z2VNYXAuY29udGFpbnMoaWQpKTsKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3Jh
bmdlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBSYW5nZU1hcCYgbWFwID0gbV9y
YW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOworCisgICAgRnVuY3Rpb25SYW5nZSByYW5nZTsKKyAg
ICByYW5nZS5tX3N0YXJ0ID0gc3RhcnQ7CisgICAgcmFuZ2UubV9lbmQgPSBlbmQ7CisgICAgbWFw
W3JhbmdlXSA9IHRydWU7Cit9CisKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuaAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDI1ICszMyw2
MyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAorbmFtZXNwYWNlIEluc3BlY3RvciB7IG5hbWVzcGFjZSBUeXBlQnVpbGRlciAgeyBu
YW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBUeXBlRGVzY3JpcHRpb247Cit9fX0KKwogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbjsKIAorY2xhc3MgRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgRnVuY3Rpb25SYW5nZSB7CisgICAgICAg
IEZ1bmN0aW9uUmFuZ2UoKSB7fQorICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0OworICAgICAgICB1
bnNpZ25lZCBtX2VuZDsKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZ1bmN0aW9uUmFu
Z2UmIG90aGVyKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQg
PT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICAgICAgfQorICAg
ICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fc3RhcnQgKiBtX2VuZDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBib29sIGhhc0V4ZWN1
dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCBpbnNl
cnRVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQpOworICAgIHZvaWQgcmVtb3ZlVW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKworcHJpdmF0ZTogICAgIAorICAgIHR5cGVkZWYgc3Rk
Ojp1bm9yZGVyZWRfbWFwPEZ1bmN0aW9uUmFuZ2UsIGJvb2wsIEhhc2hNZXRob2Q8RnVuY3Rpb25S
YW5nZT4+IFJhbmdlTWFwOworICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPGludHB0cl90
LCBSYW5nZU1hcD4gU291cmNlSURUb1JhbmdlTWFwOworICAgIFNvdXJjZUlEVG9SYW5nZU1hcCBt
X3JhbmdlTWFwOworfTsKKworZW51bSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIHsKKyAg
ICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsID0gMSwKKyAgICBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCA9IDIsCisgICAgVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuID0gMworfTsKKwogY2xhc3MgSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyIHsKIAogcHVibGljOgotICAgIFN0cmluZyBnZXRUeXBlc0ZvclZhcmlhYmxl
SW5BdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGlu
dHB0cl90IHNvdXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRy
X3Qgc291cmNlSUQpOwotICAgIFN0cmluZyBnZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGludHB0cl90IHNv
dXJjZUlEKTsKKyAgICB2b2lkIGxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKFR5cGVMb2NhdGlvbiop
OworICAgIHZvaWQgZ2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVjdG9yKFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgZGl2b3QsIGludHB0
cl90IHNvdXJjZUlELCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlw
ZURlc2NyaXB0aW9uPiYpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9u
Kik7CisgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KICAgICAKIHByaXZh
dGU6Ci0gICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0
cl90IHNvdXJjZUlEKTsKKyAgICBUeXBlTG9jYXRpb24qIGZpbmRMb2NhdGlvbih1bnNpZ25lZCBk
aXZvdCwgaW50cHRyX3Qgc291cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVz
Y3JpcHRvcik7CiAKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFZlY3RvcjxUeXBlTG9j
YXRpb24qPj4gU291cmNlSURUb0xvY2F0aW9uQnVja2V0TWFwOwogICAgIFNvdXJjZUlEVG9Mb2Nh
dGlvbkJ1Y2tldE1hcCBtX2J1Y2tldE1hcDsKKyAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUg
bV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CiB9OwogCisKIH0gLy9uYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNzUsNiArMTA3NSwzNiBAQCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1
cmU6OnRvCiAKICAgICAgICAgc2hhcGUtPmFkZFByb3BlcnR5KHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgZm91bmRDdG9yTmFtZSA9IGZh
bHNlOworICAgIEpTT2JqZWN0KiBwcm90byA9IHN0b3JlZFByb3RvdHlwZU9iamVjdCgpOworICAg
IGlmIChwcm90bykgeworICAgICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBwcm90by0+Z2xvYmFsT2Jq
ZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgUHJvcGVydHlTbG90IHNsb3Qoc3RvcmVkUHJv
dG90eXBlKCkpOworICAgICAgICBQcm9wZXJ0eU5hbWUgY29uc3RydWN0b3IoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yKTsKKyAgICAgICAgaWYgKHByb3RvLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgY29uc3RydWN0b3IsIHNsb3QpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV2hh
dCBpcyBhIGN1c3RvbSBwcm9wZXJ0eSBzbG90PworICAgICAgICAgICAgaWYgKHNsb3QuaXNWYWx1
ZSgpKSB7CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBjb25zdHJ1Y3RvclZhbHVlID0gc2xvdC5n
ZXRWYWx1ZShleGVjLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVj
dG9yVmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpTQ2VsbCogY29u
c3RydWN0b3JDZWxsID0gY29uc3RydWN0b3JWYWx1ZS5hc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEpTT2JqZWN0KiBjdG9yT2JqZWN0ID0gY29uc3RydWN0b3JDZWxsLT5n
ZXRPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU0Z1bmN0aW9u
KiBjb25zdHJ1Y3RvckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4oY3Rvck9i
amVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUtPnNldENvbnN0
cnVjdG9yTmFtZShjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoZXhl
YykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEN0b3JOYW1lID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEludGVybmFsRnVuY3Rp
b24qIGNvbnN0cnVjdG9yRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24q
PihjdG9yT2JqZWN0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS0+
c2V0Q29uc3RydWN0b3JOYW1lKGNvbnN0cnVjdG9yRnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5
TmFtZShleGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kQ3Rvck5h
bWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZm91bmRDdG9yTmFtZSkK
KyAgICAgICAgc2hhcGUtPnNldENvbnN0cnVjdG9yTmFtZShjbGFzc0luZm8oKS0+Y2xhc3NOYW1l
KTsKIAogICAgIHNoYXBlLT5tYXJrQXNGaW5hbCgpOwogICAgIHJldHVybiBzaGFwZS5yZWxlYXNl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2
aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUeXBlU2V0LmgiCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JKU1R5cGVCdWlsZGVy
cy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU4LDggKzU5LDYgQEAgUnVu
dGltZVR5cGUgVHlwZVNldDo6Z2V0UnVudGltZVR5cGVGb3JWYQogICAgICAgICByZXQgPSBUeXBl
TnVtYmVyOwogICAgIGVsc2UgaWYgKHYuaXNTdHJpbmcoKSkKICAgICAgICAgcmV0ID0gVHlwZVN0
cmluZzsKLSAgICBlbHNlIGlmICh2LmlzUHJpbWl0aXZlKCkpCi0gICAgICAgIHJldCA9IFR5cGVQ
cmltaXRpdmU7CiAgICAgZWxzZSBpZiAodi5pc09iamVjdCgpKQogICAgICAgICByZXQgPSBUeXBl
T2JqZWN0OwogICAgIGVsc2UKQEAgLTczLDcgKzcyLDcgQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBl
Rm9yVmFsdWUoSlNWYWx1ZSB2LAogICAgIFJ1bnRpbWVUeXBlIHQgPSBnZXRSdW50aW1lVHlwZUZv
clZhbHVlKHYpOwogICAgIG1fc2VlblR5cGVzID0gbV9zZWVuVHlwZXMgfCB0OwogCi0gICAgaWYg
KGlkICYmIHNoYXBlKSB7CisgICAgaWYgKGlkICYmIHNoYXBlICYmICF2LmlzU3RyaW5nKCkgJiYg
IXYuaXNGdW5jdGlvbigpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9yeS5p
c1ZhbGlkS2V5KGlkKSk7CiAgICAgICAgIGF1dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0b3J5
LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRlciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5lbmQo
KSkgewpAQCAtOTUsNyArOTQsNyBAQCB2b2lkIFR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZShKU1Zh
bHVlIHYsCiAgICAgfQogfQogCi1TdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgCitTdHJpbmcg
VHlwZVNldDo6c2VlblR5cGVzKCkgY29uc3QKIHsKICAgICBpZiAobV9zZWVuVHlwZXMgPT0gVHlw
ZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiAiKFVucmVhY2hlZCBTdGF0ZW1lbnQpIjsKQEAgLTEx
Niw4ICsxMTUsNiBAQCBTdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgCiAgICAgICAgICBzZWVu
LmFwcGVuZCgiTnVtYmVyICIpOwogICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVTdHJpbmcpCiAg
ICAgICAgICBzZWVuLmFwcGVuZCgiU3RyaW5nICIpOwotICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5
cGVQcmltaXRpdmUpCi0gICAgICAgICBzZWVuLmFwcGVuZCgiUHJpbWl0aXZlICIpOwogICAgIGlm
IChtX3NlZW5UeXBlcyAmIFR5cGVPYmplY3QpCiAgICAgICAgICBzZWVuLmFwcGVuZCgiT2JqZWN0
ICIpOwogCkBAIC0xNDAsMTIgKzEzNywxMjggQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygp
IAogCiAgICAgaWYgKG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpKSB7CiAgICAgICAgIHNlZW4u
YXBwZW5kKCJcbkxVQjogIik7Ci0gICAgICAgIHNlZW4uYXBwZW5kKFN0cnVjdHVyZVNoYXBlOjps
ZWFzdFVwcGVyQm91bmQobV9zdHJ1Y3R1cmVIaXN0b3J5KSk7CisgICAgICAgIHNlZW4uYXBwZW5k
KFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmRBc1N0cmluZyhtX3N0cnVjdHVyZUhpc3Rv
cnkpKTsKICAgICB9CiAKICAgICByZXR1cm4gc2Vlbi50b1N0cmluZygpOwogfQogCitib29sIFR5
cGVTZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0Cit7CisgICAgLy8g
VGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgb3VyIHNlZW4gdHlwZXMgY29uZm9ybXMgdG8gdGhlIHR5
cGVzIGRlc2NyaWJlZCBieSB0aGUgdGVzdCBiaXRzdHJpbmcuIAorICAgIC8vIFdlIGFyZSA8PSB0
byB0aG9zZSB0eXBlcyBpZiBBTkRpbmcgd2l0aCB0aGUgYml0c3RyaW5nIGRvZXNuJ3QgemVybyBv
dXQgYW55IG9mIG91ciBiaXRzLgorCisgICAgLy8gRm9yIGV4YW1wbGU6CisgICAgLy8gMGIwMTEw
IChzZWVuKQorICAgIC8vIDBiMTExMSAodGVzdCkKKyAgICAvLyAtLS0tLS0gKEFORCkKKyAgICAv
LyAwYjAxMTAgPT0gc2VlbgorCisgICAgLy8gMGIwMTEwIChzZWVuKQorICAgIC8vIDBiMDAxMCAo
dGVzdCkKKyAgICAvLyAtLS0tLS0gKEFORCkKKyAgICAvLyAwYjAwMTAgIT0gc2VlbgorCisgICAg
cmV0dXJuIChtX3NlZW5UeXBlcyAmIHRlc3QpID09IG1fc2VlblR5cGVzOworfQorCitTdHJpbmcg
VHlwZVNldDo6ZGlzcGxheU5hbWUoKSBjb25zdAoreworICAgIGlmIChtX3NlZW5UeXBlcyA9PSBU
eXBlTm90aGluZykKKyAgICAgICAgcmV0dXJuICIiOworCisgICAgaWYgKG1fc3RydWN0dXJlSGlz
dG9yeS0+c2l6ZSgpKSB7CisgICAgICAgIFZlY3RvcjxTdHJpbmc+IGN0b3JOYW1lczsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsr
KSB7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlID0gbV9zdHJ1Y3R1
cmVIaXN0b3J5LT5hdChpKTsKKyAgICAgICAgICAgIGlmICghc2hhcGUtPm1fY29uc3RydWN0b3JO
YW1lLmlzRW1wdHkoKSAmJiAhY3Rvck5hbWVzLmNvbnRhaW5zKHNoYXBlLT5tX2NvbnN0cnVjdG9y
TmFtZSkpIHsKKyAgICAgICAgICAgICAgICBjdG9yTmFtZXMuYXBwZW5kKHNoYXBlLT5tX2NvbnN0
cnVjdG9yTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKGN0b3JOYW1lcy5zaXplKCkgPiAxKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjdG9yTmFtZXMuc2l6ZSgpID09IDEgJiYgZG9lc1R5cGVDb25mb3JtVG8oVHlw
ZU9iamVjdCkpCisgICAgICAgICAgICByZXR1cm4gY3Rvck5hbWVzLmF0KDApOworICAgICAgICBl
bHNlIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0IHwgVHlwZUZ1bmN0aW9uIHwgVHlw
ZVN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gIk9iamVjdCI7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiAiKG1hbnkpIjsKKyAgICB9CisKKyAgICBpZiAoZG9lc1R5cGVDb25m
b3JtVG8oVHlwZUZ1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuICJGdW5jdGlvbiI7CisgICAgaWYg
KGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIlVuZGVm
aW5lZCI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdWxsKSkKKyAgICAgICAgcmV0
dXJuICJOdWxsIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUJvb2xlYW4pKQorICAg
ICAgICByZXR1cm4gIkJvb2wiOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTWFjaGlu
ZUludCkpCisgICAgICAgIHJldHVybiAiSW50IjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8o
VHlwZU51bWJlciB8IFR5cGVNYWNoaW5lSW50KSkKKyAgICAgICAgcmV0dXJuICJOdW1iZXIiOwor
ICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICJT
dHJpbmciOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVsbCB8IFR5cGVVbmRlZmlu
ZWQpKQorICAgICAgICByZXR1cm4gIihFbXB0eSkiOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1U
byhUeXBlT2JqZWN0IHwgVHlwZUZ1bmN0aW9uIHwgVHlwZVN0cmluZykpCisgICAgICAgIHJldHVy
biAiT2JqZWN0IjsKKworICAgIHJldHVybiAiKG1hbnkpIjsKK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBUeXBlU2V0OjphbGxUeXBlTmFtZXMo
KSBjb25zdAoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJp
bmc+PiBzZWVuID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRl
KCk7CisKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlRnVuY3Rpb24pCisgICAgICAgICBzZWVu
LT5hZGRJdGVtKCJGdW5jdGlvbiIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmlu
ZWQpCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJVbmRlZmluZWQiKTsKKyAgICBpZiAobV9zZWVu
VHlwZXMgJiBUeXBlTnVsbCkKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIk51bGwiKTsKKyAgICBp
ZiAobV9zZWVuVHlwZXMgJiBUeXBlQm9vbGVhbikKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkJv
b2wiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTWFjaGluZUludCkKKyAgICAgICAgIHNl
ZW4tPmFkZEl0ZW0oIkludCIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdW1iZXIpCisg
ICAgICAgICBzZWVuLT5hZGRJdGVtKCJOdW1iZXIiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBU
eXBlU3RyaW5nKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiU3RyaW5nIik7CisKKyAgICBib29s
IGhhc0FwcGVuZWRlZE9uZUNvbnN0cnVjdG9yID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsrKSB7CisgICAgICAgIFJlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUgPSBtX3N0cnVjdHVyZUhpc3RvcnktPmF0KGkpOworICAg
ICAgICBpZiAoIXNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgIGlmIChzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUgIT0gIkZ1bmN0aW9uIikKKyAgICAgICAg
ICAgICAgICBzZWVuLT5hZGRJdGVtKHNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgICAg
ICAgICBoYXNBcHBlbmVkZWRPbmVDb25zdHJ1Y3RvciA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIWhhc0FwcGVuZWRlZE9uZUNvbnN0cnVjdG9yICYmIG1fc2VlblR5cGVzICYg
VHlwZU9iamVjdCkKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIk9iamVjdCIpOworCisgICAgcmV0
dXJuIHNlZW4ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+PiBUeXBlU2V0
OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+Pj4gcmV0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOworCisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsrKQorICAgICAgICByZXQt
PmFkZEl0ZW0obV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKS0+aW5zcGVjdG9yUmVwcmVzZW50YXRp
b24oKSk7CisKKyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKK30KKworCitQYXNzUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5cGVTZXQ6OmxlYXN0VXBwZXJC
b3VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91
bmQobV9zdHJ1Y3R1cmVIaXN0b3J5KTsKK30KKwogdm9pZCBUeXBlU2V0OjpkdW1wU2VlblR5cGVz
KCkKIHsKICAgICBkYXRhTG9nKHNlZW5UeXBlcygpLCAiXG4iKTsKQEAgLTE4Nyw3ICszMDAsMzEg
QEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAKICAgICByZXR1cm4gKm1f
cHJvcGVydHlIYXNoOwogfQogCi1TdHJpbmcgU3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3Vu
ZChWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIHNoYXBlcykKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gU3RydWN0dXJlU2hhcGU6OmxlYXN0
VXBwZXJCb3VuZChjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIHNoYXBlcykK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gbHVi
ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisKKyAg
ICBpZiAoIXNoYXBlcy0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gbHViLnJlbGVhc2UoKTsKKwor
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gb3JpZ2luID0gc2hhcGVzLT5hdCgwKTsKKyAgICBm
b3IgKGF1dG8gaXRlciA9IG9yaWdpbi0+bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gb3JpZ2luLT5t
X2ZpZWxkcy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBib29sIHNob3Vs
ZEFkZCA9IHRydWU7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxLCBzaXplID0gc2hhcGVzLT5z
aXplKCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIC8vIElmIGFsbCBvdGhlciBTaGFw
ZXMgaGF2ZSB0aGUgc2FtZSBmaWVsZCBhcyBvcmlnaW4sIGFkZCBpdCB0byB0aGUgbGVhc3QgdXBw
ZXIgYm91bmQuCisgICAgICAgICAgICBpZiAoIXNoYXBlcy0+YXQoaSktPm1fZmllbGRzLmNvbnRh
aW5zKGl0ZXItPmtleSkpIHsKKyAgICAgICAgICAgICAgICBzaG91bGRBZGQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBp
ZiAoc2hvdWxkQWRkKQorICAgICAgICAgICAgbHViLT5hZGRJdGVtKFN0cmluZyhpdGVyLT5rZXku
Z2V0KCkpKTsgCisgICAgfQorCisgICAgcmV0dXJuIGx1Yi5yZWxlYXNlKCk7Cit9CisKK1N0cmlu
ZyBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmcoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBzaGFwZXMpCiB7CiAgICAgaWYgKCFzaGFwZXMtPnNpemUo
KSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMjM0LDQgKzM3MSwxMyBAQCBTdHJpbmcgU3RydWN0
dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0CiAgICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uLnRv
U3RyaW5nKCk7CiB9CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
U3RyaW5nPj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gcmV0ID0gSW5z
cGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgZm9yIChh
dXRvIGl0ZXIgPSBtX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBtX2ZpZWxkcy5lbmQoKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikKKyAgICAgICAgcmV0LT5hZGRJdGVtKGl0ZXItPmtleS5nZXQoKSk7CisK
KyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKK30KKwogfSAvL25hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgJKHJldmlzaW9uIDE3MTA4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNiArMzIsMTEgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgIHsgCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgQXJyYXk7Cit9fQor
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNWYWx1ZTsKQEAgLTQ1LDggKzUwLDcgQEAgZW51
bSBSdW50aW1lVHlwZSB7CiAgICAgVHlwZU1hY2hpbmVJbnQgICAgICAgICA9IDB4MTAsCiAgICAg
VHlwZU51bWJlciAgICAgICAgICAgICA9IDB4MjAsCiAgICAgVHlwZVN0cmluZyAgICAgICAgICAg
ICA9IDB4NDAsCi0gICAgVHlwZVByaW1pdGl2ZSAgICAgICAgICA9IDB4ODAsCi0gICAgVHlwZU9i
amVjdCAgICAgICAgICAgICA9IDB4MTAwCisgICAgVHlwZU9iamVjdCAgICAgICAgICAgICA9IDB4
ODAKIH07CiAKIGNsYXNzIFN0cnVjdHVyZVNoYXBlIDogcHVibGljIFJlZkNvdW50ZWQ8U3RydWN0
dXJlU2hhcGU+IHsKQEAgLTU5LDEyICs2MywxNSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHByb3Bl
cnR5SGFzaCgpOwogICAgIHZvaWQgbWFya0FzRmluYWwoKTsKICAgICB2b2lkIGFkZFByb3BlcnR5
KFJlZlB0cjxTdHJpbmdJbXBsPik7Ci0gICAgc3RhdGljIFN0cmluZyBsZWFzdFVwcGVyQm91bmQo
VmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gbGVhc3RVcHBlckJvdW5kKGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiopOworICAgIHN0YXRpYyBTdHJpbmcg
bGVhc3RVcHBlckJvdW5kQXNTdHJpbmcoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4+KiBzaGFwZXMpOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRhdGlvbigpOworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gaW5zcGVjdG9y
UmVwcmVzZW50YXRpb24oKTsKICAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZShTdHJpbmcgbmFt
ZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9IG5hbWU7IH0KKyAgICBTdHJpbmcgY29uc3RydWN0b3JO
YW1lKCkgeyByZXR1cm4gbV9jb25zdHJ1Y3Rvck5hbWU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNo
TWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgYm9vbD4gbV9maWVsZHM7ICAgICAgICAgCisgICAgSGFz
aE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGJvb2w+IG1fZmllbGRzOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxTdHJpbmc+IG1fcHJvcGVydHlIYXNoOwogICAgIFN0cmluZyBtX2NvbnN0cnVjdG9yTmFt
ZTsKICAgICBib29sIG1fZmluYWw7CkBAIC03NywxMSArODQsMTcgQEAgcHVibGljOgogICAgIFR5
cGVTZXQoKTsKICAgICB2b2lkIGFkZFR5cGVGb3JWYWx1ZShKU1ZhbHVlIHYsIFBhc3NSZWZQdHI8
U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdl
dFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3Ry
aW5nIHNlZW5UeXBlcygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMo
KSBjb25zdDsKKyAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGFsbFR5cGVOYW1lcygpIGNv
bnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5n
Pj4gbGVhc3RVcHBlckJvdW5kKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5
cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+Pj4g
YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAgdWlu
dDMyX3QgbV9zZWVuVHlwZXM7CiAgICAgdm9pZCBkdW1wU2VlblR5cGVzKCk7CisgICAgYm9vbCBk
b2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBjb25zdDsKKworICAgIHVpbnQzMl90IG1f
c2VlblR5cGVzOwogICAgIFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiogbV9zdHJ1Y3R1
cmVIaXN0b3J5OwogICAgIEhhc2hNYXA8U3RydWN0dXJlSUQsIHVpbnQ4X3Q+IG1fc3RydWN0dXJl
SURIaXN0b3J5OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJl
dmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTI2LDQzICs5MjYsMTYgQEAgdm9pZCBWTTo6c2V0RW5hYmxlZFBy
b2ZpbGVyKExlZ2FjeVByb2ZpbAogICAgIH0KIH0KIAotU3RyaW5nIFZNOjpnZXRUeXBlc0ZvclZh
cmlhYmxlQXRPZmZzZXQodW5zaWduZWQgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFt
ZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nKQotewotICAgIGlmICghaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgcmV0dXJuICIoTm90IFByb2ZpbGlu
ZykiOwotCi0gICAgYm9vbCBva2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURB
c1N0cmluZy50b0ludFB0clN0cmljdCgmb2theSk7Ci0gICAgaWYgKCFva2F5KQotICAgICAgICBD
UkFTSCgpOwotCi0gICAgdXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpOwotICAg
IHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci0+Z2V0VHlwZXNGb3JWYXJpYWJsZUlu
QXRPZmZzZXQob2Zmc2V0LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKLX0KLQotdm9pZCBWTTo6
dXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpCi17Ci0gICAgaWYgKCFpc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBoaWdo
RmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhmYWxzZSwgIlZNIFVwZGF0ZSIp
OwotfQotCiB2b2lkIFZNOjpkdW1wSGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKQogewogICAg
IGlmICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgdXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpOworICAgIGhpZ2hG
aWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJWTSBEdW1wIFR5cGVzIik7CiAg
ICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBwcm9maWxlciA9IG1faGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyLmdldCgpOwogICAgIGZvciAoQmFnPFR5cGVMb2NhdGlvbj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2xvY2F0aW9uSW5mby5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBU
eXBlTG9jYXRpb24qIGxvY2F0aW9uID0gKml0ZXI7Ci0gICAgICAgIGRhdGFMb2dGKCJbU3RhcnQs
IEVuZF06OlsldSwgJXVdICIsIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rp
dm90RW5kKTsKLSAgICAgICAgZGF0YUxvZygiXG5cdFx0I0xvY2FsI1xuXHRcdCIsCi0gICAgICAg
ICAgICAgICAgcHJvZmlsZXItPmdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGxvY2F0
aW9uLT5tX2Rpdm90U3RhcnQsICIiLCBsb2NhdGlvbi0+bV9zb3VyY2VJRCkucmVwbGFjZSgiXG4i
LCAiXG5cdFx0IiksCi0gICAgICAgICAgICAgICAgIlxuXHRcdCNHbG9iYWwjXG5cdFx0IiwKLSAg
ICAgICAgICAgICAgICBwcm9maWxlci0+Z2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0
KGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsICIiLCBsb2NhdGlvbi0+bV9zb3VyY2VJRCkucmVwbGFj
ZSgiXG4iLCAiXG5cdFx0IiksCi0gICAgICAgICAgICAgICAgIlxuIik7CisgICAgICAgIHByb2Zp
bGVyLT5sb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihsb2NhdGlvbik7CiAgICAgfQogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxNSwxMCAr
NTE1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEJ1aWx0aW5FeGVjdXRhYmxlcyogYnVp
bHRpbkV4ZWN1dGFibGVzKCkgeyByZXR1cm4gbV9idWlsdGluRXhlY3V0YWJsZXMuZ2V0KCk7IH0K
IAogICAgICAgICBib29sIGlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkgeyByZXR1
cm4gISFtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjsgfQotICAgICAgICBTdHJpbmcgZ2V0VHlw
ZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlh
YmxlTmFtZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7CiAgICAgICAgIEhpZ2hGaWRlbGl0eUxv
ZyogaGlnaEZpZGVsaXR5TG9nKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlMb2cuZ2V0KCk7IH0K
ICAgICAgICAgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKiBoaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIoKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5nZXQoKTsgfQotICAgICAg
ICB2b2lkIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3RhdGUoKTsKICAgICAgICAgVHlw
ZUxvY2F0aW9uKiBuZXh0TG9jYXRpb24oKSB7IHJldHVybiBtX2xvY2F0aW9uSW5mby5hZGQoKTsg
fSAvL1RPRE86IHBvc3NpYmxlIG9wdG1pemF0aW9uOiB3aGVuIGNvZGVibG9ja3MgZGllLCByZXBv
cnQgd2hpY2ggbG9jYXRpb25zIGFyZSBubyBsb25nZXIgYmVpbmcgY2hhbmdlZCBzbyB3ZSBkb24n
dCB3YWxrIG92ZXIgdGhlbQogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBIaWdo
RmlkZWxpdHlQcm9maWxpbmdUeXBlcygpOwogICAgICAgICBpbnQ2NF90IGdldE5leHRVbmlxdWVW
YXJpYWJsZUlEKCkgeyByZXR1cm4gbV9uZXh0VW5pcXVlVmFyaWFibGVJRCsrOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234891</attachid>
            <date>2014-07-14 16:46:12 -0700</date>
            <delta_ts>2014-07-19 13:56:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>55526</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMDg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk1IEBA
CisyMDE0LTA3LTE0ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgaW1wcm92ZW1lbnRzIHRvIFR5cGUgUHJvZmlsaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NjAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJIGltcHJvdmVkIHRoZSBBUEkgYmV0d2VlbiB0
aGUgaW5zcGVjdG9yIGFuZCBKU0MuIFdlIG5vIGxvbmdlciBzZW5kIG9uZSBodWdlCisgICAgICAg
IHN0cmluZyB0byB0aGUgaW5zcGVjdG9yLiBXZSBub3cgc2VuZCBzdHJ1Y3R1cmVkIGRhdGEgdGhh
dCByZXByZXNlbnRzIHRoZSB0eXBlCisgICAgICAgIGluZm9ybWF0aW9uIHRoYXQgSlNDIGhhcyBj
b2xsZWN0ZWQuIEkndmUgYWxzbyBjcmVhdGVkIGEgYmVnaW5uaW5nIGltcGxlbWVudGF0aW9uIAor
ICAgICAgICBvZiBhIHR5cGUgbGF0dGljZSB0aGF0IGFsbG93cyB1cyB0byByZXNvbHZlIGEgZGlz
cGxheSBuYW1lIGZvciBhIHR5cGUgdGhhdAorICAgICAgICBjb25zaXN0cyBvZiBhIHNpbmdsZSB3
b3JkLgorCisgICAgICAgIEkgY3JlYXRlZCBhIGRhdGEgc3RydWN0dXJlIHRoYXQga25vd3Mgd2hp
Y2ggZnVuY3Rpb25zIGhhdmUgZXhlY3V0ZWQuIFRoaXMKKyAgICAgICAgc29sdmVzIHRoZSBidWcg
d2hlcmUgdHlwZXMgaW5zaWRlIGFuIHVuLWV4ZWN1dGVkIGZ1bmN0aW9uIHdpbGwgcmVzb2x2ZQor
ICAgICAgICB0byB0aGUgdHlwZSBvZiB0aGUgZW5jbG9zaW5nIGV4cHJlc3Npb24gb2YgdGhhdCBm
dW5jdGlvbi4gVGhpcyBkYXRhCisgICAgICAgIHN0cnVjdHVyZSBtYXkgYWxzbyBiZSB1c2VmdWwg
bGF0ZXIgaWYgdGhlIGluc3BlY3RvciBjaG9vc2VzIHRvIGNyZWF0ZSBhIFVJCisgICAgICAgIGFy
b3VuZCBzaG93aW5nIHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGV4ZWN1dGVkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAqIGJ5dGVjb2RlL1R5cGVMb2NhdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9u
RXhlY3V0YWJsZTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU6OmhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ0V4cHJlc3Npb25JbmZvKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8pOiBEZWxldGVkLgorICAgICAgICAq
IGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6OmNvbGxlY3QpOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxl
QXRPZmZzZXQpOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbjoKKyAgICAg
ICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpTY3JpcHRFeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6
OlByb2dyYW1FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpG
dW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6aW5p
dGlhbGl6ZUdsb2JhbFByb3BlcnRpZXMpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5o
OgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpoaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hpZ2hG
aWRlbGl0eUxvZyk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9j
ZXNzTG9nVGhyZWFkRnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmg6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eUxvZzo6cmVjb3JkVHlwZUlu
Zm9ybWF0aW9uRm9yTG9jYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjps
b2dUeXBlc0ZvclR5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlcjo6aW5zZXJ0TmV3TG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3Rvcik6Cisg
ICAgICAgIChKU0M6OmRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKToKKyAgICAgICAgKEpT
Qzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpmaW5kTG9jYXRpb24pOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVkQXRPZmZzZXQpOgorICAgICAg
ICAoSlNDOjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omluc2VydFVuZXhlY3V0ZWRSYW5nZSk6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6cmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRUeXBl
c0ZvclZhcmlhYmxlSW5BdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9IaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlOjpGdW5jdGlvblJhbmdlOjpGdW5jdGlvblJhbmdlKToKKyAgICAgICAgKEpTQzo6RnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlOjpGdW5jdGlvblJhbmdlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOjpGdW5jdGlvblJhbmdlOjpoYXNoKToK
KyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpmdW5jdGlvbkhhc0V4ZWN1
dGVkQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKiBydW50aW1lL1R5cGVT
ZXQuY3BwOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhbHVlKToK
KyAgICAgICAgKEpTQzo6VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKToKKyAgICAgICAgKEpTQzo6
VHlwZVNldDo6c2VlblR5cGVzKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZG9lc1R5cGVDb25m
b3JtVG8pOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjpkaXNwbGF5TmFtZSk6CisgICAgICAgIChK
U0M6OlR5cGVTZXQ6OmFsbFR5cGVOYW1lcyk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFsbFN0
cnVjdHVyZVJlcHJlc2VudGF0aW9ucyk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmxlYXN0VXBw
ZXJCb3VuZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmcp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50YXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVT
aGFwZTo6Y29uc3RydWN0b3JOYW1lKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6Vk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcyk6CisgICAgICAgIChK
U0M6OlZNOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpWTTo6dXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9WTS5oOgorICAgICAgICAoSlNDOjpWTTo6aXNQcm9maWxpbmdUeXBl
c1dpdGhIaWdoRmlkZWxpdHkpOgorICAgICAgICAoSlNDOjpWTTo6aGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyKToKKwogMjAxNC0wNy0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydCB1bmludGVuZGVkIGNoYW5nZSBpbiByMTcxMDUx
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg1LDEyICsxNjg1LDE3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBBU1NFUlQobV9zb3VyY2UpOwog
ICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKSk7
CiAKKyAgICBpZiAodm0oKS0+aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAg
ICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJj
ZUlEKCksIG1fb3duZXJFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKSwgbV9vd25lckV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRP
ZmZzZXQoKSk7CisKICAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+
Y29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgaWYgKHVubGlua2VkQ29kZUJsb2NrLT51c2VzR2xv
YmFsT2JqZWN0KCkpCiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbdW5saW5rZWRDb2RlQmxv
Y2stPmdsb2JhbE9iamVjdFJlZ2lzdGVyKCkudG9Db25zdGFudEluZGV4KCldLnNldCgqbV92bSwg
b3duZXJFeGVjdXRhYmxlLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAgICAgbV9mdW5jdGlvbkRl
Y2xzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMo
KSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZG
dW5jdGlvbkRlY2xzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtl
ZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxv
Y2stPmZ1bmN0aW9uRGVjbChpKTsKKyAgICAgICAgaWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5n
ZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBs
aW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmVDb3VudCgpOwogICAgICAgICB1bnNp
Z25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFibGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVj
dXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKICAgICAgICAgYm9vbCBzdGFydENvbHVtbklzT25P
d25lclN0YXJ0TGluZSA9ICF1bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwpA
QCAtMTcwNyw2ICsxNzEyLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgIG1fZnVuY3Rpb25FeHBycy5yZXNpemVUb0ZpdCh1bmxpbmtlZENvZGVCbG9jay0+
bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5saW5r
ZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50OyAr
K2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0
YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7CisgICAgICAgIGlmICh2
bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQorICAgICAgICAgICAgdm0o
KS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgp
LT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVu
bGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCks
IHVubGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgp
KTsKICAgICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5saW5l
Q291bnQoKTsKICAgICAgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gb3duZXJFeGVjdXRhYmxlLT5s
aW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0KCk7CiAgICAgICAg
IGJvb2wgc3RhcnRDb2x1bW5Jc09uT3duZXJTdGFydExpbmUgPSAhdW5saW5rZWRFeGVjdXRhYmxl
LT5maXJzdExpbmVPZmZzZXQoKTsKQEAgLTE5NzYsMTEgKzE5ODMsMTQgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RI
YXZlR2xvYmFsSUQ6IAotICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0
aW9uQXJndW1lbnQ6Ci0gICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rp
b25UaGlzT2JqZWN0OiB7CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVu
Y3Rpb25Bcmd1bWVudDogewogICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlh
YmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29k
ZUZ1bmN0aW9uVGhpc09iamVjdDogeworICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2Jh
bFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRl
Y29kZUZ1bmN0aW9uUmV0dXJuU3RhdGVtZW50OiB7CiAgICAgICAgICAgICAgICAgbG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldCA9IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKICAgICAgICAgICAg
ICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3Rh
dGVtZW50OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9j
YXRpb24uaAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1R5cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw4IEBAIG5hbWVz
cGFjZSBKU0MgewogZW51bSBIaWdoRmlkZWxpdHlHbG9iYWxJREZsYWdzIHsKICAgICBIaWdoRmlk
ZWxpdHlOZWVkc1VuaXF1ZUlER2VuZXJhdGlvbiA9IC0xLAogICAgIEhpZ2hGaWRlbGl0eU5vR2xv
YmFsSURFeGlzdHMgPSAtMiwKLSAgICBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgPSAtMwor
ICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zLAorICAgIEhpZ2hGaWRlbGl0eVRo
aXNTdGF0ZW1lbnQgPSAtNAogfTsKIAogY2xhc3MgVHlwZUxvY2F0aW9uIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1fdW5saW5rZWRC
b2R5RW5kQ29sdW1uKG1fbGluZUNvdW50ID8gbm9kZS0+ZW5kQ29sdW1uKCkgOiBub2RlLT5lbmRD
b2x1bW4oKSAtIG5vZGUtPnN0YXJ0Q29sdW1uKCkpCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KG5vZGUt
PnNvdXJjZSgpLnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKICAgICAsIG1f
c291cmNlTGVuZ3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQorICAgICwgbV9oaWdoRmlkZWxp
dHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQobm9kZS0+ZnVuY3Rpb25OYW1lU3RhcnQoKSkKKyAg
ICAsIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldChub2RlLT5zdGFydFN0YXJ0
T2Zmc2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCiAgICAgLCBtX2ZlYXR1cmVz
KG5vZGUtPmZlYXR1cmVzKCkpCiAgICAgLCBtX2Z1bmN0aW9uTW9kZShub2RlLT5mdW5jdGlvbk1v
ZGUoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDYgKzEyNSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4o
KSBjb25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQogICAgIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQogICAgIHVuc2ln
bmVkIHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisgICAgdW5zaWdu
ZWQgaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBo
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAKICAgICBTdHJpbmcgcGFyYW1TdHJp
bmcoKSBjb25zdDsKIApAQCAtMTg2LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQg
bV91bmxpbmtlZEJvZHlFbmRDb2x1bW47CiAgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKICAg
ICB1bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdFbmRPZmZzZXQ7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMzcsNyArMzM3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZN
JgogCiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JM
b2NhbChjb2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwogCi0gICAgYm9vbCBjYW5MYXpp
bHlDcmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3Jl
VGhhblZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOworICAgIGJvb2wgY2Fu
TGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0aW9uRm9y
TW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rcyAmJiAhaXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKTsKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0g
Y29kZUJsb2NrLT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlv
blN0YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9u
ID0gZnVuY3Rpb25TdGFja1tpXTsKQEAgLTExMTYsNiArMTExNiwxNCBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsCiAgICAgcmV0dXJuIGRzdDsKIH0KIAordm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9u
SW5mbyhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRp
b24mIGVuZERpdm90KQoreworICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RhcnREaXZvdC5vZmZzZXQ7
IC8vIFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBvaW50cywgQU5EIDAgaW5kZXhl
ZC4KKyAgICB1bnNpZ25lZCBlbmQgPSBlbmREaXZvdC5vZmZzZXQgLSAxOyAvLyBFbmQgUmFuZ2Vz
IGFscmVhZHkgZ28gb25lIHBhc3QgdGhlIGluY2x1c2l2ZSByYW5nZSwgc28gc3VidHJhY3QgMS4K
KyAgICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAt
IDE7CisgICAgbV9jb2RlQmxvY2stPmFkZEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lv
bkluZm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIHN0YXJ0LCBlbmQpOworfQorCiB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiBy
ZWdpc3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxh
ZyBmbGFnKQogewogICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlk
ZWxpdHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjQsMTMgKzMyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RP
ZmZzZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmREaXZvdCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGFy
dERpdm90Lm9mZnNldCArIDE7IC8vIFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBv
aW50cywgQU5EIDEgaW5kZXhlZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGVuZERpdm90
Lm9mZnNldDsgLy8gRW5kIFJhbmdlcyBhbHJlYWR5IGdvIG9uZSBwYXN0IHRoZSBpbmNsdXNpdmUg
cmFuZ2UsIHNvIG5vIG5lZWQgdG8gZG8gKyAxIC0gMS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGlu
c3RydWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25JbmZvKGlu
c3RydWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKLSAgICAgICAgfQogCiAgICAgICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBsZWZ0SGFuZFNpZGVOZWVkc0NvcHkoYm9vbCByaWdodEhhc0Fzc2lnbm1l
bnRzLCBib29sIHJpZ2h0SXNQdXJlKQogICAgICAgICB7CkBAIC0zNDgsNiArMzQxLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGUobik7CiAgICAgICAgIH0K
IAorICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbklu
Zm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9u
JiBlbmREaXZvdCk7CiAgICAgICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHkoUmVnaXN0ZXJJRCogZHN0LCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVG
bGFnKTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJv
b2wpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3MTA4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NzAsOCArOTcwLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29s
bGVjdAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBH
QyBzdGFydGluZyBjb2xsZWN0aW9uLlxuIik7CiAjZW5kaWYKLSAgICBpZiAodm0oKS0+aXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5
TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coZmFsc2UsICJHQyIpOwogICAgIAogICAgIGRv
dWJsZSBiZWZvcmUgPSAwOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CkBAIC05ODEsNiAr
OTc5LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICAK
ICAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7
CiAgICAgCisgICAgaWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
IHsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAgICB2bSgp
LT5oaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiR0MiKTsKKyAgICB9
CisgICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAgQVNTRVJU
KHZtKCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIFJFTEVBU0VfQVNT
RVJUKHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0
cmluZ1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCShyZXZp
c2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBA
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNs
dWRlICJIaWdoRmlkZWxpdHlMb2cuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuaCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2Ny
aXB0TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtMTkxLDExICsx
OTMsMjYgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cgogewogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0
T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl92YXJpYWJsZU5hbWUsIGNvbnN0
IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwgU3RyaW5nKiBvdXRfdHlwZXMpIAordm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVBdE9mZnNldChF
cnJvclN0cmluZyosIGludCBpbl90eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yLCBjb25zdCBTdHJp
bmcmIGluX3NvdXJjZUlELCBpbnQgaW5fZGl2b3QsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+JiBvdXRfdHlwZXMpCiB7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsVk0oKTsKLSAgICBTdHJpbmcgdHlwZXModm0uZ2V0VHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KGluX2Rpdm90LCBpbl92YXJpYWJsZU5hbWUsIGluX2lkKSk7Ci0gICAgKm91dF90eXBl
cyA9IHR5cGVzOworICAgIG91dF90eXBlcyA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OlR5cGVEZXNjcmlwdGlvbjo6Y3JlYXRlKCk7CisgICAgb3V0X3R5cGVzLT5zZXREaXNwbGF5
VHlwZU5hbWUoIiIpOworICAgIG91dF90eXBlcy0+c2V0TGVhc3RVcHBlckJvdW5kKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpKTsKKyAgICBvdXRfdHlwZXMt
PnNldEdsb2JhbFR5cGVOYW1lcyhJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVzLT5zZXRHbG9iYWxTdHJ1Y3R1cmVzKEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVzLT5zZXRMb2NhbFR5cGVOYW1lcyhJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKSk7CisgICAgb3V0X3R5cGVz
LT5zZXRMb2NhbFN0cnVjdHVyZXMoSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpKTsKKworICAgIGlmICgh
dm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgYm9vbCBva2F5OworICAgIGludHB0cl90IHNvdXJjZUlEID0gaW5fc291cmNlSUQudG9J
bnRQdHJTdHJpY3QoJm9rYXkpOworICAgIEFTU0VSVChva2F5KTsKKworICAgIHZtLmhpZ2hGaWRl
bGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1ZXJ5Iik7CisgICAgdm0u
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZv
ckluc3BlY3RvcihzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihpbl90
eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yKSwgaW5fZGl2b3QsIHNvdXJjZUlELCBvdXRfdHlwZXMp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oCShyZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0
aWVzLCBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3Zl
cnJpZGUgZmluYWw7CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0
cmluZyosIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZp
cnR1YWwgdm9pZCBydW4oRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3Ry
aW5nJiBpbl92YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwg
U3RyaW5nKiBvdXRfdHlwZXMpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1l
VHlwZUZvclZhcmlhYmxlQXRPZmZzZXQoRXJyb3JTdHJpbmcqLCBpbnQgaW5fdHlwZUluZm9ybWF0
aW9uRGVzY3JpcHRvciwgY29uc3QgU3RyaW5nJiBpbl9zb3VyY2VJRCwgaW50IGluX2Rpdm90LCBS
ZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPiYg
b3V0X3R5cGVzKSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2Ny
aXB0RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIg
PSBzY3JpcHREZWJ1Z1NlcnZlcjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkocmV2aXNpb24gMTcxMDgy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpz
b24JKHdvcmtpbmcgY29weSkKQEAgLTExMSw2ICsxMTEsMjUgQEAKICAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInN0YXJ0T2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJTdGFydCBvZmZzZXQgb2YgcmFuZ2UgKGluY2x1c2l2ZSkuIiB9LAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZW5kT2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJFbmQgb2Zmc2V0IG9mIHJhbmdlIChleGNsdXNpdmUpLiIgfQogICAgICAgICAgICAgXQorICAg
ICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RydWN0dXJlRGVzY3JpcHRp
b24iLAorICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjog
eyAidHlwZSI6ICJzdHJpbmciIH0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkg
b2Ygc3RyaW5ncywgd2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9iamVjdCBmaWVsZHMuIgor
ICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURlc2NyaXB0aW9u
IiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiQ29udGFpbmVyIGZvciB0eXBlIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gZ2F0aGVy
ZWQuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZGlzcGxheVR5cGVOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1
ZSwgImRlc2NyaXB0aW9uIjogIldoYXQgdGhlIGluc3BlY3RvciBzaG91bGQgZGlzcGxheSBhcyBh
IHNpbXBsZSB0eXBlLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxlYXN0VXBwZXJC
b3VuZCIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJv
cHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJMZWFzdCB1cHBlciBib3VuZCBvZiBvYmpl
Y3QgZmllbGRzLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2FsU3RydWN0dXJl
cyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJTdHJ1Y3R1cmVEZXNjcmlw
dGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIGRlc2Ny
aXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBhdCB0aGlzIHRoaXMgaW5zdHJ1Y3Rpb24u
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxUeXBlTmFtZXMiLCAidHlwZSI6
ICJhcnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiAidHJ1
ZSIsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgdHlwZXMgc2Vl
biBhdCBpbnN0cnVjdGlvbi4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxT
dHJ1Y3R1cmVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVy
ZURlc2NyaXB0aW9uIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkg
b2YgZGVzY3JpcHRpb25zIGZvciBhbGwgc3RydWN0dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxl
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFR5cGVOYW1lcyIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgdHlwZXMgc2Vl
biBhdCBnbG9iYWxseS4iIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAg
ImNvbW1hbmRzIjogWwpAQCAtMjAwLDEyICsyMTksMTIgQEAKICAgICAgICAgewogICAgICAgICAg
ICAgIm5hbWUiOiAiZ2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0IiwKICAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidmFyaWFibGVO
YW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIlZhcmlhYmxlIHdlIHdhbnQg
dHlwZSBpbmZyb21hdGlvbiBmb3IuIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlw
ZUluZm9ybWF0aW9uRGVzY3JpcHRvciIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiV2hhdCBraW5kIG9mIHR5cGUgaW5mb3JtYXRpb24gZG8gd2Ugd2FudCAobm9ybWFsLCBmdW5j
dGlvbiByZXR1cm4gdmFsdWVzLCAndGhpcycgc3RhdGVtZW50KS4iIH0sCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6
ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNjcmlwdCIgfSwKICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6
ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3NpZ25tZW50IHJhbmdlIiB9CiAgICAgICAgICAgICBd
LAogICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0
eXBlcyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJUeXBlcyBmb3IgcmVxdWVz
dGVkIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAiJHJl
ZiI6ICJUeXBlRGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVlc3Rl
ZCB2YXJpYWJsZS4iIH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24i
OiAiUmV0dXJucyBkZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkocmV2aXNpb24gMTcxMDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRl
ICJCeXRlY29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUg
IkRGR0RyaXZlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKQEAgLTEwMyw2ICsxMDQsOCBAQCBTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRF
eGVjdXRhYmxlKFN0cnVjCiAgICAgLCBtX2xhc3RMaW5lKC0xKQogICAgICwgbV9zdGFydENvbHVt
bihVSU5UX01BWCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoVUlOVF9NQVgpCisgICAgLCBtX2hpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoVUlOVF9NQVgpCiB7CiB9CiAKQEAgLTM3OSw2ICsz
ODIsMTAgQEAgY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZgogUHJvZ3Jh
bUV4ZWN1dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291
cmNlQ29kZSYgc291cmNlKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dy
YW1FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNlKQog
eworICAgIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gMDsKKyAgICBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBzb3VyY2UubGVuZ3RoKCkgLSAx
OworICAgIGlmIChleGVjLT52bSgpLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
CisgICAgICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIG1faGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGluZ0VuZE9mZnNldCk7CiB9CiAKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQpAQCAtNDAyLDYgKzQwOSw4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVu
Y3Rpb25FeGVjdXRhYmxlKFYKICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKICAg
ICBtX3N0YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1
bW47CisgICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB1bmxpbmtl
ZEV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAg
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJs
ZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpOwogfQogCiB2b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01MDAsNiArNTA5LDEwIEBA
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgVW5saW5r
ZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rp
b25EZWNsYXJhdGlvbnNbaV0uc2Vjb25kLmdldCgpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2
bSwgbV9zb3VyY2UsIGxpbmVObygpKSwgc2NvcGUpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmFk
ZEZ1bmN0aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIHZhbHVl
KTsKKyAgICAgICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisg
ICAgICAgICAgICB2bS5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShzb3VyY2VJRCgpLCAKKyAgICAgICAg
ICAgICAgICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCksIAorICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgIH0KIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyAr
K2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw4IEBAIHB1YmxpYzoKICAgICBp
bnQgbGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lOyB9CiAgICAgdW5zaWduZWQg
c3RhcnRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgdW5zaWdu
ZWQgZW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KKyAgICB1bnNpZ25l
ZCBoaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KIAogICAgIGJvb2wgdXNlc0V2YWwoKSBj
b25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KICAgICBib29sIHVzZXNB
cmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsg
fQpAQCAtNDM1LDYgKzQzNyw4IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9sYXN0TGluZTsKICAg
ICB1bnNpZ25lZCBtX3N0YXJ0Q29sdW1uOwogICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworICAg
IHVuc2lnbmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKIH07CiAKIGNsYXNz
IEV2YWxFeGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShyZXZp
c2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxp
dHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywzOSArNTMsMTkgQEAgSGlnaEZpZGVsaXR5
TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9CiAK
LXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5bmNo
cm9ub3VzbHksIFN0cmluZyByZWFzb24pCit2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vzc0hp
Z2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KICAgICBpZiAoIW1fY3Vy
cmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAotICAgIEJ5dGVTcGlu
TG9ja2VyKiBsb2NrZXIgPSBuZXcgQnl0ZVNwaW5Mb2NrZXIobV9sb2NrKTsKLSAgICBUaHJlYWRE
YXRhKiBkYXRhID0gbmV3IFRocmVhZERhdGE7Ci0gICAgZGF0YS0+bV9wcm9jY2Vzc0xvZ1RvT2Zm
c2V0ID0gbV9jdXJyZW50T2Zmc2V0OwotICAgIGRhdGEtPm1fcHJvY2Vzc0xvZ1B0ciA9IG1fbG9n
U3RhcnRQdHI7Ci0gICAgZGF0YS0+bV9sb2NrZXIgPSBsb2NrZXI7Ci0KLSAgICBtX2N1cnJlbnRP
ZmZzZXQgPSAwOwotICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25leHRCdWZmZXIpOwot
ICAgIAotICAgIGlmIChhc3luY2hyb25vdXNseSkKLSAgICAgICAgY3JlYXRlVGhyZWFkKGFjdHVh
bGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hpZ2hGaWRlbGl0eUxv
ZyIpOwotICAgIGVsc2UgCi0gICAgICAgIGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9u
KGRhdGEpOwotfQotCi12b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9nVGhy
ZWFkRnVuY3Rpb24odm9pZCogYXJnKQotewogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50VGlt
ZU1TKCk7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEqPihh
cmcpOwotICAgIExvZ0VudHJ5KiBlbnRyeSA9IGRhdGEtPm1fcHJvY2Vzc0xvZ1B0cjsKKyAgICBM
b2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJlSUQs
IFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IHByb2Nlc3NM
b2dUb09mZnNldCA9IGRhdGEtPm1fcHJvY2Nlc3NMb2dUb09mZnNldDsgCiAgICAgc2l6ZV90IGkg
PSAwOwotICAgIHdoaWxlIChpIDwgcHJvY2Vzc0xvZ1RvT2Zmc2V0KSB7CisgICAgd2hpbGUgKGkg
PCBtX2N1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+c3Ry
dWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAogICAgICAg
ICBpZiAoaWQpIHsKQEAgLTEwNSwxMSArODUsMTIgQEAgdm9pZCBIaWdoRmlkZWxpdHlMb2c6OmFj
dHVhbGx5UHJvY2Vzc0xvZwogICAgICAgICBpKys7CiAgICAgfQogCi0gICAgZGVsZXRlIGRhdGEt
Pm1fbG9ja2VyOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIGRvdWJsZSBhZnRlciA9IGN1cnJlbnRU
aW1lTVMoKTsKLSAgICBpZiAodmVyYm9zZSkKKyAgICBtX2N1cnJlbnRPZmZzZXQgPSAwOworCisg
ICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygp
OwogICAgICAgICBkYXRhTG9nRigiIFByb2Nlc3NpbmcgdGhlIGxvZyB0b29rOiAnJWYnIG1zXG4i
LCBhZnRlciAtIGJlZm9yZSk7CisgICAgfQogfQogCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHJl
dmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTMgQEAgcHVibGljOgogICAg
IAogICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsKICAgICAgICAgaWYgKG1fY3VycmVudE9m
ZnNldCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCi0gICAgICAgICAgICBwcm9jZXNzSGlnaEZp
ZGVsaXR5TG9nKHRydWUsICJMb2cgRnVsbCIpOworICAgICAgICAgICAgcHJvY2Vzc0hpZ2hGaWRl
bGl0eUxvZygiTG9nIEZ1bGwiKTsKICAgICB9CiAKLSAgICB2b2lkIHByb2Nlc3NIaWdoRmlkZWxp
dHlMb2coYm9vbCBhc3luY2hyb25vdXNseSA9IGZhbHNlLCBTdHJpbmcgPSAiIik7CisgICAgdm9p
ZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyk7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBp
bml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKCk7Ci0gICAgc3RhdGljIHZvaWQgYWN0dWFsbHlQcm9j
ZXNzTG9nVGhyZWFkRnVuY3Rpb24odm9pZCopOwogCiAgICAgdW5zaWduZWQgbV9oaWdoRmlkZWxp
dHlMb2dTaXplOwogICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcz
ICsyNiwxNTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXIuaCIKIAorI2luY2x1ZGUgIkluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiCiAj
aW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBzdGF0aWMgY29u
c3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLVN0cmluZyBIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6OmdldFR5cGVzRm9yVmFyaWFibGVJbkF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBT
dHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRyX3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2Nh
dGlvbikKIHsKLSAgICBTdHJpbmcgZ2xvYmFsID0gZ2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKLSAgICBpZiAoIWdsb2JhbC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWw7Ci0gICAgCi0gICAgcmV0dXJuIGdldExv
Y2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlE
KTsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IgPSBsb2NhdGlv
bi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/IFR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFi
bGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gVHlwZVByb2ZpbGVyU2VhcmNoRGVz
Y3JpcHRvclRoaXNTdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWw7CisKKyAgICBk
YXRhTG9nRigiW1N0YXJ0LCBFbmRdOjpbJXUsICV1XVxuIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFy
dCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOworCisgICAgaWYgKGZpbmRMb2NhdGlvbihsb2NhdGlv
bi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9zb3VyY2VJRCwgZGVzY3JpcHRvcikpCisgICAg
ICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMgaW4gU3lzdGVtXVxuIik7CisgICAgZWxzZQorICAg
ICAgICBkYXRhTG9nKCJcdFx0W0VudHJ5IElTIE5PVCBpbiBzeXN0ZW1dXG4iKTsKKworICAgIGRh
dGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0
eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxW
YXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAiW1RoaXMgU3RhdGVtZW50
XSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKKworICAgIGRhdGFMb2coIlx0XHQjTG9jYWwj
XG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKS5yZXBs
YWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CisgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5
cGVTZXQpCisgICAgICAgIGRhdGFMb2coIlx0XHQjR2xvYmFsI1xuXHRcdCIsIGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4i
KTsKIH0KIAotU3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFsVHlwZXNG
b3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmICwgaW50cHRy
X3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6aW5zZXJ0TmV3TG9j
YXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0
aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCk7Ci0gICAgaWYgKCFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuICAiIjsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZ0Yo
IlJlZ2lzdGVyaW5nIGxvY2F0aW9uOjogZGl2b3RTdGFydDoldSwgZGl2b3RFbmQ6JXVcbiIsIGxv
Y2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKIAotICAgIGlmIChs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlz
dHMpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBpZiAoIW1fYnVja2V0TWFwLmNvbnRhaW5zKGxv
Y2F0aW9uLT5tX3NvdXJjZUlEKSkgeworICAgICAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4gYnVj
a2V0OworICAgICAgICBtX2J1Y2tldE1hcC5zZXQobG9jYXRpb24tPm1fc291cmNlSUQsIGJ1Y2tl
dCk7CisgICAgfQogCi0gICAgcmV0dXJuIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPnNlZW5U
eXBlcygpOworICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAu
ZmluZChsb2NhdGlvbi0+bV9zb3VyY2VJRCktPnZhbHVlOworICAgIGJ1Y2tldC5hcHBlbmQobG9j
YXRpb24pOwogfQogCi1TdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiAsIGlu
dHB0cl90IHNvdXJjZUlEKQordm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVz
Rm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yIGRlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mIHJldCkK
IHsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3Vy
Y2VJRCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwg
c291cmNlSUQsIGRlc2NyaXB0b3IpOwogICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVy
biAgIiI7CisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBsb2NhdGlvbi0+bV9pbnN0cnVj
dGlvblR5cGVTZXQtPnNlZW5UeXBlcygpOworICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBl
U2V0ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5Tm9HbG9i
YWxJREV4aXN0cykgeworICAgICAgICByZXQtPnNldERpc3BsYXlUeXBlTmFtZShsb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgcmV0LT5zZXRMZWFzdFVw
cGVyQm91bmQobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+bGVhc3RVcHBlckJvdW5kKCkpOwor
ICAgICAgICByZXQtPnNldEdsb2JhbFR5cGVOYW1lcyhsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0
LT5hbGxUeXBlTmFtZXMoKSk7CisgICAgICAgIHJldC0+c2V0R2xvYmFsU3RydWN0dXJlcyhsb2Nh
dGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgcmV0LT5zZXREaXNwbGF5VHlwZU5hbWUobG9jYXRpb24tPm1f
aW5zdHJ1Y3Rpb25UeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKKyAgICAgICAgcmV0LT5zZXRMZWFz
dFVwcGVyQm91bmQobG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5sZWFzdFVwcGVyQm91
bmQoKSk7CisgICAgfQorCisgICAgcmV0LT5zZXRMb2NhbFR5cGVOYW1lcyhsb2NhdGlvbi0+bV9p
bnN0cnVjdGlvblR5cGVTZXQtPmFsbFR5cGVOYW1lcygpKTsKKyAgICByZXQtPnNldExvY2FsU3Ry
dWN0dXJlcyhsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQtPmFsbFN0cnVjdHVyZVJlcHJl
c2VudGF0aW9ucygpKTsKIH0KIAotdm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6Omluc2Vy
dE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCitzdGF0aWMgYm9vbCBkZXNjcmlw
dG9yTWF0Y2hlc1R5cGVMb2NhdGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IsIFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiB7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgIGRhdGFMb2dGKCJSZWdpc3RlcmluZyBsb2NhdGlvbjo6IGRpdm90U3RhcnQ6JXUsIGRpdm90
RW5kOiV1XG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7
CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0
aW9uUmV0dXJuICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5
UmV0dXJuU3RhdGVtZW50KSAgCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2J1
Y2tldE1hcC5jb250YWlucyhsb2NhdGlvbi0+bV9zb3VyY2VJRCkpIHsKLSAgICAgICAgVmVjdG9y
PFR5cGVMb2NhdGlvbio+IGJ1Y2tldDsKLSAgICAgICAgbV9idWNrZXRNYXAuc2V0KGxvY2F0aW9u
LT5tX3NvdXJjZUlELCBidWNrZXQpOwotICAgIH0KKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0
TWFwLmZpbmQobG9jYXRpb24tPm1fc291cmNlSUQpLT52YWx1ZTsKLSAgICBidWNrZXQuYXBwZW5k
KGxvY2F0aW9uKTsKKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yTm9ybWFsICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVs
aXR5UmV0dXJuU3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGln
aEZpZGVsaXR5VGhpc1N0YXRlbWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotVHlwZUxvY2F0aW9uKiBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6
OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQpCitUeXBlTG9j
YXRpb24qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRp
dm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNj
cmlwdG9yKQogeworICAgIGlmICghbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaGFzRXhlY3V0
ZWRBdE9mZnNldChzb3VyY2VJRCwgZGl2b3QpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwog
ICAgIEFTU0VSVChtX2J1Y2tldE1hcC5jb250YWlucyhzb3VyY2VJRCkpOyAKIAogICAgIFZlY3Rv
cjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAuZmluZChzb3VyY2VJRCktPnZh
bHVlOwotICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7IC8vIEJlY2F1c2UgYXNzaWdu
bWVudHMgbWF5IGJlIG5lc3RlZCwgbWFrZSBzdXJlIHdlIGZpbmQgdGhlIGNsb3Nlc3QgZW5jbG9z
aW5nIGFzc2lnbm1lbnQgdG8gdGhpcyBjaGFyYWN0ZXIgb2Zmc2V0LgogICAgIFR5cGVMb2NhdGlv
biogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IFVJTlRfTUFY
OyAvLyBCZWNhdXNlIGFzc2lnbm1lbnRzIG1heSBiZSBuZXN0ZWQsIG1ha2Ugc3VyZSB3ZSBmaW5k
IHRoZSBjbG9zZXN0IGVuY2xvc2luZyBhc3NpZ25tZW50IHRvIHRoaXMgY2hhcmFjdGVyIG9mZnNl
dC4KICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1Y2tldC5zaXplKCk7IGkgPCBzaXpl
OyBpKyspIHsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGJ1Y2tldC5hdChpKTsK
LSAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPD0gZGl2b3QgJiYgZGl2b3QgPD0g
bG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24tPm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+
bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlKSB7CisgICAgICAgIGlmIChkZXNjcmlwdG9yID09IFR5
cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiAmJiBsb2NhdGlvbi0+bV9k
aXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPT0gZGl2b3QpCisgICAgICAg
ICAgICByZXR1cm4gbG9jYXRpb247CisKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3Rh
cnQgPD0gZGl2b3QgJiYgZGl2b3QgPD0gbG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24t
Pm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlICYmIGRlc2Ny
aXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKGRlc2NyaXB0b3IsIGxvY2F0aW9uKSkgewogICAgICAg
ICAgICAgZGlzdGFuY2UgPSBsb2NhdGlvbi0+bV9kaXZvdEVuZCAtIGxvY2F0aW9uLT5tX2Rpdm90
U3RhcnQ7CiAgICAgICAgICAgICBiZXN0TWF0Y2ggPSBsb2NhdGlvbjsKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBCZXN0TWF0Y2ggc2hvdWxkIG5ldmVyIGJlIG51bGwuIFRoaXMg
ZG9lc24ndCBob2xkIGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSBzb21lIEV2YWwvV2l0aC9W
YXJJbmplY3Rpb24gdmFyaWFibGUgYXNzaWdubWVudHMuCisgICAgLy8gRklYTUU6IEJlc3RNYXRj
aCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBwYXN0IHRoaXMgcG9pbnQuIFRoaXMgZG9lc24ndCBob2xk
IGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSBzb21lIEV2YWwvV2l0aC9WYXJJbmplY3Rpb24g
dmFyaWFibGUgYXNzaWdubWVudHMuCiAgICAgcmV0dXJuIGJlc3RNYXRjaDsKIH0KIAorYm9vbCBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQs
IHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3Jh
bmdlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSYW5nZU1hcCYgbWFw
ID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOworICAgIHVuc2lnbmVkIGRpc3RhbmNlID0g
VUlOVF9NQVg7CisgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGZhbHNlOworICAgIGZvciAoYXV0byBp
dGVyID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5nZSA9IGl0ZXItPmZpcnN0OworICAg
ICAgICBpZiAocmFuZ2UubV9zdGFydCA8PSBvZmZzZXQgJiYgb2Zmc2V0IDw9IHJhbmdlLm1fZW5k
ICYmIHJhbmdlLm1fZW5kIC0gcmFuZ2UubV9zdGFydCA8IGRpc3RhbmNlKSB7CisgICAgICAgICAg
ICBoYXNFeGVjdXRlZCA9IGl0ZXItPnNlY29uZDsKKyAgICAgICAgICAgIGRpc3RhbmNlID0gcmFu
Z2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGhhc0V4ZWN1dGVkOworfQorCit2b2lkIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6aW5zZXJ0
VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5k
KSAKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3JhbmdlTWFwLmVuZCgpKSB7
CisgICAgICAgIFJhbmdlTWFwIG1hcDsKKyAgICAgICAgbV9yYW5nZU1hcFtpZF0gPSBtYXA7Cisg
ICAgfQorCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsK
KyAgICBGdW5jdGlvblJhbmdlIHJhbmdlOworICAgIHJhbmdlLm1fc3RhcnQgPSBzdGFydDsKKyAg
ICByYW5nZS5tX2VuZCA9IGVuZDsKKyAgICAvLyBPbmx5IGluc2VydCB1bmV4ZWN1dGVkIHJhbmdl
cyBvbmNlIGZvciBhIGdpdmVuIHNvdXJjZUlEIGJlY2F1c2Ugd2UgbWF5IHJ1biBpbnRvIGEgc2l0
dWF0aW9uIHdoZXJlIGFuIGV4ZWN1dGFibGUgZXhlY3V0ZXMsIHRoZW4gaXMgR0NlZCwgYW5kIHRo
ZW4gaXMgYWxsb2NhdGVkIGFnYWluLAorICAgIC8vIGFuZCB0cmllcyB0byByZWluc2VydCBpdHNl
bGYsIGNsYWltaW5nIGl0IGhhcyBuZXZlciBydW4sIGJ1dCB0aGlzIGlzIGZhbHNlIGJlY2F1c2Ug
aXQgaW5kZWVkIGFscmVhZHkgZXhlY3V0ZWQuCisgICAgaWYgKG1hcC5maW5kKHJhbmdlKSA9PSBt
YXAuZW5kKCkpCisgICAgICAgIG1hcFtyYW5nZV0gPSBmYWxzZTsKK30KKwordm9pZCBGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShpbnRwdHJfdCBpZCwgdW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5l
dmVyIGhhdmUgYW4gaW5zdGFuY2Ugd2hlcmUgd2UgcmV0dXJuIGhlcmUsIGJ1dCBjdXJyZW50bHkg
ZG8gaW4gc29tZSBzaXR1YXRpb25zLiBGaW5kIG91dCB3aHkuCisgICAgaWYgKG1fcmFuZ2VNYXAu
ZmluZChpZCkgPT0gbV9yYW5nZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmFu
Z2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNlY29uZDsKKworICAgIEZ1bmN0aW9u
UmFuZ2UgcmFuZ2U7CisgICAgcmFuZ2UubV9zdGFydCA9IHN0YXJ0OworICAgIHJhbmdlLm1fZW5k
ID0gZW5kOworICAgIG1hcFtyYW5nZV0gPSB0cnVlOworfQorCiB9IC8vbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyLmgJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywyNSArMzMsNjMgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgIHsgbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgVHlwZURlc2NyaXB0aW9u
OworfX19CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBUeXBlTG9jYXRpb247CiAKK2NsYXNz
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSB7CitwdWJsaWM6CisgICAgc3RydWN0IEZ1bmN0aW9u
UmFuZ2UgeworICAgICAgICBGdW5jdGlvblJhbmdlKCkge30KKyAgICAgICAgdW5zaWduZWQgbV9z
dGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9lbmQ7CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBGdW5jdGlvblJhbmdlJiBvdGhlcikgY29uc3QgCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQ7
CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX3N0YXJ0ICogbV9lbmQ7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgYm9vbCBoYXNFeGVjdXRlZEF0T2Zmc2V0KGludHB0cl90IGlkLCB1bnNpZ25lZCBvZmZzZXQp
OworICAgIHZvaWQgaW5zZXJ0VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kKTsKKyAgICB2b2lkIHJlbW92ZVVuZXhlY3V0ZWRSYW5nZShpbnRw
dHJfdCBpZCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CisKK3ByaXZhdGU6ICAgICAK
KyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRlcmVkX21hcDxGdW5jdGlvblJhbmdlLCBib29sLCBIYXNo
TWV0aG9kPEZ1bmN0aW9uUmFuZ2U+PiBSYW5nZU1hcDsKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxpbnRwdHJfdCwgUmFuZ2VNYXA+IFNvdXJjZUlEVG9SYW5nZU1hcDsKKyAgICBTb3Vy
Y2VJRFRvUmFuZ2VNYXAgbV9yYW5nZU1hcDsKK307CisKK2VudW0gVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvciB7CisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCA9IDEs
CisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgPSAyLAorICAg
IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDMKK307CisKIGNs
YXNzIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciB7CiAKIHB1YmxpYzoKLSAgICBTdHJpbmcgZ2V0
VHlwZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYg
dmFyaWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCk7Ci0gICAgU3RyaW5nIGdldEdsb2JhbFR5
cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJp
YWJsZU5hbWUsIGludHB0cl90IHNvdXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0TG9jYWxUeXBlc0Zv
clZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVO
YW1lLCBpbnRwdHJfdCBzb3VyY2VJRCk7CisgICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlv
bihUeXBlTG9jYXRpb24qKTsKKyAgICB2b2lkIGdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZv
ckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IsIHVuc2ln
bmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4mKTsKICAgICB2b2lkIGluc2VydE5ld0xvY2F0
aW9uKFR5cGVMb2NhdGlvbiopOworICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSogZnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlKCkgeyByZXR1cm4gJm1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
OyB9CiAgICAgCiBwcml2YXRlOgotICAgIFR5cGVMb2NhdGlvbiogZmluZExvY2F0aW9uKHVuc2ln
bmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCk7CisgICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9j
YXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBUeXBlUHJvZmlsZXJTZWFy
Y2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOwogCiAgICAgdHlwZWRlZiBIYXNoTWFwPGludHB0cl90
LCBWZWN0b3I8VHlwZUxvY2F0aW9uKj4+IFNvdXJjZUlEVG9Mb2NhdGlvbkJ1Y2tldE1hcDsKICAg
ICBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXAgbV9idWNrZXRNYXA7CisgICAgRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlIG1fZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOwogfTsKIAorCiB9IC8v
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXJfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lv
biAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDc1LDYgKzEwNzUsMzYgQEAgUGFzc1JlZlB0cjxTdHJ1Y3R1
cmVTaGFwZT4gU3RydWN0dXJlOjp0bwogCiAgICAgICAgIHNoYXBlLT5hZGRQcm9wZXJ0eShzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpOwogICAgIH0KKyAgICAKKyAgICBib29sIGZv
dW5kQ3Rvck5hbWUgPSBmYWxzZTsKKyAgICBKU09iamVjdCogcHJvdG8gPSBzdG9yZWRQcm90b3R5
cGVPYmplY3QoKTsKKyAgICBpZiAocHJvdG8pIHsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0g
cHJvdG8tPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAgIFByb3BlcnR5U2xv
dCBzbG90KHN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAgICAgUHJvcGVydHlOYW1lIGNvbnN0cnVj
dG9yKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvcik7CisgICAgICAgIGlmIChwcm90
by0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGNvbnN0cnVjdG9yLCBzbG90KSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFdoYXQgaXMgYSBjdXN0b20gcHJvcGVydHkgc2xvdD8KKyAgICAgICAgICAg
IGlmIChzbG90LmlzVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RydWN0
b3JWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3RydWN0b3IpOworICAgICAgICAgICAg
ICAgIGlmIChjb25zdHJ1Y3RvclZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChKU0NlbGwqIGNvbnN0cnVjdG9yQ2VsbCA9IGNvbnN0cnVjdG9yVmFsdWUuYXNDZWxsKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09iamVjdCogY3Rvck9iamVjdCA9IGNv
bnN0cnVjdG9yQ2VsbC0+Z2V0T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoSlNGdW5jdGlvbiogY29uc3RydWN0b3JGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNG
dW5jdGlvbio+KGN0b3JPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoYXBlLT5zZXRDb25zdHJ1Y3Rvck5hbWUoY29uc3RydWN0b3JGdW5jdGlvbi0+Y2FsY3VsYXRl
ZERpc3BsYXlOYW1lKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91
bmRDdG9yTmFtZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChJbnRlcm5hbEZ1bmN0aW9uKiBjb25zdHJ1Y3RvckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxJ
bnRlcm5hbEZ1bmN0aW9uKj4oY3Rvck9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hhcGUtPnNldENvbnN0cnVjdG9yTmFtZShjb25zdHJ1Y3RvckZ1bmN0aW9uLT5j
YWxjdWxhdGVkRGlzcGxheU5hbWUoZXhlYykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZEN0b3JOYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
IWZvdW5kQ3Rvck5hbWUpCisgICAgICAgIHNoYXBlLT5zZXRDb25zdHJ1Y3Rvck5hbWUoY2xhc3NJ
bmZvKCktPmNsYXNzTmFtZSk7CiAKICAgICBzaGFwZS0+bWFya0FzRmluYWwoKTsKICAgICByZXR1
cm4gc2hhcGUucmVsZWFzZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MTA4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVHlwZVNldC5oIgogCisjaW5jbHVkZSAiSW5zcGVj
dG9ySlNUeXBlQnVpbGRlcnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01
OCw4ICs1OSw2IEBAIFJ1bnRpbWVUeXBlIFR5cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAg
ICAgICAgcmV0ID0gVHlwZU51bWJlcjsKICAgICBlbHNlIGlmICh2LmlzU3RyaW5nKCkpCiAgICAg
ICAgIHJldCA9IFR5cGVTdHJpbmc7Ci0gICAgZWxzZSBpZiAodi5pc1ByaW1pdGl2ZSgpKQotICAg
ICAgICByZXQgPSBUeXBlUHJpbWl0aXZlOwogICAgIGVsc2UgaWYgKHYuaXNPYmplY3QoKSkKICAg
ICAgICAgcmV0ID0gVHlwZU9iamVjdDsKICAgICBlbHNlCkBAIC03Myw3ICs3Miw3IEBAIHZvaWQg
VHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwKICAgICBSdW50aW1lVHlwZSB0ID0g
Z2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2KTsKICAgICBtX3NlZW5UeXBlcyA9IG1fc2VlblR5cGVz
IHwgdDsKIAotICAgIGlmIChpZCAmJiBzaGFwZSkgeworICAgIGlmIChpZCAmJiBzaGFwZSAmJiAh
di5pc1N0cmluZygpICYmICF2LmlzRnVuY3Rpb24oKSkgewogICAgICAgICBBU1NFUlQobV9zdHJ1
Y3R1cmVJREhpc3RvcnkuaXNWYWxpZEtleShpZCkpOwogICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0
cnVjdHVyZUlESGlzdG9yeS5maW5kKGlkKTsKICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJ1Y3R1
cmVJREhpc3RvcnkuZW5kKCkpIHsKQEAgLTk1LDcgKzk0LDcgQEAgdm9pZCBUeXBlU2V0OjphZGRU
eXBlRm9yVmFsdWUoSlNWYWx1ZSB2LAogICAgIH0KIH0KIAotU3RyaW5nIFR5cGVTZXQ6OnNlZW5U
eXBlcygpIAorU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKG1f
c2VlblR5cGVzID09IFR5cGVOb3RoaW5nKQogICAgICAgICByZXR1cm4gIihVbnJlYWNoZWQgU3Rh
dGVtZW50KSI7CkBAIC0xMTYsOCArMTE1LDYgQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygp
IAogICAgICAgICAgc2Vlbi5hcHBlbmQoIk51bWJlciAiKTsKICAgICBpZiAobV9zZWVuVHlwZXMg
JiBUeXBlU3RyaW5nKQogICAgICAgICAgc2Vlbi5hcHBlbmQoIlN0cmluZyAiKTsKLSAgICBpZiAo
bV9zZWVuVHlwZXMgJiBUeXBlUHJpbWl0aXZlKQotICAgICAgICAgc2Vlbi5hcHBlbmQoIlByaW1p
dGl2ZSAiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlT2JqZWN0KQogICAgICAgICAgc2Vl
bi5hcHBlbmQoIk9iamVjdCAiKTsKIApAQCAtMTQwLDEyICsxMzcsMTI4IEBAIFN0cmluZyBUeXBl
U2V0OjpzZWVuVHlwZXMoKSAKIAogICAgIGlmIChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSkg
ewogICAgICAgICBzZWVuLmFwcGVuZCgiXG5MVUI6ICIpOwotICAgICAgICBzZWVuLmFwcGVuZChT
dHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kKG1fc3RydWN0dXJlSGlzdG9yeSkpOworICAg
ICAgICBzZWVuLmFwcGVuZChTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmco
bV9zdHJ1Y3R1cmVIaXN0b3J5KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNlZW4udG9TdHJpbmco
KTsKIH0KIAorYm9vbCBUeXBlU2V0Ojpkb2VzVHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBj
b25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIG91ciBzZWVuIHR5cGVzIGNv
bmZvcm1zIHRvIHRoZSB0eXBlcyBkZXNjcmliZWQgYnkgdGhlIHRlc3QgYml0c3RyaW5nLiAKKyAg
ICAvLyBXZSBhcmUgPD0gdG8gdGhvc2UgdHlwZXMgaWYgQU5EaW5nIHdpdGggdGhlIGJpdHN0cmlu
ZyBkb2Vzbid0IHplcm8gb3V0IGFueSBvZiBvdXIgYml0cy4KKworICAgIC8vIEZvciBleGFtcGxl
OgorICAgIC8vIDBiMDExMCAoc2VlbikKKyAgICAvLyAwYjExMTEgKHRlc3QpCisgICAgLy8gLS0t
LS0tIChBTkQpCisgICAgLy8gMGIwMTEwID09IHNlZW4KKworICAgIC8vIDBiMDExMCAoc2VlbikK
KyAgICAvLyAwYjAwMTAgKHRlc3QpCisgICAgLy8gLS0tLS0tIChBTkQpCisgICAgLy8gMGIwMDEw
ICE9IHNlZW4KKworICAgIHJldHVybiAobV9zZWVuVHlwZXMgJiB0ZXN0KSA9PSBtX3NlZW5UeXBl
czsKK30KKworU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAo
bV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmcpCisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlm
IChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSkgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBj
dG9yTmFtZXM7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0
b3J5LT5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBz
aGFwZSA9IG1fc3RydWN0dXJlSGlzdG9yeS0+YXQoaSk7CisgICAgICAgICAgICBpZiAoIXNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZS5pc0VtcHR5KCkgJiYgIWN0b3JOYW1lcy5jb250YWlucyhzaGFw
ZS0+bV9jb25zdHJ1Y3Rvck5hbWUpKSB7CisgICAgICAgICAgICAgICAgY3Rvck5hbWVzLmFwcGVu
ZChzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOworICAgICAgICAgICAgICAgIGlmIChjdG9yTmFt
ZXMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBpZiAoY3Rvck5hbWVzLnNpemUoKSA9PSAxICYmIGRvZXNU
eXBlQ29uZm9ybVRvKFR5cGVPYmplY3QpKQorICAgICAgICAgICAgcmV0dXJuIGN0b3JOYW1lcy5h
dCgwKTsKKyAgICAgICAgZWxzZSBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVjdCB8IFR5
cGVGdW5jdGlvbiB8IFR5cGVTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuICJPYmplY3QiOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gIihtYW55KSI7CisgICAgfQorCisgICAg
aWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVGdW5jdGlvbikpCisgICAgICAgIHJldHVybiAiRnVu
Y3Rpb24iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlVW5kZWZpbmVkKSkKKyAgICAg
ICAgcmV0dXJuICJVbmRlZmluZWQiOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVs
bCkpCisgICAgICAgIHJldHVybiAiTnVsbCI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5
cGVCb29sZWFuKSkKKyAgICAgICAgcmV0dXJuICJCb29sIjsKKyAgICBpZiAoZG9lc1R5cGVDb25m
b3JtVG8oVHlwZU1hY2hpbmVJbnQpKQorICAgICAgICByZXR1cm4gIkludCI7CisgICAgaWYgKGRv
ZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1iZXIgfCBUeXBlTWFjaGluZUludCkpCisgICAgICAgIHJl
dHVybiAiTnVtYmVyIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN0cmluZykpCisg
ICAgICAgIHJldHVybiAiU3RyaW5nIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU51
bGwgfCBUeXBlVW5kZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuICIoRW1wdHkpIjsKKyAgICBpZiAo
ZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVjdCB8IFR5cGVGdW5jdGlvbiB8IFR5cGVTdHJpbmcp
KQorICAgICAgICByZXR1cm4gIk9iamVjdCI7CisKKyAgICByZXR1cm4gIihtYW55KSI7Cit9CisK
K1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gVHlwZVNl
dDo6YWxsVHlwZU5hbWVzKCkgY29uc3QKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVp
bGRlcjo6QXJyYXk8U3RyaW5nPj4gc2VlbiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5
PFN0cmluZz46OmNyZWF0ZSgpOworCisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZUZ1bmN0aW9u
KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiRnVuY3Rpb24iKTsKKyAgICBpZiAobV9zZWVuVHlw
ZXMgJiBUeXBlVW5kZWZpbmVkKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiVW5kZWZpbmVkIik7
CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU51bGwpCisgICAgICAgICBzZWVuLT5hZGRJdGVt
KCJOdWxsIik7CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZUJvb2xlYW4pCisgICAgICAgICBz
ZWVuLT5hZGRJdGVtKCJCb29sIik7CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU1hY2hpbmVJ
bnQpCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJJbnQiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMg
JiBUeXBlTnVtYmVyKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiTnVtYmVyIik7CisgICAgaWYg
KG1fc2VlblR5cGVzICYgVHlwZVN0cmluZykKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIlN0cmlu
ZyIpOworCisgICAgYm9vbCBoYXNBcHBlbmVkZWRPbmVDb25zdHJ1Y3RvciA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LT5zaXplKCk7IGkrKykg
eworICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlID0gbV9zdHJ1Y3R1cmVIaXN0
b3J5LT5hdChpKTsKKyAgICAgICAgaWYgKCFzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBpZiAoc2hhcGUtPm1fY29uc3RydWN0b3JOYW1lICE9ICJGdW5j
dGlvbiIpCisgICAgICAgICAgICAgICAgc2Vlbi0+YWRkSXRlbShzaGFwZS0+bV9jb25zdHJ1Y3Rv
ck5hbWUpOworICAgICAgICAgICAgaGFzQXBwZW5lZGVkT25lQ29uc3RydWN0b3IgPSB0cnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFoYXNBcHBlbmVkZWRPbmVDb25zdHJ1Y3RvciAm
JiBtX3NlZW5UeXBlcyAmIFR5cGVPYmplY3QpCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJPYmpl
Y3QiKTsKKworICAgIHJldHVybiBzZWVuLnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxT
dHJpbmc+Pj4gVHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3QKK3sK
KyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBl
QnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4+IHJldCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+OjpjcmVhdGUoKTsKKwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LT5zaXplKCk7IGkr
KykKKyAgICAgICAgcmV0LT5hZGRJdGVtKG1fc3RydWN0dXJlSGlzdG9yeS0+YXQoaSktPmluc3Bl
Y3RvclJlcHJlc2VudGF0aW9uKCkpOworCisgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7Cit9CisK
KworUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBUeXBl
U2V0OjpsZWFzdFVwcGVyQm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFw
ZTo6bGVhc3RVcHBlckJvdW5kKG1fc3RydWN0dXJlSGlzdG9yeSk7Cit9CisKIHZvaWQgVHlwZVNl
dDo6ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVuVHlwZXMoKSwgIlxuIik7CkBA
IC0xODcsNyArMzAwLDMxIEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6cHJvcGVydHlIYXNoKCkg
CiAgICAgcmV0dXJuICptX3Byb3BlcnR5SGFzaDsKIH0KIAotU3RyaW5nIFN0cnVjdHVyZVNoYXBl
OjpsZWFzdFVwcGVyQm91bmQoVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBzaGFwZXMp
CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFN0cnVj
dHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVT
aGFwZT4+KiBzaGFwZXMpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PFN0cmluZz4+IGx1YiA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46
OmNyZWF0ZSgpOworCisgICAgaWYgKCFzaGFwZXMtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGx1
Yi5yZWxlYXNlKCk7CisKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG9yaWdpbiA9IHNoYXBl
cy0+YXQoMCk7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBvcmlnaW4tPm1fZmllbGRzLmJlZ2luKCks
IGVuZCA9IG9yaWdpbi0+bV9maWVsZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgYm9vbCBzaG91bGRBZGQgPSB0cnVlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMSwg
c2l6ZSA9IHNoYXBlcy0+c2l6ZSgpOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAvLyBJ
ZiBhbGwgb3RoZXIgU2hhcGVzIGhhdmUgdGhlIHNhbWUgZmllbGQgYXMgb3JpZ2luLCBhZGQgaXQg
dG8gdGhlIGxlYXN0IHVwcGVyIGJvdW5kLgorICAgICAgICAgICAgaWYgKCFzaGFwZXMtPmF0KGkp
LT5tX2ZpZWxkcy5jb250YWlucyhpdGVyLT5rZXkpKSB7CisgICAgICAgICAgICAgICAgc2hvdWxk
QWRkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKHNob3VsZEFkZCkKKyAgICAgICAgICAgIGx1Yi0+YWRkSXRlbShT
dHJpbmcoaXRlci0+a2V5LmdldCgpKSk7IAorICAgIH0KKworICAgIHJldHVybiBsdWIucmVsZWFz
ZSgpOworfQorCitTdHJpbmcgU3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZEFzU3RyaW5n
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+Piogc2hhcGVzKQogewogICAgIGlm
ICghc2hhcGVzLT5zaXplKCkpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTIzNCw0ICszNzEsMTMg
QEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdAogICAgIHJldHVybiBy
ZXByZXNlbnRhdGlvbi50b1N0cmluZygpOwogfQogCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNl
bnRhdGlvbigpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+IHJldCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0
ZSgpOworICAgIGZvciAoYXV0byBpdGVyID0gbV9maWVsZHMuYmVnaW4oKSwgZW5kID0gbV9maWVs
ZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIHJldC0+YWRkSXRlbShpdGVy
LT5rZXkuZ2V0KCkpOworCisgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7Cit9CisKIH0gLy9uYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCShy
ZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDExIEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCituYW1lc3BhY2UgSW5zcGVj
dG9yIHsgbmFtZXNwYWNlIFR5cGVCdWlsZGVyICB7IAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEFycmF5OworfX0KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTVmFsdWU7CkBAIC00
NSw4ICs1MCw3IEBAIGVudW0gUnVudGltZVR5cGUgewogICAgIFR5cGVNYWNoaW5lSW50ICAgICAg
ICAgPSAweDEwLAogICAgIFR5cGVOdW1iZXIgICAgICAgICAgICAgPSAweDIwLAogICAgIFR5cGVT
dHJpbmcgICAgICAgICAgICAgPSAweDQwLAotICAgIFR5cGVQcmltaXRpdmUgICAgICAgICAgPSAw
eDgwLAotICAgIFR5cGVPYmplY3QgICAgICAgICAgICAgPSAweDEwMAorICAgIFR5cGVPYmplY3Qg
ICAgICAgICAgICAgPSAweDgwCiB9OwogCiBjbGFzcyBTdHJ1Y3R1cmVTaGFwZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFN0cnVjdHVyZVNoYXBlPiB7CkBAIC01OSwxMiArNjMsMTUgQEAgcHVibGljOgog
ICAgIFN0cmluZyBwcm9wZXJ0eUhhc2goKTsKICAgICB2b2lkIG1hcmtBc0ZpbmFsKCk7CiAgICAg
dm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwotICAgIHN0YXRpYyBTdHJpbmcg
bGVhc3RVcHBlckJvdW5kKFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+PiopOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGxl
YXN0VXBwZXJCb3VuZChjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qKTsKKyAg
ICBzdGF0aWMgU3RyaW5nIGxlYXN0VXBwZXJCb3VuZEFzU3RyaW5nKGNvbnN0IFZlY3RvcjxSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+Piogc2hhcGVzKTsKICAgICBTdHJpbmcgc3RyaW5nUmVwcmVzZW50
YXRpb24oKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+IGluc3BlY3RvclJlcHJlc2VudGF0aW9uKCk7CiAgICAgdm9pZCBzZXRDb25zdHJ1Y3Rv
ck5hbWUoU3RyaW5nIG5hbWUpIHsgbV9jb25zdHJ1Y3Rvck5hbWUgPSBuYW1lOyB9CisgICAgU3Ry
aW5nIGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3RydWN0b3JOYW1lOyB9CiAKIHBy
aXZhdGU6Ci0gICAgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGJvb2w+IG1fZmllbGRzOyAg
ICAgICAgIAorICAgIEhhc2hNYXA8UmVmUHRyPFN0cmluZ0ltcGw+LCBib29sPiBtX2ZpZWxkczsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RyaW5nPiBtX3Byb3BlcnR5SGFzaDsKICAgICBTdHJpbmcg
bV9jb25zdHJ1Y3Rvck5hbWU7CiAgICAgYm9vbCBtX2ZpbmFsOwpAQCAtNzcsMTEgKzg0LDE3IEBA
IHB1YmxpYzoKICAgICBUeXBlU2V0KCk7CiAgICAgdm9pZCBhZGRUeXBlRm9yVmFsdWUoSlNWYWx1
ZSB2LCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQpOwogICAgIHN0YXRp
YyBSdW50aW1lVHlwZSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKEpTVmFsdWUpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBT
dHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CisgICAgU3RyaW5nIGRpc3BsYXlOYW1lKCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBh
bGxUeXBlTmFtZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxk
ZXI6OkFycmF5PFN0cmluZz4+IGxlYXN0VXBwZXJCb3VuZCgpIGNvbnN0OworICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6
QXJyYXk8U3RyaW5nPj4+IGFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpIGNvbnN0OwogCiBw
cml2YXRlOgotICAgIHVpbnQzMl90IG1fc2VlblR5cGVzOwogICAgIHZvaWQgZHVtcFNlZW5UeXBl
cygpOworICAgIGJvb2wgZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3QgdGVzdCkgY29uc3Q7CisK
KyAgICB1aW50MzJfdCBtX3NlZW5UeXBlczsKICAgICBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNo
YXBlPj4qIG1fc3RydWN0dXJlSGlzdG9yeTsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCB1aW50
OF90PiBtX3N0cnVjdHVyZUlESGlzdG9yeTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNiw0MyArOTI2LDE2IEBAIHZvaWQg
Vk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdhY3lQcm9maWwKICAgICB9CiB9CiAKLVN0cmluZyBW
TTo6Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3Ry
aW5nJiB2YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlSURBc1N0cmluZykKLXsKLSAg
ICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHJldHVy
biAiKE5vdCBQcm9maWxpbmcpIjsKLQotICAgIGJvb2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3Vy
Y2VJRCA9IHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpOwotICAgIGlmICgh
b2theSkKLSAgICAgICAgQ1JBU0goKTsKLQotICAgIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlU3RhdGUoKTsKLSAgICByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXItPmdldFR5
cGVzRm9yVmFyaWFibGVJbkF0T2Zmc2V0KG9mZnNldCwgdmFyaWFibGVOYW1lLCBzb3VyY2VJRCk7
Ci19Ci0KLXZvaWQgVk06OnVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3RhdGUoKQotewot
ICAgIGlmICghaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coZmFs
c2UsICJWTSBVcGRhdGUiKTsKLX0KLQogdm9pZCBWTTo6ZHVtcEhpZ2hGaWRlbGl0eVByb2ZpbGlu
Z1R5cGVzKCkKIHsKICAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3Rh
dGUoKTsKKyAgICBoaWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiVk0g
RHVtcCBUeXBlcyIpOwogICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciogcHJvZmlsZXIgPSBt
X2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5nZXQoKTsKICAgICBmb3IgKEJhZzxUeXBlTG9jYXRp
b24+OjppdGVyYXRvciBpdGVyID0gbV9sb2NhdGlvbkluZm8uYmVnaW4oKTsgISFpdGVyOyArK2l0
ZXIpIHsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9ICppdGVyOwotICAgICAgICBk
YXRhTG9nRigiW1N0YXJ0LCBFbmRdOjpbJXUsICV1XSAiLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0
LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7Ci0gICAgICAgIGRhdGFMb2coIlxuXHRcdCNMb2NhbCNc
blx0XHQiLAotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5nZXRMb2NhbFR5cGVzRm9yVmFyaWFi
bGVBdE9mZnNldChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCAiIiwgbG9jYXRpb24tPm1fc291cmNl
SUQpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLAotICAgICAgICAgICAgICAgICJcblx0XHQjR2xv
YmFsI1xuXHRcdCIsCi0gICAgICAgICAgICAgICAgcHJvZmlsZXItPmdldEdsb2JhbFR5cGVzRm9y
VmFyaWFibGVBdE9mZnNldChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCAiIiwgbG9jYXRpb24tPm1f
c291cmNlSUQpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLAotICAgICAgICAgICAgICAgICJcbiIp
OworICAgICAgICBwcm9maWxlci0+bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24obG9jYXRpb24pOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAx
NzEwODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MTUsMTAgKzUxNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCdWlsdGlu
RXhlY3V0YWJsZXMqIGJ1aWx0aW5FeGVjdXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1
dGFibGVzLmdldCgpOyB9CiAKICAgICAgICAgYm9vbCBpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hG
aWRlbGl0eSgpIHsgcmV0dXJuICEhbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI7IH0KLSAgICAg
ICAgU3RyaW5nIGdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29u
c3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwogICAgICAg
ICBIaWdoRmlkZWxpdHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0dXJuIG1faGlnaEZpZGVs
aXR5TG9nLmdldCgpOyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciogaGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIu
Z2V0KCk7IH0KLSAgICAgICAgdm9pZCB1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRl
KCk7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbmV4dExvY2F0aW9uKCkgeyByZXR1cm4gbV9sb2Nh
dGlvbkluZm8uYWRkKCk7IH0gLy9UT0RPOiBwb3NzaWJsZSBvcHRtaXphdGlvbjogd2hlbiBjb2Rl
YmxvY2tzIGRpZSwgcmVwb3J0IHdoaWNoIGxvY2F0aW9ucyBhcmUgbm8gbG9uZ2VyIGJlaW5nIGNo
YW5nZWQgc28gd2UgZG9uJ3Qgd2FsayBvdmVyIHRoZW0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wSGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKTsKICAgICAgICAgaW50NjRf
dCBnZXROZXh0VW5pcXVlVmFyaWFibGVJRCgpIHsgcmV0dXJuIG1fbmV4dFVuaXF1ZVZhcmlhYmxl
SUQrKzsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235172</attachid>
            <date>2014-07-19 13:56:26 -0700</date>
            <delta_ts>2014-07-22 16:52:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>93357</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMjY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMCBA
QAorMjAxNC0wNy0xOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIGltcHJvdmVtZW50cyB0byBUeXBlIFByb2ZpbGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBpbXByb3ZlZCB0aGUgQVBJIGJldHdlZW4g
dGhlIGluc3BlY3RvciBhbmQgSlNDLiBXZSBubyBsb25nZXIgc2VuZCBvbmUgaHVnZQorICAgICAg
ICBzdHJpbmcgdG8gdGhlIGluc3BlY3Rvci4gV2Ugbm93IHNlbmQgc3RydWN0dXJlZCBkYXRhIHRo
YXQgcmVwcmVzZW50cyB0aGUgdHlwZQorICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IEpTQyBoYXMg
Y29sbGVjdGVkLiBJJ3ZlIGFsc28gY3JlYXRlZCBhIGJlZ2lubmluZyBpbXBsZW1lbnRhdGlvbiAK
KyAgICAgICAgb2YgYSB0eXBlIGxhdHRpY2UgdGhhdCBhbGxvd3MgdXMgdG8gcmVzb2x2ZSBhIGRp
c3BsYXkgbmFtZSBmb3IgYSB0eXBlIHRoYXQKKyAgICAgICAgY29uc2lzdHMgb2YgYSBzaW5nbGUg
d29yZC4KKworICAgICAgICBJIGNyZWF0ZWQgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGtub3dzIHdo
aWNoIGZ1bmN0aW9ucyBoYXZlIGV4ZWN1dGVkLiBUaGlzCisgICAgICAgIHNvbHZlcyB0aGUgYnVn
IHdoZXJlIHR5cGVzIGluc2lkZSBhbiB1bi1leGVjdXRlZCBmdW5jdGlvbiB3aWxsIHJlc29sdmUK
KyAgICAgICAgdG8gdGhlIHR5cGUgb2YgdGhlIGVuY2xvc2luZyBleHByZXNzaW9uIG9mIHRoYXQg
ZnVuY3Rpb24uIFRoaXMgZGF0YQorICAgICAgICBzdHJ1Y3R1cmUgbWF5IGFsc28gYmUgdXNlZnVs
IGxhdGVyIGlmIHRoZSBpbnNwZWN0b3IgY2hvb3NlcyB0byBjcmVhdGUgYSBVSQorICAgICAgICBh
cm91bmQgc2hvd2luZyB3aGljaCBmdW5jdGlvbnMgaGF2ZSBleGVjdXRlZC4KKworICAgICAgICBC
ZXR0ZXIgdHlwZSBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZCBmb3Igb2JqZWN0cy4gU3RydWN0dXJl
U2hhcGUgbm93CisgICAgICAgIHJlcHJlc2VudHMgYW4gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWlu
LiAgU3RydWN0dXJlU2hhcGUgYWxzbyBjb2xsZWN0cworICAgICAgICB0aGUgY29uc3RydWN0b3Ig
bmFtZSBmb3IgYW4gb2JqZWN0LgorCisgICAgICAgIEV4cHJlc3Npb24gcmFuZ2VzIGFyZSBub3cg
emVybyBpbmRleGVkLgorCisgICAgICAgIFJlbW92ZWQgc29tZSBleHRyYW5lb3VzIG1ldGhvZHMu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzY29wZURlcGVuZGVudFBy
b2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1R5cGVMb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpUeXBlTG9jYXRpb246OlR5cGVMb2Nh
dGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5m
byk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y29sbGVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb246CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0
YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
OjpQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6Omlu
aXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlOjpoYXNFeGVjdXRlZEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlOjppbnNlcnRVbmV4ZWN1dGVkUmFuZ2UpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRSYW5nZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25SYW5nZTo6RnVuY3Rpb25S
YW5nZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25S
YW5nZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZTo6RnVuY3Rpb25SYW5nZTo6aGFzaCk6CisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2cpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJvY2Vzc0xv
Z1RocmVhZEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0
eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1h
dGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlw
ZXNGb3JUeXBlTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6Omluc2VydE5ld0xvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3IpOgorICAgICAg
ICAoSlNDOjpkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6Okhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlSW5BdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFs
VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6UXVlcnlLZXk6OlF1ZXJ5S2V5KToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpRdWVyeUtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1
ZXJ5S2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1ZXJ5S2V5SGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6dHlwZUxv
Y2F0aW9uQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6VHlwZUxvY2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uQ2FjaGU6OkxvY2F0aW9uS2V5OjpMb2NhdGlvbktleSk6CisgICAgICAg
IChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6aGFzaCk6CisgICAgICAg
ICogcnVudGltZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGlt
ZVR5cGVGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OnNlZW5UeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZGlzcGxheU5h
bWUpOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxQcmltaXRpdmVUeXBlTmFtZXMpOgorICAg
ICAgICAoSlNDOjpUeXBlU2V0OjphbGxPYmplY3RUeXBlTmFtZXMpOgorICAgICAgICAoSlNDOjpU
eXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAgICAgICAoSlNDOjpUeXBl
U2V0OjpsZWFzdFVwcGVyQm91bmQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6U3Ry
dWN0dXJlU2hhcGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6YWRkUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6cHJvcGVydHlIYXNoKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZCk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmRBc1N0cmluZyk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbik6CisgICAgICAgICogcnVudGltZS9U
eXBlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpjb25zdHJ1Y3Rvck5hbWUp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6c2V0UHJvdG8pOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6ZHVtcEhpZ2hGaWRlbGl0eVByb2ZpbGlu
Z1R5cGVzKToKKyAgICAgICAgKEpTQzo6Vk06OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlZNOjp1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6
OlZNOjppc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSk6CisgICAgICAgIChKU0M6OlZN
OjpoaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIpOgorCiAyMDE0LTA3LTE3ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gREZHIEZsdXNoKFNldExvY2Fs
KSBzdG9yZSBlbGltaW5hdGlvbiBpcyBvdmVyemVhbG91cyBmb3IgY2FwdHVyZWQgdmFyaWFibGVz
IGluIHRoZSBwcmVzZW5jZSBvZiBub2RlcyB0aGF0IGhhdmUgbm8gZWZmZWN0cyBidXQgbWF5IHRo
cm93IChtZXJnZSB0cnVuayByMTcxMTkwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE3MTI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNiAr
ODQ0LDEwIEBACiAJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDIxMjAyMjkw
QUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmggKi87IH07CiAJCTQ0NDNBRTMzMTZF
MTg4RDkwMDc2RjExMCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAv
KiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0
IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ1MTUzOUI4MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8q
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTJCMzEwRkExOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTUyQjMxMEZEMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTJCMzEwRkMxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAg
Ki87IH07CisJCTUyQjMxMEZGMTk3NUI0MjQwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTBG
RTE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwICovOyB9OworCQk1MkIz
MTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMTAwMTk3NUI0NjcwMDgwODU3
QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTUyREFEMzhGMTk1QTE2NEUwMEYzMDQ2NCAvKiBUeXBlTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyREFE
MzhFMTk1QTE2NEUwMEYzMDQ2NCAvKiBUeXBlTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkZCNzEzNzE5NTM3NEI4MDBCQjYxMkUg
LyogSGlnaEZpZGVsaXR5TG9nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUyRkI3MTMzMTk1Mzc0QjcwMEJCNjEyRSAvKiBIaWdoRmlkZWxpdHlMb2cu
Y3BwICovOyB9OwogCQk1MkZCNzEzODE5NTM3NEI4MDBCQjYxMkUgLyogSGlnaEZpZGVsaXR5TG9n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkZCNzEz
NDE5NTM3NEI3MDBCQjYxMkUgLyogSGlnaEZpZGVsaXR5TG9nLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI5OTYsNiArMzAwMCwxMCBAQAogCQk1
MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29y
azsgbmFtZSA9IEZvdW5kYXRpb24uZnJhbWV3b3JrOyBwYXRoID0gL1N5c3RlbS9MaWJyYXJ5L0Zy
YW1ld29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CiAJCTUxRjBFQzA3MDVDODZDOUEwMEU2REYxQiAvKiBsaWJvYmpjLmR5bGliICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gt
by5keWxpYiI7IG5hbWUgPSBsaWJvYmpjLmR5bGliOyBwYXRoID0gL3Vzci9saWIvbGlib2JqYy5k
eWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJNTIyQUJBRjkxOTRBODA0MzAw
OEIxQzg1IC8qIFR5cGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUeXBlTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMzEwRkEx
OTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTJCMzEwRkMxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1N0MgLyog
VHlwZUxvY2F0aW9uQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZUxvY2F0aW9uQ2Fj
aGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MkIzMTEwMDE5NzVCNDY3MDA4
MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9u
Q2FjaGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJEQUQzOEUxOTVBMTY0RTAw
RjMwNDY0IC8qIFR5cGVMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlTG9jYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTJGQjcxMzMxOTUzNzRCNzAwQkI2MTJFIC8q
IEhpZ2hGaWRlbGl0eUxvZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBIaWdoRmlkZWxpdHlMb2cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MkZC
NzEzNDE5NTM3NEI3MDBCQjYxMkUgLyogSGlnaEZpZGVsaXR5TG9nLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEhpZ2hGaWRlbGl0eUxvZy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtNDY3MCw2ICs0Njc4LDggQEAKIAkJCQlCQzI2ODBDMTBFMTZENEU5MDBBMDZF
OTIgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oICovLAogCQkJCTBGQjRCNTIxMTZCNjI3OEQwMDNG
Njk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLywKIAkJCQkwRkI0QjUyMjE2QjYy
NzhEMDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovLAorCQkJCTUyQjMxMEZB
MTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLywKKwkJCQk1
MkIzMTBGQzE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCAq
LywKIAkJCQlGNjkyQTg1QzAyNTU1OTdEMDFGRjYwRjcgLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
ICovLAogCQkJCUY2OTJBODVEMDI1NTU5N0QwMUZGNjBGNyAvKiBGdW5jdGlvblByb3RvdHlwZS5o
ICovLAogCQkJCTBGMkI2NkIyMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXcuaCAqLywKQEAgLTQ5NTEsNiArNDk2MSw4IEBACiAJCQkJMEYyQjY2REIxN0I2QjVBQjAwQTdB
RTNGIC8qIFR5cGVkQXJyYXlzLmggKi8sCiAJCQkJMEYyQjY2REMxN0I2QjVBQjAwQTdBRTNGIC8q
IFR5cGVkQXJyYXlUeXBlLmNwcCAqLywKIAkJCQkwRjJCNjZERDE3QjZCNUFCMDBBN0FFM0YgLyog
VHlwZWRBcnJheVR5cGUuaCAqLywKKwkJCQk1MkIzMTEwMDE5NzVCNDY3MDA4MDg1N0MgLyogVHlw
ZUxvY2F0aW9uQ2FjaGUuaCAqLywKKwkJCQk1MkIzMTBGRTE5NzVCNDI0MDA4MDg1N0MgLyogVHlw
ZUxvY2F0aW9uQ2FjaGUuY3BwICovLAogCQkJCTUyRkI3MjEyMTk1Mzc2MEMwMEJCNjEyRSAvKiBU
eXBlU2V0LmNwcCAqLywKIAkJCQk1MkZCNzIxMzE5NTM3NjBDMDBCQjYxMkUgLyogVHlwZVNldC5o
ICovLAogCQkJCUE3QThBRjMyMTdBREI1RjMwMDVBQjE3NCAvKiBVaW50MTZBcnJheS5oICovLApA
QCAtNjI0OCw2ICs2MjYwLDcgQEAKIAkJCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
T1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCREUxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkUw
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTExMTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRw
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTlFNzI5NDBCMTkwRjA1MTQwMDFBOTFCNSAvKiBCdW5k
bGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyQTE4N0RGREVDMDA4M0I2ODcgLyog
RlRMUmVjb3ZlcnlPcGNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjU5Niw2ICs2NjA5LDcgQEAK
IAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJEMTY2QUQzNjAw
MDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MkIzMTEw
MTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUJFMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTkwQ0FEMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxl
ckpldHRpc29uUmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRjE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovLApAQCAtNzU4MSw2ICs3NTk1
LDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTUyQjMxMEZGMTk3NUI0MjQwMDgwODU3
QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RUE1QzdBMjE5
MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOUVBNUM3QTExOTBGMDg0MjAwNTA4RUJFIC8qIEJ1bmRsZVBhdGgubW0gaW4gU291cmNlcyAq
LywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc4MjgsNiArNzg0Myw3IEBACiAJCQkJMEY1QTYyODMxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5Q0IxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGMEYxOUYxNkI3MkExNzAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTJCMzEwRkQxOTc0QUU4NzAwODA4NTdDIC8q
IEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY3NjZEMkYxNUE4RENFMDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjIzOUQxQTE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJl
YWQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5
LDcgQEAKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNOYW1lU2NvcGUuaCIK
ICNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKLSNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIK
KyNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgIkxvd0xldmVsSW50ZXJw
cmV0ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUG9seW1vcnBoaWNH
ZXRCeUlkTGlzdC5oIgpAQCAtMTY4NSwxMiArMTY4NSwxNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1Q
YXJhbWV0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOwogCisgICAgaWYg
KHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgIHZtKCkt
PmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+
cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBtX293
bmVyRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIG1f
b3duZXJFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwor
CiAgICAgc2V0Q29uc3RhbnRSZWdpc3RlcnModW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50UmVn
aXN0ZXJzKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgp
KQogICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxP
YmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0
YWJsZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOwogICAgIG1fZnVuY3Rpb25EZWNscy5yZXNpemVU
b0ZpdCh1bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZv
ciAoc2l6ZV90IGNvdW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNs
cygpLCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4
ZWN1dGFibGUqIHVubGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlv
bkRlY2woaSk7CisgICAgICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRl
bGl0eSgpKQorICAgICAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1
bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2UobV9vd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKICAgICAgICAgdW5zaWduZWQgbGluZUNvdW50ID0g
dW5saW5rZWRFeGVjdXRhYmxlLT5saW5lQ291bnQoKTsKICAgICAgICAgdW5zaWduZWQgZmlyc3RM
aW5lID0gb3duZXJFeGVjdXRhYmxlLT5saW5lTm8oKSArIHVubGlua2VkRXhlY3V0YWJsZS0+Zmly
c3RMaW5lT2Zmc2V0KCk7CiAgICAgICAgIGJvb2wgc3RhcnRDb2x1bW5Jc09uT3duZXJTdGFydExp
bmUgPSAhdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKQEAgLTE3MDcsNiAr
MTcxMiw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBt
X2Z1bmN0aW9uRXhwcnMucmVzaXplVG9GaXQodW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVu
Y3Rpb25FeHBycygpKTsKICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxp
bmtlZENvZGVCbG9jay0+ZnVuY3Rpb25FeHByKGkpOworICAgICAgICBpZiAodm0oKS0+aXNQcm9m
aWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgICAgIHZtKCktPmhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5l
eGVjdXRlZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4
ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAgICAgICAg
IHVuc2lnbmVkIGxpbmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CiAg
ICAgICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1
bmxpbmtlZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwogICAgICAgICBib29sIHN0YXJ0
Q29sdW1uSXNPbk93bmVyU3RhcnRMaW5lID0gIXVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5l
T2Zmc2V0KCk7CkBAIC0xOTIyLDggKzE5MjksNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3Jp
cHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBpZiAocGNbMF0udS5vcGNvZGUgPT0gb3BfZ2V0
X2Zyb21fc2NvcGVfd2l0aF9wcm9maWxlKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGZvcm1h
dCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBnZXRfZnJvbV9zY29wZV93aXRoX3Byb2ZpbGUgZHN0
LCBzY29wZSwgaWQsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJlLCBPcGVyYW5kLCAuLi4s
IFR5cGVMb2NhdGlvbgogICAgICAgICAgICAgICAgIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCA9
IGkgKyBvcExlbmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9IHZtKCktPm5leHRMb2NhdGlvbigpOwotICAgICAgICAgICAgICAgIHNjb3BlRGVwZW5kZW50
UHJvZmlsZShvcCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0LCBsb2NhdGlvbik7CisgICAgICAg
ICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHNjb3BlRGVwZW5kZW50UHJvZmlsZShv
cCwgaWRlbnQsIGluc3RydWN0aW9uT2Zmc2V0KTsKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDhdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTk0OSw4ICsxOTU1LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaWYgKHBjWzBdLnUub3Bjb2RlID09IG9wX3B1
dF90b19zY29wZV93aXRoX3Byb2ZpbGUpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZm9ybWF0
IG9mIHRoaXMgaW5zdHJ1Y3Rpb24gaXM6IHB1dF90b19zY29wZV93aXRoX3Byb2ZpbGUgc2NvcGUs
IGlkLCB2YWx1ZSwgUmVzb2x2ZU1vZGVBbmRUeXBlLCBTdHJ1Y3R1cmUsIE9wZXJhbmQsIFR5cGVM
b2NhdGlvbioKICAgICAgICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsg
b3BMZW5ndGggLSAxOwotICAgICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSB2
bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgICAgICBzY29wZURlcGVuZGVudFByb2Zp
bGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCwgbG9jYXRpb24pOworICAgICAgICAgICAg
ICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBzY29wZURlcGVuZGVudFByb2ZpbGUob3AsIGlk
ZW50LCBpbnN0cnVjdGlvbk9mZnNldCk7CiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA3XS51LmxvY2F0aW9uID0gbG9jYXRpb247CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTE5NTksNDQgKzE5NjQsNTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZXNfd2l0aF9oaWdoX2Zp
ZGVsaXR5OiB7CiAgICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BM
ZW5ndGggLSAxOwogICAgICAgICAgICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7Cisg
ICAgICAgICAgICBpbnRwdHJfdCBnbG9iYWxWYXJpYWJsZUlEOworICAgICAgICAgICAgUmVmUHRy
PFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7CiAgICAgICAgICAgICBib29sIHNob3VsZEFuYWx5emUg
PSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHByZXNzaW9uSW5mb0Zv
ckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCk7
CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyKHBjWzFdLnUub3Bl
cmFuZCk7CiAgICAgICAgICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBtX3N5bWJvbFRh
YmxlLmdldCgpOwotICAgICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtKCktPm5l
eHRMb2NhdGlvbigpOwotICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IGRpdm90
U3RhcnQ7Ci0gICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEVuZCA9IGRpdm90RW5kOwotICAg
ICAgICAgICAgbG9jYXRpb24tPm1fc291cmNlSUQgPSBtX293bmVyRXhlY3V0YWJsZS0+c291cmNl
SUQoKTsKIAogICAgICAgICAgICAgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2Rl
RmxhZyBmbGFnID0gc3RhdGljX2Nhc3Q8UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVj
b2RlRmxhZz4ocGNbM10udS5vcGVyYW5kKTsKICAgICAgICAgICAgIHN3aXRjaCAoZmxhZykgewog
ICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUhhc0dsb2JhbElEOiB7CiAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJv
bFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNl
dCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCA9
IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2VyLCB2aXJ0dWFsUmVn
aXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlE
ID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yUmVnaXN0ZXIobG9ja2VyLCB2aXJ0dWFsUmVnaXN0
ZXIub2Zmc2V0KCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3lt
Ym9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JSZWdpc3Rlcihsb2NrZXIsIHZpcnR1YWxSZWdpc3Rl
ci5vZmZzZXQoKSwgKnZtKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZURvZXNOb3RIYXZlR2xvYmFs
SUQ6IAotICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uQXJndW1l
bnQ6CisgICAgICAgICAgICBjYXNlIFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25Bcmd1bWVu
dDogeworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0ds
b2JhbElERXhpc3RzOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uVGhpc09iamVjdDogewot
ICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxp
dHlOb0dsb2JhbElERXhpc3RzOworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBI
aWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29kZUZ1bmN0aW9uUmV0
dXJuU3RhdGVtZW50OiB7Ci0gICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNl
dCA9IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+
bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50OwotICAgICAg
ICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRl
bWVudCA9IG1fc291cmNlT2Zmc2V0OyAKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0g
cmV0dXJuU3RhdGVtZW50VHlwZVNldCgpOworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxl
SUQgPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQ7CiAgICAgICAgICAgICAgICAgaWYgKCFz
aG91bGRBbmFseXplKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugc29tZSByZXR1
cm4gc3RhdGVtZW50cyBhcmUgYWRkZWQgaW1wbGljaXRseSAodG8gcmV0dXJuIHVuZGVmaW5lZCBh
dCB0aGUgZW5kIG9mIGEgZnVuY3Rpb24pLCBhbmQgdGhlc2Ugbm9kZXMgZG9uJ3QgZW1pdCBleHBy
ZXNzaW9uIHJhbmdlcywgZ2l2ZSB0aGVtIHNvbWUgcmFuZ2UuCiAgICAgICAgICAgICAgICAgICAg
IC8vIEN1cnJlbnRseSwgdGhpcyBkaXZvdCBpcyBvbiB0aGUgb3BlbiBicmFjZSBvZiB0aGUgZnVu
Y3Rpb24uIAotICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0ID0gbG9j
YXRpb24tPm1fZGl2b3RFbmQgPSBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZS
ZXR1cm5TdGF0ZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIGRpdm90U3RhcnQgPSBkaXZvdEVu
ZCA9IG1fc291cmNlT2Zmc2V0OwogICAgICAgICAgICAgICAgICAgICBzaG91bGRBbmFseXplID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChzaG91bGRBbmFseXplKQor
ICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0aW9uUGFpciA9
IHZtKCktPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5n
ZXRUeXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwgbV9vd25lckV4ZWN1dGFibGUtPnNvdXJj
ZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2bSgpKTsKKyAgICAg
ICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7CisgICAg
ICAgICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOworCisgICAg
ICAgICAgICBpZiAoUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudCkK
KyAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1
cm5TdGF0ZW1lbnQgPSBtX3NvdXJjZU9mZnNldDsKKworICAgICAgICAgICAgaWYgKHNob3VsZEFu
YWx5emUgJiYgaXNOZXdMb2NhdGlvbikKICAgICAgICAgICAgICAgICB2bSgpLT5oaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOworCiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDJdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0zODgzLDEzICszODk2LDEyIEBAIERGRzo6Q2FwYWJp
bGl0eUxldmVsIENvZGVCbG9jazo6Y2FwYWJpbGkKIH0KICNlbmRpZgogCi12b2lkIENvZGVCbG9j
azo6c2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVPcCBvcCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIHNpemVfdCBpbnN0cnVjdGlvbk9mZnNldCwgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikK
K1R5cGVMb2NhdGlvbiogQ29kZUJsb2NrOjpzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9w
IG9wLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0KQog
ewogICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRpdm90RW5kOwogICAgIGJvb2wgc2hvdWxkQW5h
bHl6ZSA9IG1fdW5saW5rZWRDb2RlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25J
bmZvRm9yQnl0ZWNvZGVPZmZzZXQoaW5zdHJ1Y3Rpb25PZmZzZXQsIGRpdm90U3RhcnQsIGRpdm90
RW5kKTsKLSAgICBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0ID0gZGl2b3RTdGFydDsKLSAgICBsb2Nh
dGlvbi0+bV9kaXZvdEVuZCA9IGRpdm90RW5kOwotICAgIGxvY2F0aW9uLT5tX3NvdXJjZUlEID0g
bV9vd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCk7CisgICAgaW50cHRyX3QgZ2xvYmFsVmFyaWFi
bGVJRDsKKyAgICBSZWZQdHI8VHlwZVNldD4gZ2xvYmFsVHlwZVNldDsKIAogICAgIC8vIEZJWE1F
OiBoYW5kbGUgb3RoZXIgdmFsdWVzIGZvciBvcC50eXBlIGhlcmUsIGFuZCBhbHNvIGNvbnNpZGVy
IHdoYXQgdG8gZG8gd2hlbiB3ZSBjYW4ndCBzdGF0aWNhbGx5IGRldGVybWluZSB0aGUgZ2xvYmFs
SUQKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBudWxscHRyOwpAQCAtMzkwMCwxMyAr
MzkxMiwxOSBAQCB2b2lkIENvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlCiAgICAg
CiAgICAgaWYgKHN5bWJvbFRhYmxlKSB7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJp
YWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5p
bXBsKCksICp2bSgpKTsKLSAgICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCA9IHN5bWJv
bFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2
bSgpKTsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZv
clZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgIGdsb2JhbFR5
cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRl
bnQuaW1wbCgpLCAqdm0oKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxvY2F0aW9uLT5tX2dsb2Jh
bFZhcmlhYmxlSUQgPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzOworICAgICAgICBnbG9i
YWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKIAotICAgIGlmIChz
aG91bGRBbmFseXplKQorICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlv
blBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2Fj
aGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsIG1fb3duZXJFeGVjdXRhYmxl
LT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgdm0oKSk7
CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGxvY2F0aW9uUGFpci5maXJzdDsKKyAgICBi
b29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOworCisgICAgaWYgKHNob3Vs
ZEFuYWx5emUgJiBpc05ld0xvY2F0aW9uKQogICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOworCisgICAgcmV0dXJuIGxv
Y2F0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE3MTI1OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtODMs
NiArODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEV4ZWNTdGF0ZTsKIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFJlcGF0Y2hCdWZmZXI7CitjbGFzcyBUeXBlTG9jYXRp
b247CiAKIGlubGluZSBWaXJ0dWFsUmVnaXN0ZXIgdW5tb2RpZmllZEFyZ3VtZW50c1JlZ2lzdGVy
KFZpcnR1YWxSZWdpc3RlciBhcmd1bWVudHNSZWdpc3RlcikgeyByZXR1cm4gVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50c1JlZ2lzdGVyLm9mZnNldCgpICsgMSk7IH0KIApAQCAtMTAyMSw3ICsxMDIy
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0cihuZXcgUmFy
ZURhdGEpOwogICAgIH0KIAotICAgIHZvaWQgc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVP
cCwgY29uc3QgSWRlbnRpZmllciYsIHNpemVfdCwgVHlwZUxvY2F0aW9uKik7CisgICAgVHlwZUxv
Y2F0aW9uKiBzY29wZURlcGVuZGVudFByb2ZpbGUoUmVzb2x2ZU9wLCBjb25zdCBJZGVudGlmaWVy
Jiwgc2l6ZV90KTsKICAgICAKICNpZiBFTkFCTEUoSklUKQogICAgIHZvaWQgcmVzZXRTdHViSW50
ZXJuYWwoUmVwYXRjaEJ1ZmZlciYsIFN0cnVjdHVyZVN0dWJJbmZvJik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCShyZXZpc2lvbiAxNzEy
NTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVHlwZUxvY2F0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDEzICszMywxNSBAQCBuYW1lc3BhY2UgSlNDIHsKIGVudW0gSGln
aEZpZGVsaXR5R2xvYmFsSURGbGFncyB7CiAgICAgSGlnaEZpZGVsaXR5TmVlZHNVbmlxdWVJREdl
bmVyYXRpb24gPSAtMSwKICAgICBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhpc3RzID0gLTIsCi0g
ICAgSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMKKyAgICBIaWdoRmlkZWxpdHlSZXR1
cm5TdGF0ZW1lbnQgPSAtMywKKyAgICBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID0gLTQKIH07
CiAKIGNsYXNzIFR5cGVMb2NhdGlvbiB7CiBwdWJsaWM6CiAgICAgVHlwZUxvY2F0aW9uKCkgCi0g
ICAgICAgIDogbV9pbnN0cnVjdGlvblR5cGVTZXQoVHlwZVNldDo6Y3JlYXRlKCkpCisgICAgICAg
IDogbV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQoVUlOVF9NQVgpCisg
ICAgICAgICwgbV9pbnN0cnVjdGlvblR5cGVTZXQoVHlwZVNldDo6Y3JlYXRlKCkpCiAgICAgICAg
ICwgbV9nbG9iYWxUeXBlU2V0KG51bGxwdHIpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTcxMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw4IEBAIFVubGlu
a2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpVbmxpbmtlZEZ1bmMKICAgICAsIG1fdW5saW5rZWRCb2R5
RW5kQ29sdW1uKG1fbGluZUNvdW50ID8gbm9kZS0+ZW5kQ29sdW1uKCkgOiBub2RlLT5lbmRDb2x1
bW4oKSAtIG5vZGUtPnN0YXJ0Q29sdW1uKCkpCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KG5vZGUtPnNv
dXJjZSgpLnN0YXJ0T2Zmc2V0KCkgLSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSkKICAgICAsIG1fc291
cmNlTGVuZ3RoKG5vZGUtPnNvdXJjZSgpLmxlbmd0aCgpKQorICAgICwgbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQobm9kZS0+ZnVuY3Rpb25OYW1lU3RhcnQoKSkKKyAgICAs
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldChub2RlLT5zdGFydFN0YXJ0T2Zm
c2V0KCkgKyBub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSAtIDEpCiAgICAgLCBtX2ZlYXR1cmVzKG5v
ZGUtPmZlYXR1cmVzKCkpCiAgICAgLCBtX2Z1bmN0aW9uTW9kZShub2RlLT5mdW5jdGlvbk1vZGUo
KSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAxNzEyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYg
KzEyNSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCB1bmxpbmtlZEJvZHlFbmRDb2x1bW4oKSBj
b25zdCB7IHJldHVybiBtX3VubGlua2VkQm9keUVuZENvbHVtbjsgfQogICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQogICAgIHVuc2lnbmVk
IHNvdXJjZUxlbmd0aCgpIHsgcmV0dXJuIG1fc291cmNlTGVuZ3RoOyB9CisgICAgdW5zaWduZWQg
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBoaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OyB9CiAKICAgICBTdHJpbmcgcGFyYW1TdHJpbmco
KSBjb25zdDsKIApAQCAtMTg2LDYgKzE4OCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV91
bmxpbmtlZEJvZHlFbmRDb2x1bW47CiAgICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKICAgICB1
bnNpZ25lZCBtX3NvdXJjZUxlbmd0aDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxpbmdTdGFydE9mZnNldDsKKyAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQ7CiAKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE3MTI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzcsNyArMzM3LDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgog
CiAgICAgbV9zeW1ib2xUYWJsZS0+c2V0Q2FwdHVyZUVuZCh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2Nh
bChjb2RlQmxvY2stPm1fbnVtVmFycykub2Zmc2V0KCkpOwogCi0gICAgYm9vbCBjYW5MYXppbHlD
cmVhdGVGdW5jdGlvbnMgPSAhZnVuY3Rpb25Cb2R5LT5uZWVkc0FjdGl2YXRpb25Gb3JNb3JlVGhh
blZhcmlhYmxlcygpICYmICFtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzOworICAgIGJvb2wgY2FuTGF6
aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3RpdmF0aW9uRm9yTW9y
ZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rcyAmJiAhaXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKTsKICAgICBtX2ZpcnN0TGF6eUZ1bmN0aW9uID0gY29k
ZUJsb2NrLT5tX251bVZhcnM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmdW5jdGlvblN0
YWNrLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZ1bmN0aW9uQm9keU5vZGUqIGZ1bmN0aW9uID0g
ZnVuY3Rpb25TdGFja1tpXTsKQEAgLTExMTYsNiArMTExNiwxNCBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsCiAgICAgcmV0dXJuIGRzdDsKIH0KIAordm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5m
byhjb25zdCBKU1RleHRQb3NpdGlvbiYgc3RhcnREaXZvdCwgY29uc3QgSlNUZXh0UG9zaXRpb24m
IGVuZERpdm90KQoreworICAgIHVuc2lnbmVkIHN0YXJ0ID0gc3RhcnREaXZvdC5vZmZzZXQ7IC8v
IFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBvaW50cywgQU5EIDAgaW5kZXhlZC4K
KyAgICB1bnNpZ25lZCBlbmQgPSBlbmREaXZvdC5vZmZzZXQgLSAxOyAvLyBFbmQgUmFuZ2VzIGFs
cmVhZHkgZ28gb25lIHBhc3QgdGhlIGluY2x1c2l2ZSByYW5nZSwgc28gc3VidHJhY3QgMS4KKyAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAtIDE7
CisgICAgbV9jb2RlQmxvY2stPmFkZEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlRXhwcmVzc2lvbklu
Zm8oaW5zdHJ1Y3Rpb25PZmZzZXQsIHN0YXJ0LCBlbmQpOworfQorCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eShSZWdpc3RlcklEKiByZWdp
c3RlclRvUHJvZmlsZSwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRlbGl0eUJ5dGVjb2RlRmxhZyBm
bGFnKQogewogICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV90eXBlc193aXRoX2hpZ2hfZmlkZWxp
dHkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjQsMTMgKzMyNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5hZGRFeHByZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RPZmZz
ZXQsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGxpbmUsIGNvbHVtbik7CiAgICAgICAgIH0KIAot
ICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
Y29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
bmREaXZvdCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQgPSBzdGFydERp
dm90Lm9mZnNldCArIDE7IC8vIFJhbmdlcyBhcmUgaW5jbHVzaXZlIG9mIHRoZWlyIGVuZHBvaW50
cywgQU5EIDEgaW5kZXhlZC4KLSAgICAgICAgICAgIHVuc2lnbmVkIGVuZCA9IGVuZERpdm90Lm9m
ZnNldDsgLy8gRW5kIFJhbmdlcyBhbHJlYWR5IGdvIG9uZSBwYXN0IHRoZSBpbmNsdXNpdmUgcmFu
Z2UsIHNvIG5vIG5lZWQgdG8gZG8gKyAxIC0gMS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGluc3Ry
dWN0aW9uT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpIC0gMTsKLSAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZUV4cHJlc3Npb25JbmZvKGluc3Ry
dWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKLSAgICAgICAgfQogCiAgICAgICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBsZWZ0SGFuZFNpZGVOZWVkc0NvcHkoYm9vbCByaWdodEhhc0Fzc2lnbm1lbnRz
LCBib29sIHJpZ2h0SXNQdXJlKQogICAgICAgICB7CkBAIC0zNDgsNiArMzQxLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gZW1pdE5vZGUobik7CiAgICAgICAgIH0KIAor
ICAgICAgICB2b2lkIGVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8o
Y29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBl
bmREaXZvdCk7CiAgICAgICAgIHZvaWQgZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
UmVnaXN0ZXJJRCogZHN0LCBQcm9maWxlVHlwZXNXaXRoSGlnaEZpZGVsaXR5Qnl0ZWNvZGVGbGFn
KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TG9hZChSZWdpc3RlcklEKiBkc3QsIGJvb2wp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDE3MTI1OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NzAsOCArOTcwLDYgQEAgdm9pZCBIZWFwOjpjb2xsZWN0KEhlYXBPcGVyYXRpb24gY29sbGVj
dAogI2lmIEVOQUJMRShBTExPQ0FUSU9OX0xPR0dJTkcpCiAgICAgZGF0YUxvZ0YoIkpTQyBHQyBz
dGFydGluZyBjb2xsZWN0aW9uLlxuIik7CiAjZW5kaWYKLSAgICBpZiAodm0oKS0+aXNQcm9maWxp
bmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5TG9n
KCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coZmFsc2UsICJHQyIpOwogICAgIAogICAgIGRvdWJs
ZSBiZWZvcmUgPSAwOwogICAgIGlmIChPcHRpb25zOjpsb2dHQygpKSB7CkBAIC05ODEsNiArOTc5
LDExIEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFwT3BlcmF0aW9uIGNvbGxlY3QKICAgICAKICAg
ICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiR2FyYmFnZSBDb2xsZWN0aW9uIik7CiAg
ICAgCisgICAgaWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpIHsK
KyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBhd2hpbGUoKnRoaXMpOworICAgICAgICB2bSgpLT5o
aWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiR0MiKTsKKyAgICB9Cisg
ICAgCiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGVmZXJyYWxEZXB0aCk7CiAgICAgQVNTRVJUKHZt
KCktPmN1cnJlbnRUaHJlYWRJc0hvbGRpbmdBUElMb2NrKCkpOwogICAgIFJFTEVBU0VfQVNTRVJU
KHZtKCktPmF0b21pY1N0cmluZ1RhYmxlKCkgPT0gd3RmVGhyZWFkRGF0YSgpLmF0b21pY1N0cmlu
Z1RhYmxlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCShyZXZpc2lv
biAxNzEyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw4IEBACiAj
aWYgRU5BQkxFKElOU1BFQ1RPUikKIAogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIKKyNpbmNsdWRl
ICJIaWdoRmlkZWxpdHlMb2cuaCIKKyNpbmNsdWRlICJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIu
aCIKICNpbmNsdWRlICJJbmplY3RlZFNjcmlwdC5oIgogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0
TWFuYWdlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgpAQCAtNDMsNiArNDUsOCBA
QAogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CisKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIApAQCAtMTkxLDExICsxOTUsNDEgQEAgdm9p
ZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJ1bihFcnJvclN0cgogewogfQogCi12b2lkIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9y
U3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl92YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5f
aWQsIGludCBpbl9kaXZvdCwgU3RyaW5nKiBvdXRfdHlwZXMpIAordm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmlu
ZyogZXJyb3JTdHJpbmcsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFycmF5PiYg
aW5fbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4mIG91dF90eXBl
cykKIHsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAgICAgVk0mIHZt
ID0gZ2xvYmFsVk0oKTsKLSAgICBTdHJpbmcgdHlwZXModm0uZ2V0VHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KGluX2Rpdm90LCBpbl92YXJpYWJsZU5hbWUsIGluX2lkKSk7Ci0gICAgKm91dF90eXBl
cyA9IHR5cGVzOworICAgIG91dF90eXBlcyA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk6OmNy
ZWF0ZSgpOworICAgIGlmICghdm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIHN0YXJ0ID0gY3VycmVudFRpbWVNUygpOwor
ICAgIHZtLmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJVc2VyIFF1
ZXJ5Iik7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluX2xvY2F0aW9ucy0+bGVuZ3Ro
KCk7IGkrKykgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JWYWx1ZT4gdmFs
dWUgPSBpbl9sb2NhdGlvbnMtPmdldChpKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbG9jYXRpb247CisgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KCZsb2NhdGlvbikpIHsK
KyAgICAgICAgICAgICplcnJvclN0cmluZyA9IEFTQ0lJTGl0ZXJhbCgiQXJyYXkgb2YgVHlwZUxv
Y2F0aW9uIG9iamVjdHMgaGFzIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGhhdmUgdHlwZSBvZiBU
eXBlTG9jYXRpb24uIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgZGVzY3JpcHRvcjsKKyAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7CisgICAg
ICAgIGludCBkaXZvdDsKKyAgICAgICAgbG9jYXRpb24tPmdldE51bWJlcihBU0NJSUxpdGVyYWwo
InR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3IiKSwgJmRlc2NyaXB0b3IpOworICAgICAgICBsb2Nh
dGlvbi0+Z2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgic291cmNlSUQiKSwgJnNvdXJjZUlEQXNTdHJp
bmcpOworICAgICAgICBsb2NhdGlvbi0+Z2V0TnVtYmVyKEFTQ0lJTGl0ZXJhbCgiZGl2b3QiKSwg
JmRpdm90KTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9i
amVjdD4gdHlwZURlc2NyaXB0aW9uID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBib29sIG9rYXk7CisgICAgICAgIHZtLmhpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlcigpLT5nZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3Ioc3RhdGljX2Nh
c3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIGRpdm90LCBzb3Vy
Y2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgdHlwZURlc2NyaXB0aW9uKTsKKyAg
ICAgICAgb3V0X3R5cGVzLT5wdXNoT2JqZWN0KHR5cGVEZXNjcmlwdGlvbik7CisgICAgfQorCisg
ICAgZG91YmxlIGVuZCA9IGN1cnJlbnRUaW1lTVMoKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZ0YoIkluc3BlY3Rvcjo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZz
ZXRzIHRvb2sgJWxmbXNcbiIsIGVuZCAtIHN0YXJ0KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JSdW50aW1lQWdlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkocmV2aXNpb24gMTcxMjU5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDggKzY2LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgY29uc3QgYm9vbCogb3duUHJvcGVydGllcywgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+JiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwKSBvdmVycmlkZSBmaW5hbDsKICAgICB2aXJ0dWFsIHZvaWQgcnVuKEVycm9yU3RyaW5n
Kikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlRm9yVmFyaWFibGVB
dE9mZnNldChFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgaW5fdmFyaWFibGVOYW1lLCBjb25z
dCBTdHJpbmcmIGluX2lkLCBpbnQgaW5fZGl2b3QsIFN0cmluZyogb3V0X3R5cGVzKSBvdmVycmlk
ZTsKLQorICAgIHZpcnR1YWwgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNl
dHMoRXJyb3JTdHJpbmcqLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JBcnJheT4m
IGluX2xvY2F0aW9ucywgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yQXJyYXk+JiBvdXRfdHlw
ZXMpIG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2V0U2NyaXB0RGVidWdTZXJ2ZXIoU2NyaXB0
RGVidWdTZXJ2ZXIqIHNjcmlwdERlYnVnU2VydmVyKSB7IG1fc2NyaXB0RGVidWdTZXJ2ZXIgPSBz
Y3JpcHREZWJ1Z1NlcnZlcjsgfQogCiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3QgeyByZXR1cm4g
bV9lbmFibGVkOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3Rv
Y29sL1J1bnRpbWUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3Byb3RvY29sL1J1bnRpbWUuanNvbgkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb24JKHdvcmtpbmcg
Y29weSkKQEAgLTExMSw2ICsxMTEsMzcgQEAKICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInN0
YXJ0T2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJTdGFydCBvZmZz
ZXQgb2YgcmFuZ2UgKGluY2x1c2l2ZSkuIiB9LAogICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
ZW5kT2Zmc2V0IiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJFbmQgb2Zmc2V0
IG9mIHJhbmdlIChleGNsdXNpdmUpLiIgfQogICAgICAgICAgICAgXQorICAgICAgICB9LAorICAg
ICAgICB7CisgICAgICAgICAgICAiaWQiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iLAorICAgICAg
ICAgICAgInR5cGUiOiAiYXJyYXkiLAorICAgICAgICAgICAgIml0ZW1zIjogeyAidHlwZSI6ICJz
dHJpbmciIH0sCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2Ygc3RyaW5ncywg
d2hlcmUgdGhlIHN0cmluZ3MgcmVwcmVzZW50IG9iamVjdCBmaWVsZHMuIgorICAgICAgICB9LAor
ICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZURlc2NyaXB0aW9uIiwKKyAgICAgICAg
ICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29udGFp
bmVyIGZvciB0eXBlIGluZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4gZ2F0aGVyZWQuIiwKKyAgICAg
ICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGlzcGxh
eVR5cGVOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0
aW9uIjogIldoYXQgdGhlIGluc3BlY3RvciBzaG91bGQgZGlzcGxheSBhcyBhIHNpbXBsZSB0eXBl
LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxlYXN0VXBwZXJCb3VuZCIsICJ0eXBl
IjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6IHRy
dWUsICJkZXNjcmlwdGlvbiI6ICJMZWFzdCB1cHBlciBib3VuZCBvZiBvYmplY3QgZmllbGRzLiIg
fSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2FsUHJpbWl0aXZlVHlwZU5hbWVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFs
IjogInRydWUiLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgcHJpbXRp
dmUgdHlwZXMgKGludCwgc3RyaW5nLCBldGMpIHNlZW4gYXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbE9iamVjdFR5cGVOYW1lcyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6ICJ0cnVl
IiwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIGFsbCBvYmplY3Qgc2Vl
biBhdCBhbiBpbnN0cnVjdGlvbiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2Fs
U3RydWN0dXJlcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJTdHJ1Y3R1
cmVEZXNjcmlwdGlvbiIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5
IG9mIGRlc2NyaXB0aW9ucyBmb3IgYWxsIHN0cnVjdHVyZXMgc2VlbiBhdCB0aGlzIHRoaXMgaW5z
dHJ1Y3Rpb24uIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZ2xvYmFsUHJpbWl0aXZl
VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIg
fSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFtZXMg
Zm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9iYWxseS4iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJnbG9iYWxPYmplY3RUeXBlTmFtZXMiLCAidHlwZSI6ICJhcnJheSIsICJp
dGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRp
b24iOiAiQXJyYXkgb2YgdHlwZSBuYW1lcyBmb3IgYWxsIHByaW1pdGl2ZSB0eXBlcyBzZWVuIGds
b2JhbGx5LiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFN0cnVjdHVyZXMi
LCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRp
b24iIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiBkZXNjcmlw
dGlvbnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNlZW4gZm9yIHRoaXMgdmFyaWFibGUuIiB9CisgICAg
ICAgICAgICBdCisgICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJUeXBl
TG9jYXRpb24iLAorICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKKyAgICAgICAgICAgICJk
ZXNjcmlwdGlvbiI6ICJEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIGFuIGV4cHJlc3Npb24gd2Ug
d2FudCB0eXBlIGluZm9ybWF0aW9uIGZvci4iLAorICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yIiwg
InR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJXaGF0IGtpbmQgb2YgdHlwZSBpbmZv
cm1hdGlvbiBkbyB3ZSB3YW50IChub3JtYWwsIGZ1bmN0aW9uIHJldHVybiB2YWx1ZXMsICd0aGlz
JyBzdGF0ZW1lbnQpLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZUlEIiwg
InR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogInNvdXJjZUlEIHVuaXF1ZWx5IGlkZW50
aWZ5aW5nIGEgc2NyaXB0IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGl2b3QiLCAi
dHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogImNoYXJhY3RlciBvZmZzZXQgZm9yIGFz
c2lnbm1lbnQgcmFuZ2UiIH0KKyAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0sCiAgICAg
ImNvbW1hbmRzIjogWwpAQCAtMTk4LDE0ICsyMjksMTIgQEAKICAgICAgICAgICAgICJkZXNjcmlw
dGlvbiI6ICJEaXNhYmxlcyByZXBvcnRpbmcgb2YgZXhlY3V0aW9uIGNvbnRleHRzIGNyZWF0aW9u
LiIKICAgICAgICAgfSwKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZ2V0UnVudGlt
ZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0IiwKKyAgICAgICAgICAgICJuYW1lIjogImdldFJ1bnRp
bWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6
IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInZhcmlhYmxlTmFtZSIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJWYXJpYWJsZSB3ZSB3YW50IHR5cGUgaW5mcm9tYXRpb24g
Zm9yLiIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInNvdXJjZUlEIiwgInR5cGUiOiAi
c3RyaW5nIiwgImRlc2NyaXB0aW9uIjogInNvdXJjZUlEIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEg
c2NyaXB0IiB9LAotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGl2b3QiLCAidHlwZSI6ICJp
bnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogImNoYXJhY3RlciBvZmZzZXQgZm9yIGFzc2lnbm1lbnQg
cmFuZ2UiIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImxvY2F0aW9ucyIsICJ0eXBlIjog
ImFycmF5IiwgIml0ZW1zIjogeyAiJHJlZiI6ICJUeXBlTG9jYXRpb24iIH0sICJkZXNjcmlwdGlv
biI6ICJBbiBhcnJheSBvZiB0eXBlIGxvY2F0aW9ucyB3ZSdyZSByZXF1ZXN0aW5nIGluZm9ybWF0
aW9uIGZvci4gUmVzdWx0cyBhcmUgZXhwZWN0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhleSdyZSBz
ZW50IGluLiJ9CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgInJldHVybnMiOiBbCi0gICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJ0eXBlcyIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlw
dGlvbiI6ICJUeXBlcyBmb3IgcmVxdWVzdGVkIHZhcmlhYmxlLiIgfQorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAidHlwZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtIjogeyAiJHJlZiI6ICJU
eXBlRGVzY3JpcHRpb24iLCAiZGVzY3JpcHRpb24iOiAiVHlwZXMgZm9yIHJlcXVlc3RlZCB2YXJp
YWJsZS4iIH0gfQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJS
ZXR1cm5zIGRldGFpbGVkIGluZm9ybXRhdGlvbiBvbiBnaXZlbiBmdW5jdGlvbi4iCiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CShyZXZpc2lvbiAxNzEyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkJ5
dGVjb2RlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZH
RHJpdmVyLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVk
ZSAiSklULmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgpAQCAtMTAzLDYgKzEwNCw4IEBAIFNjcmlwdEV4ZWN1dGFibGU6OlNjcmlwdEV4ZWN1
dGFibGUoU3RydWMKICAgICAsIG1fbGFzdExpbmUoLTEpCiAgICAgLCBtX3N0YXJ0Q29sdW1uKFVJ
TlRfTUFYKQogICAgICwgbV9lbmRDb2x1bW4oVUlOVF9NQVgpCisgICAgLCBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldChVSU5UX01BWCkKKyAgICAsIG1faGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGluZ0VuZE9mZnNldChVSU5UX01BWCkKIHsKIH0KIApAQCAtMzc5LDYgKzM4Miwx
MCBAQCBjb25zdCBDbGFzc0luZm8gUHJvZ3JhbUV4ZWN1dGFibGU6OnNfaW5mCiBQcm9ncmFtRXhl
Y3V0YWJsZTo6UHJvZ3JhbUV4ZWN1dGFibGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2UpCiAgICAgOiBTY3JpcHRFeGVjdXRhYmxlKGV4ZWMtPnZtKCkucHJvZ3JhbUV4
ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIGV4ZWMtPnZtKCksIHNvdXJjZSwgZmFsc2UpCiB7Cisg
ICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSAwOworICAgIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHNvdXJjZS5sZW5ndGgoKSAtIDE7Cisg
ICAgaWYgKGV4ZWMtPnZtKCkuaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAg
ICAgICAgZXhlYy0+dm0oKS5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShzb3VyY2VJRCgpLCBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCwgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRW5kT2Zmc2V0KTsKIH0KIAogdm9pZCBQcm9ncmFtRXhlY3V0YWJsZTo6ZGVzdHJveShKU0Nl
bGwqIGNlbGwpCkBAIC00MDIsNiArNDA5LDggQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlv
bkV4ZWN1dGFibGUoVgogICAgIEFTU0VSVChlbmRDb2x1bW4gIT0gVUlOVF9NQVgpOwogICAgIG1f
c3RhcnRDb2x1bW4gPSBzdGFydENvbHVtbjsKICAgICBtX2VuZENvbHVtbiA9IGVuZENvbHVtbjsK
KyAgICBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCA9IHVubGlua2VkRXhl
Y3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCk7CisgICAgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT5o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7CiB9CiAKIHZvaWQgRnVuY3Rpb25F
eGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKQEAgLTUwMCw2ICs1MDksMTAgQEAgSlNP
YmplY3QqIFByb2dyYW1FeGVjdXRhYmxlOjppbml0aWFsaXplRwogICAgICAgICBVbmxpbmtlZEZ1
bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUgPSBmdW5jdGlvbkRl
Y2xhcmF0aW9uc1tpXS5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5saW5rKHZtLCBt
X3NvdXJjZSwgbGluZU5vKCkpLCBzY29wZSk7CiAgICAgICAgIGdsb2JhbE9iamVjdC0+YWRkRnVu
Y3Rpb24oY2FsbEZyYW1lLCBmdW5jdGlvbkRlY2xhcmF0aW9uc1tpXS5maXJzdCwgdmFsdWUpOwor
ICAgICAgICBpZiAodm0uaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAg
ICAgICAgIHZtLmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVk
Q2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKHNvdXJjZUlEKCksIAorICAgICAgICAgICAg
ICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5n
U3RhcnRPZmZzZXQoKSwgCisgICAgICAgICAgICAgICAgdW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFi
bGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YXJpYWJsZURlY2xhcmF0aW9ucy5zaXplKCk7ICsraSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2
aXNpb24gMTcxMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjUsNiArMzY1LDggQEAgcHVibGljOgogICAgIGludCBs
YXN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdExpbmU7IH0KICAgICB1bnNpZ25lZCBzdGFy
dENvbHVtbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRDb2x1bW47IH0KICAgICB1bnNpZ25lZCBl
bmRDb2x1bW4oKSBjb25zdCB7IHJldHVybiBtX2VuZENvbHVtbjsgfQorICAgIHVuc2lnbmVkIGhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OyB9CisgICAgdW5zaWduZWQgaGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1faGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQogCiAgICAgYm9vbCB1c2VzRXZhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBFdmFsRmVhdHVyZTsgfQogICAgIGJvb2wgdXNlc0FyZ3Vt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fZmVhdHVyZXMgJiBBcmd1bWVudHNGZWF0dXJlOyB9CkBA
IC00MzUsNiArNDM3LDggQEAgcHJvdGVjdGVkOgogICAgIGludCBtX2xhc3RMaW5lOwogICAgIHVu
c2lnbmVkIG1fc3RhcnRDb2x1bW47CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CisgICAgdW5z
aWduZWQgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWdu
ZWQgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OwogfTsKIAogY2xhc3MgRXZh
bEV4ZWN1dGFibGUgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9G
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitib29sIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6aGFzRXhlY3V0
ZWRBdE9mZnNldChpbnRwdHJfdCBpZCwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGlmIChtX3Jh
bmdlTWFwLmZpbmQoaWQpID09IG1fcmFuZ2VNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJhbmdlTWFwJiBtYXAgPSBtX3JhbmdlTWFwLmZpbmQoaWQpLT5zZWNvbmQ7Cisg
ICAgdW5zaWduZWQgZGlzdGFuY2UgPSBVSU5UX01BWDsKKyAgICBib29sIGhhc0V4ZWN1dGVkID0g
ZmFsc2U7CisgICAgZm9yIChhdXRvIGl0ZXIgPSBtYXAuYmVnaW4oKSwgZW5kID0gbWFwLmVuZCgp
OyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGNvbnN0IEZ1bmN0aW9uUmFuZ2UmIHJh
bmdlID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGlmIChyYW5nZS5tX3N0YXJ0IDw9IG9mZnNldCAm
JiBvZmZzZXQgPD0gcmFuZ2UubV9lbmQgJiYgcmFuZ2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0IDwg
ZGlzdGFuY2UpIHsKKyAgICAgICAgICAgIGhhc0V4ZWN1dGVkID0gaXRlci0+c2Vjb25kOworICAg
ICAgICAgICAgZGlzdGFuY2UgPSByYW5nZS5tX2VuZCAtIHJhbmdlLm1fc3RhcnQ7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gaGFzRXhlY3V0ZWQ7Cit9CisKK3ZvaWQgRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlOjppbnNlcnRVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQsIHVuc2ln
bmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpIAoreworICAgIGlmIChtX3JhbmdlTWFwLmZpbmQoaWQp
ID09IG1fcmFuZ2VNYXAuZW5kKCkpIHsKKyAgICAgICAgUmFuZ2VNYXAgbWFwOworICAgICAgICBt
X3JhbmdlTWFwW2lkXSA9IG1hcDsKKyAgICB9CisKKyAgICBSYW5nZU1hcCYgbWFwID0gbV9yYW5n
ZU1hcC5maW5kKGlkKS0+c2Vjb25kOworICAgIEZ1bmN0aW9uUmFuZ2UgcmFuZ2U7CisgICAgcmFu
Z2UubV9zdGFydCA9IHN0YXJ0OworICAgIHJhbmdlLm1fZW5kID0gZW5kOworICAgIC8vIE9ubHkg
aW5zZXJ0IHVuZXhlY3V0ZWQgcmFuZ2VzIG9uY2UgZm9yIGEgZ2l2ZW4gc291cmNlSUQgYmVjYXVz
ZSB3ZSBtYXkgcnVuIGludG8gYSBzaXR1YXRpb24gd2hlcmUgYW4gZXhlY3V0YWJsZSBleGVjdXRl
cywgdGhlbiBpcyBHQ2VkLCBhbmQgdGhlbiBpcyBhbGxvY2F0ZWQgYWdhaW4sCisgICAgLy8gYW5k
IHRyaWVzIHRvIHJlaW5zZXJ0IGl0c2VsZiwgY2xhaW1pbmcgaXQgaGFzIG5ldmVyIHJ1biwgYnV0
IHRoaXMgaXMgZmFsc2UgYmVjYXVzZSBpdCBpbmRlZWQgYWxyZWFkeSBleGVjdXRlZC4KKyAgICBp
ZiAobWFwLmZpbmQocmFuZ2UpID09IG1hcC5lbmQoKSkKKyAgICAgICAgbWFwW3JhbmdlXSA9IGZh
bHNlOworfQorCit2b2lkIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6cmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKQoreworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBpbnN0YW5jZSB3aGVyZSB3ZSByZXR1
cm4gaGVyZSwgYnV0IGN1cnJlbnRseSBkbyBpbiBzb21lIHNpdHVhdGlvbnMuIEZpbmQgb3V0IHdo
eS4KKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9PSBtX3JhbmdlTWFwLmVuZCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSYW5nZU1hcCYgbWFwID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+
c2Vjb25kOworCisgICAgRnVuY3Rpb25SYW5nZSByYW5nZTsKKyAgICByYW5nZS5tX3N0YXJ0ID0g
c3RhcnQ7CisgICAgcmFuZ2UubV9lbmQgPSBlbmQ7CisgICAgbWFwW3JhbmdlXSA9IHRydWU7Cit9
CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGVfaAorI2RlZmluZSBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGVfaAorCisjaW5jbHVkZSA8dW5v
cmRlcmVkX21hcD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1ldGhvZC5oPgorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlIHsKK3B1YmxpYzoKKyAgICBzdHJ1
Y3QgRnVuY3Rpb25SYW5nZSB7CisgICAgICAgIEZ1bmN0aW9uUmFuZ2UoKSB7fQorICAgICAgICB1
bnNpZ25lZCBtX3N0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX2VuZDsKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IEZ1bmN0aW9uUmFuZ2UmIG90aGVyKSBjb25zdCAKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9PSBv
dGhlci5tX2VuZDsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgKiBtX2VuZDsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBib29sIGhhc0V4ZWN1dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2ln
bmVkIG9mZnNldCk7CisgICAgdm9pZCBpbnNlcnRVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOworICAgIHZvaWQgcmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKworcHJp
dmF0ZTogICAgIAorICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEZ1bmN0aW9uUmFuZ2Us
IGJvb2wsIEhhc2hNZXRob2Q8RnVuY3Rpb25SYW5nZT4+IFJhbmdlTWFwOworICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPGludHB0cl90LCBSYW5nZU1hcD4gU291cmNlSURUb1JhbmdlTWFw
OworICAgIFNvdXJjZUlEVG9SYW5nZU1hcCBtX3JhbmdlTWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGVfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShy
ZXZpc2lvbiAxNzEyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw0NSArNTMsMjUgQEAgSGlnaEZpZGVs
aXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9
CiAKLXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5
bmNocm9ub3VzbHksIFN0cmluZyByZWFzb24pCit2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vz
c0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KICAgICBpZiAoIW1f
Y3VycmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAotICAgIEJ5dGVT
cGluTG9ja2VyKiBsb2NrZXIgPSBuZXcgQnl0ZVNwaW5Mb2NrZXIobV9sb2NrKTsKLSAgICBUaHJl
YWREYXRhKiBkYXRhID0gbmV3IFRocmVhZERhdGE7Ci0gICAgZGF0YS0+bV9wcm9jY2Vzc0xvZ1Rv
T2Zmc2V0ID0gbV9jdXJyZW50T2Zmc2V0OwotICAgIGRhdGEtPm1fcHJvY2Vzc0xvZ1B0ciA9IG1f
bG9nU3RhcnRQdHI7Ci0gICAgZGF0YS0+bV9sb2NrZXIgPSBsb2NrZXI7Ci0KLSAgICBtX2N1cnJl
bnRPZmZzZXQgPSAwOwotICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25leHRCdWZmZXIp
OwotICAgIAotICAgIGlmIChhc3luY2hyb25vdXNseSkKLSAgICAgICAgY3JlYXRlVGhyZWFkKGFj
dHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hpZ2hGaWRlbGl0
eUxvZyIpOwotICAgIGVsc2UgCi0gICAgICAgIGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0
aW9uKGRhdGEpOwotfQotCi12b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9n
VGhyZWFkRnVuY3Rpb24odm9pZCogYXJnKQotewogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50
VGltZU1TKCk7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEq
PihhcmcpOwotICAgIExvZ0VudHJ5KiBlbnRyeSA9IGRhdGEtPm1fcHJvY2Vzc0xvZ1B0cjsKKyAg
ICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJl
SUQsIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IHByb2Nl
c3NMb2dUb09mZnNldCA9IGRhdGEtPm1fcHJvY2Nlc3NMb2dUb09mZnNldDsgCiAgICAgc2l6ZV90
IGkgPSAwOwotICAgIHdoaWxlIChpIDwgcHJvY2Vzc0xvZ1RvT2Zmc2V0KSB7CisgICAgd2hpbGUg
KGkgPCBtX2N1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+
c3RydWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAogICAg
ICAgICBpZiAoaWQpIHsKICAgICAgICAgICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChp
ZCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBzZWVuU2hhcGVzLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgc2hhcGUgPSBlbnRyeS0+dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50b1N0
cnVjdHVyZVNoYXBlKCk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBlbnRyeS0+dmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpLT50b1N0cnVjdHVyZVNoYXBlKGVudHJ5LT52YWx1ZSk7CiAgICAg
ICAgICAgICAgICAgc2VlblNoYXBlcy5zZXQoaWQsIHNoYXBlKTsKICAgICAgICAgICAgIH0gZWxz
ZSAKICAgICAgICAgICAgICAgICBzaGFwZSA9IGl0ZXItPnZhbHVlOwpAQCAtMTA1LDExICs4NSwx
MiBAQCB2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9nCiAgICAgICAgIGkr
KzsKICAgICB9CiAKLSAgICBkZWxldGUgZGF0YS0+bV9sb2NrZXI7Ci0gICAgZGVsZXRlIGRhdGE7
Ci0gICAgZG91YmxlIGFmdGVyID0gY3VycmVudFRpbWVNUygpOwotICAgIGlmICh2ZXJib3NlKQor
ICAgIG1fY3VycmVudE9mZnNldCA9IDA7CisKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBk
b3VibGUgYWZ0ZXIgPSBjdXJyZW50VGltZU1TKCk7CiAgICAgICAgIGRhdGFMb2dGKCIgUHJvY2Vz
c2luZyB0aGUgbG9nIHRvb2s6ICclZicgbXNcbiIsIGFmdGVyIC0gYmVmb3JlKTsKKyAgICB9CiB9
CiAKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9IaWdoRmlkZWxpdHlMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IaWdoRmlkZWxpdHlMb2cuaAkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDE0ICs2OSwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIG1fY3VycmVudE9mZnNldCAr
PSAxOwogICAgICAgICBpZiAobV9jdXJyZW50T2Zmc2V0ID09IG1faGlnaEZpZGVsaXR5TG9nU2l6
ZSkKLSAgICAgICAgICAgIHByb2Nlc3NIaWdoRmlkZWxpdHlMb2codHJ1ZSwgIkxvZyBGdWxsIik7
CisgICAgICAgICAgICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKCJMb2cgRnVsbCIpOwogICAgIH0K
IAotICAgIHZvaWQgcHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZyhib29sIGFzeW5jaHJvbm91c2x5ID0g
ZmFsc2UsIFN0cmluZyA9ICIiKTsKKyAgICB2b2lkIHByb2Nlc3NIaWdoRmlkZWxpdHlMb2coU3Ry
aW5nKTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVIaWdoRmlkZWxpdHlMb2coKTsK
LSAgICBzdGF0aWMgdm9pZCBhY3R1YWxseVByb2Nlc3NMb2dUaHJlYWRGdW5jdGlvbih2b2lkKik7
CiAKICAgICB1bnNpZ25lZCBtX2hpZ2hGaWRlbGl0eUxvZ1NpemU7CiAgICAgc2l6ZV90IG1fY3Vy
cmVudE9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRl
bGl0eVR5cGVQcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTcxMjU5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzIgKzI2LDExNCBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogCisjaW5jbHVkZSAi
SW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAot
U3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUluQXRP
ZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJf
dCBzb3VyY2VJRCkKK3ZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpsb2dUeXBlc0ZvclR5
cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQogewotICAgIFN0cmluZyBnbG9iYWwg
PSBnZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQoZGl2b3QsIHZhcmlhYmxlTmFtZSwg
c291cmNlSUQpOwotICAgIGlmICghZ2xvYmFsLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbDsKLSAgICAKLSAgICByZXR1cm4gZ2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQo
ZGl2b3QsIHZhcmlhYmxlTmFtZSwgc291cmNlSUQpOworICAgIFR5cGVQcm9maWxlclNlYXJjaERl
c2NyaXB0b3IgZGVzY3JpcHRvciA9IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGln
aEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1
bmN0aW9uUmV0dXJuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0
ZW1lbnQgPyBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvck5vcm1hbDsKKworICAgIGRhdGFMb2dGKCJbU3RhcnQsIEVuZF06OlsldSwg
JXVdXG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7CisK
KyAgICBpZiAoZmluZExvY2F0aW9uKGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5t
X3NvdXJjZUlELCBkZXNjcmlwdG9yKSkKKyAgICAgICAgZGF0YUxvZygiXHRcdFtFbnRyeSBJUyBp
biBTeXN0ZW1dXG4iKTsKKyAgICBlbHNlCisgICAgICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMg
Tk9UIGluIHN5c3RlbV1cbiIpOworCisgICAgZGF0YUxvZygiXHRcdCIsIGxvY2F0aW9uLT5tX2ds
b2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID8gIltSZXR1cm4g
U3RhdGVtZW50XSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhp
c1N0YXRlbWVudCA/ICJbVGhpcyBTdGF0ZW1lbnRdIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIltOb3JtYWwgU3RhdGVtZW50XSIsICJcbiIp
OworCisgICAgZGF0YUxvZygiXHRcdCNMb2NhbCNcblx0XHQiLCBsb2NhdGlvbi0+bV9pbnN0cnVj
dGlvblR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwgIlxuXHRcdCIpLCAiXG4iKTsK
KyAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldCkKKyAgICAgICAgZGF0YUxvZygiXHRc
dCNHbG9iYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+c2VlblR5cGVzKCku
cmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOwogfQogCi1TdHJpbmcgSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyOjpnZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQg
ZGl2b3QsIGNvbnN0IFN0cmluZyYgLCBpbnRwdHJfdCBzb3VyY2VJRCkKK3ZvaWQgSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyOjppbnNlcnROZXdMb2NhdGlvbihUeXBlTG9jYXRpb24qIGxvY2F0aW9u
KQogewotICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBmaW5kTG9jYXRpb24oZGl2b3QsIHNv
dXJjZUlEKTsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gICIiOworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nRigiUmVnaXN0ZXJpbmcgbG9jYXRpb246OiBkaXZv
dFN0YXJ0OiV1LCBkaXZvdEVuZDoldVxuIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRp
b24tPm1fZGl2b3RFbmQpOwogCi0gICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQg
PT0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0cykKLSAgICAgICAgcmV0dXJuICIiOworICAg
IGlmICghbV9idWNrZXRNYXAuY29udGFpbnMobG9jYXRpb24tPm1fc291cmNlSUQpKSB7CisgICAg
ICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiBidWNrZXQ7CisgICAgICAgIG1fYnVja2V0TWFwLnNl
dChsb2NhdGlvbi0+bV9zb3VyY2VJRCwgYnVja2V0KTsKKyAgICB9CiAKLSAgICByZXR1cm4gbG9j
YXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+c2VlblR5cGVzKCk7CisgICAgVmVjdG9yPFR5cGVMb2Nh
dGlvbio+JiBidWNrZXQgPSBtX2J1Y2tldE1hcC5maW5kKGxvY2F0aW9uLT5tX3NvdXJjZUlEKS0+
dmFsdWU7CisgICAgYnVja2V0LmFwcGVuZChsb2NhdGlvbik7CiB9CiAKLVN0cmluZyBIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI6OmdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2ln
bmVkIGRpdm90LCBjb25zdCBTdHJpbmcmICwgaW50cHRyX3Qgc291cmNlSUQpCit2b2lkIEhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0Rm9ySW5zcGVj
dG9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgdW5zaWduZWQgZGl2
b3QsIGludHB0cl90IHNvdXJjZUlELCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+
JiByZXQpCiB7Ci0gICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZv
dCwgc291cmNlSUQpOworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBmaW5kTG9jYXRpb24o
ZGl2b3QsIHNvdXJjZUlELCBkZXNjcmlwdG9yKTsKICAgICBpZiAoIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm4gICIiOworICAgICAgICByZXR1cm47CiAKLSAgICByZXR1cm4gbG9jYXRpb24tPm1f
aW5zdHJ1Y3Rpb25UeXBlU2V0LT5zZWVuVHlwZXMoKTsKKyAgICBpZiAobG9jYXRpb24tPm1fZ2xv
YmFsVHlwZVNldCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0
eU5vR2xvYmFsSURFeGlzdHMpIHsKKyAgICAgICAgcmV0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFs
KCJkaXNwbGF5VHlwZU5hbWUiKSwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+ZGlzcGxheU5h
bWUoKSk7CisgICAgICAgIHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJsZWFzdFVwcGVyQm91
bmQiKSwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+bGVhc3RVcHBlckJvdW5kKCktPmFzQXJy
YXkoKSk7CisgICAgICAgIHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJnbG9iYWxQcmltaXRp
dmVUeXBlTmFtZXMiKSwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsUHJpbWl0aXZlVHlw
ZU5hbWVzKCktPmFzQXJyYXkoKSk7CisgICAgICAgIHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJnbG9iYWxPYmplY3RUeXBlTmFtZXMiKSwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxs
T2JqZWN0VHlwZU5hbWVzKCktPmFzQXJyYXkoKSk7CisgICAgICAgIHJldC0+c2V0QXJyYXkoQVND
SUlMaXRlcmFsKCJnbG9iYWxTdHJ1Y3R1cmVzIiksIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQt
PmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpLT5hc0FycmF5KCkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIHJldC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGlzcGxheVR5cGVOYW1lIiks
IGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7CisgICAgICAg
IHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJsZWFzdFVwcGVyQm91bmQiKSwgIGxvY2F0aW9u
LT5tX2luc3RydWN0aW9uVHlwZVNldC0+bGVhc3RVcHBlckJvdW5kKCktPmFzQXJyYXkoKSk7Cisg
ICAgfQorCisgICAgcmV0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImxvY2FsUHJpbWl0aXZlVHlw
ZU5hbWVzIiksIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxsUHJpbWl0aXZlVHlw
ZU5hbWVzKCktPmFzQXJyYXkoKSk7CisgICAgcmV0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImxv
Y2FsT2JqZWN0VHlwZU5hbWVzIiksIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlwZVNldC0+YWxs
T2JqZWN0VHlwZU5hbWVzKCktPmFzQXJyYXkoKSk7CisgICAgcmV0LT5zZXRBcnJheShBU0NJSUxp
dGVyYWwoImxvY2FsU3RydWN0dXJlcyIpLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVTZXQt
PmFsbFN0cnVjdHVyZVJlcHJlc2VudGF0aW9ucygpLT5hc0FycmF5KCkpOwogfQogCi12b2lkIEhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6aW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKiBs
b2NhdGlvbikKK3N0YXRpYyBib29sIGRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvciwgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
bikKIHsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgZGF0YUxvZ0YoIlJlZ2lzdGVyaW5nIGxv
Y2F0aW9uOjogZGl2b3RTdGFydDoldSwgZGl2b3RFbmQ6JXVcbiIsIGxvY2F0aW9uLT5tX2Rpdm90
U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5kKTsKKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gJiYgbG9jYXRpb24tPm1fZ2xv
YmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQpICAKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fYnVja2V0TWFwLmNvbnRhaW5zKGxvY2F0aW9uLT5t
X3NvdXJjZUlEKSkgewotICAgICAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4gYnVja2V0OwotICAg
ICAgICBtX2J1Y2tldE1hcC5zZXQobG9jYXRpb24tPm1fc291cmNlSUQsIGJ1Y2tldCk7Ci0gICAg
fQorICAgIGlmIChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JUaGlz
U3RhdGVtZW50ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5
VGhpc1N0YXRlbWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFZlY3RvcjxUeXBl
TG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAuZmluZChsb2NhdGlvbi0+bV9zb3VyY2VJ
RCktPnZhbHVlOwotICAgIGJ1Y2tldC5hcHBlbmQobG9jYXRpb24pOworICAgIGlmIChkZXNjcmlw
dG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwgJiYgbG9jYXRpb24tPm1f
Z2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlSZXR1cm5TdGF0ZW1lbnQgJiYgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50KSAgCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1UeXBlTG9jYXRp
b24qIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90
LCBpbnRwdHJfdCBzb3VyY2VJRCkKK1R5cGVMb2NhdGlvbiogSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyOjpmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBUeXBl
UHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpCiB7Ci0gICAgQVNTRVJUKG1fYnVj
a2V0TWFwLmNvbnRhaW5zKHNvdXJjZUlEKSk7IAorICAgIFF1ZXJ5S2V5IHF1ZXJ5S2V5KHNvdXJj
ZUlELCBkaXZvdCk7CisgICAgYXV0byBpdGVyID0gbV9xdWVyeUNhY2hlLmZpbmQocXVlcnlLZXkp
OworICAgIGlmIChpdGVyICE9IG1fcXVlcnlDYWNoZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0
ZXItPnZhbHVlOworCisgICAgaWYgKCFtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oYXNFeGVj
dXRlZEF0T2Zmc2V0KHNvdXJjZUlELCBkaXZvdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVNTRVJUKG1fYnVja2V0TWFwLmNvbnRhaW5zKHNvdXJjZUlEKSk7CiAKICAgICBWZWN0
b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0TWFwLmZpbmQoc291cmNlSUQpLT52
YWx1ZTsKLSAgICB1bnNpZ25lZCBkaXN0YW5jZSA9IFVJTlRfTUFYOyAvLyBCZWNhdXNlIGFzc2ln
bm1lbnRzIG1heSBiZSBuZXN0ZWQsIG1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSBjbG9zZXN0IGVuY2xv
c2luZyBhc3NpZ25tZW50IHRvIHRoaXMgY2hhcmFjdGVyIG9mZnNldC4KICAgICBUeXBlTG9jYXRp
b24qIGJlc3RNYXRjaCA9IG51bGxwdHI7CisgICAgdW5zaWduZWQgZGlzdGFuY2UgPSBVSU5UX01B
WDsgLy8gQmVjYXVzZSBhc3NpZ25tZW50cyBtYXkgYmUgbmVzdGVkLCBtYWtlIHN1cmUgd2UgZmlu
ZCB0aGUgY2xvc2VzdCBlbmNsb3NpbmcgYXNzaWdubWVudCB0byB0aGlzIGNoYXJhY3RlciBvZmZz
ZXQuCiAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBidWNrZXQuc2l6ZSgpOyBpIDwgc2l6
ZTsgaSsrKSB7CiAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBidWNrZXQuYXQoaSk7
Ci0gICAgICAgIGlmIChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpdm90ICYmIGRpdm90IDw9
IGxvY2F0aW9uLT5tX2Rpdm90RW5kICYmIGxvY2F0aW9uLT5tX2Rpdm90RW5kIC0gbG9jYXRpb24t
Pm1fZGl2b3RTdGFydCA8PSBkaXN0YW5jZSkgeworICAgICAgICBpZiAoZGVzY3JpcHRvciA9PSBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yRnVuY3Rpb25SZXR1cm4gJiYgZGVzY3JpcHRvck1h
dGNoZXNUeXBlTG9jYXRpb24oZGVzY3JpcHRvciwgbG9jYXRpb24pICYmIGxvY2F0aW9uLT5tX2Rp
dm90Rm9yRnVuY3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9PSBkaXZvdCkKKyAgICAgICAg
ICAgIHJldHVybiBsb2NhdGlvbjsKKworICAgICAgICBpZiAobG9jYXRpb24tPm1fZGl2b3RTdGFy
dCA8PSBkaXZvdCAmJiBkaXZvdCA8PSBsb2NhdGlvbi0+bV9kaXZvdEVuZCAmJiBsb2NhdGlvbi0+
bV9kaXZvdEVuZCAtIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPD0gZGlzdGFuY2UgJiYgZGVzY3Jp
cHRvck1hdGNoZXNUeXBlTG9jYXRpb24oZGVzY3JpcHRvciwgbG9jYXRpb24pKSB7CiAgICAgICAg
ICAgICBkaXN0YW5jZSA9IGxvY2F0aW9uLT5tX2Rpdm90RW5kIC0gbG9jYXRpb24tPm1fZGl2b3RT
dGFydDsKICAgICAgICAgICAgIGJlc3RNYXRjaCA9IGxvY2F0aW9uOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gRklYTUU6IEJlc3RNYXRjaCBzaG91bGQgbmV2ZXIgYmUgbnVsbC4gVGhpcyBk
b2Vzbid0IGhvbGQgY3VycmVudGx5IGJlY2F1c2Ugd2UgaWdub3JlIHNvbWUgRXZhbC9XaXRoL1Zh
ckluamVjdGlvbiB2YXJpYWJsZSBhc3NpZ25tZW50cy4KKyAgICBpZiAoYmVzdE1hdGNoKQorICAg
ICAgICBtX3F1ZXJ5Q2FjaGUuc2V0KHF1ZXJ5S2V5LCBiZXN0TWF0Y2gpOworICAgIC8vIEZJWE1F
OiBCZXN0TWF0Y2ggc2hvdWxkIG5ldmVyIGJlIG51bGwgcGFzdCB0aGlzIHBvaW50LiBUaGlzIGRv
ZXNuJ3QgaG9sZCBjdXJyZW50bHkgYmVjYXVzZSB3ZSBpZ25vcmUgc29tZSBFdmFsL1dpdGgvVmFy
SW5qZWN0aW9uIHZhcmlhYmxlIGFzc2lnbm1lbnRzLgogICAgIHJldHVybiBiZXN0TWF0Y2g7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQ
cm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCShyZXZpc2lvbiAxNzEyNTkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsMzEgKzI3LDkzIEBACiAjZGVmaW5lIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cl9oCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKLSNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgor
I2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgorI2luY2x1ZGUgIlR5cGVMb2Nh
dGlvbkNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFz
aE1ldGhvZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIEluc3BlY3RvciB7IG5hbWVzcGFjZSBUeXBlQnVpbGRl
ciAgeyBuYW1lc3BhY2UgUnVudGltZSB7CitjbGFzcyBUeXBlRGVzY3JpcHRpb247Cit9fX0KK25h
bWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgSW5zcGVjdG9yT2JqZWN0OworfQorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY2xhc3MgVHlwZUxvY2F0aW9uOwogCi1jbGFzcyBIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIgeworc3RydWN0IFF1ZXJ5S2V5IHsKKyAgICBRdWVyeUtleSgpCisgICAgICAgIDog
bV9zb3VyY2VJRCgwKQorICAgICAgICAsIG1fZGl2b3QoMCkKKyAgICB7IH0KKworICAgIFF1ZXJ5
S2V5KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBkaXZvdCkKKyAgICAgICAgOiBtX3NvdXJj
ZUlEKHNvdXJjZUlEKQorICAgICAgICAsIG1fZGl2b3QoZGl2b3QpCisgICAgeyB9CisKKyAgICBR
dWVyeUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9zb3Vy
Y2VJRChJTlRQVFJfTUFYKQorICAgICAgICAsIG1fZGl2b3QoVUlOVF9NQVgpCisgICAgeyB9CisK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zb3Vy
Y2VJRCA9PSBJTlRQVFJfTUFYICYmIG1fZGl2b3QgPT0gVUlOVF9NQVg7IH0KKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUXVlcnlLZXkmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlE
ID09IG90aGVyLm1fc291cmNlSUQgJiYgbV9kaXZvdCA9PSBvdGhlci5tX2Rpdm90OyB9CisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlSUQgKyBtX2Rpdm90OyB9CisK
KyAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOworICAgIHVuc2lnbmVkIG1fZGl2b3Q7Cit9OworCitz
dHJ1Y3QgUXVlcnlLZXlIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBRdWVy
eUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgUXVlcnlLZXkmIGEsIGNvbnN0IFF1ZXJ5S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0K
KyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7Cit9OworCit9IC8vbmFtZXNwYWNlIEpTQworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SlNDOjpRdWVyeUtleT4geworICAgIHR5cGVkZWYgSlNDOjpRdWVyeUtleUhhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OlF1ZXJ5S2V5PiA6IFNpbXBsZUNsYXNzSGFz
aFRyYWl0czxKU0M6OlF1ZXJ5S2V5PiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1l
c3BhY2UgSlNDIHsKIAorZW51bSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIHsKKyAgICBU
eXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsID0gMSwKKyAgICBUeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCA9IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNo
RGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuID0gMworfTsKKworY2xhc3MgSGlnaEZpZGVsaXR5VHlw
ZVByb2ZpbGVyIHsKIHB1YmxpYzoKLSAgICBTdHJpbmcgZ2V0VHlwZXNGb3JWYXJpYWJsZUluQXRP
ZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJf
dCBzb3VyY2VJRCk7Ci0gICAgU3RyaW5nIGdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2YXJpYWJsZU5hbWUsIGludHB0cl90IHNv
dXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQodW5z
aWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJ
RCk7CisgICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVMb2NhdGlvbihUeXBlTG9jYXRpb24qKTsKKyAg
ICB2b2lkIGdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBz
b3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYpOwogICAgIHZvaWQg
aW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKik7CisgICAgRnVuY3Rpb25IYXNFeGVjdXRl
ZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGU7IH0KKyAgICBUeXBlTG9jYXRpb25DYWNoZSogdHlwZUxvY2F0aW9uQ2Fj
aGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25DYWNoZTsgfQogICAgIAogcHJpdmF0ZToKLSAg
ICBUeXBlTG9jYXRpb24qIGZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291
cmNlSUQpOwotCisgICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3Qs
IGludHB0cl90IHNvdXJjZUlELCBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0
b3IpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRwdHJfdCwgVmVjdG9yPFR5cGVMb2NhdGlvbio+
PiBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXA7CiAgICAgU291cmNlSURUb0xvY2F0aW9uQnVj
a2V0TWFwIG1fYnVja2V0TWFwOworICAgIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZTsKKyAgICBUeXBlTG9jYXRpb25DYWNoZSBtX3R5cGVMb2NhdGlv
bkNhY2hlOworICAgIHR5cGVkZWYgSGFzaE1hcDxRdWVyeUtleSwgVHlwZUxvY2F0aW9uKj4gVHlw
ZUxvY2F0aW9uUXVlcnlDYWNoZTsKKyAgICBUeXBlTG9jYXRpb25RdWVyeUNhY2hlIG1fcXVlcnlD
YWNoZTsKIH07CiAKLX0gLy9uYW1lc3BhY2UgSlNDCit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA0OCwzNiArMTA0OCw3NiBAQCBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRl
cmNlCiAgICAgfQogfQogCi0KLVBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6
dG9TdHJ1Y3R1cmVTaGFwZSgpCitQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6
OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBWZWN0b3I8U3RydWN0dXJl
KiwgOD4gc3RydWN0dXJlczsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZTsKLSAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlID0gU3RydWN0
dXJlU2hhcGU6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBl
ID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
Y3VyU2hhcGUgPSBiYXNlU2hhcGU7CisgICAgU3RydWN0dXJlKiBjdXJTdHJ1Y3R1cmUgPSB0aGlz
OworICAgIEpTVmFsdWUgY3VyVmFsdWUgPSB2YWx1ZTsKKyAgICB3aGlsZSAoY3VyU3RydWN0dXJl
KSB7CisgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAgICAgUHJvcGVydHlUYWJsZSogdGFibGU7CisKKyAg
ICAgICAgY3VyU3RydWN0dXJlLT5maW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlv
bihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKKyAgICAgICAgaWYgKHRhYmxlKSB7Cisg
ICAgICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7
CisgICAgICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7
CisgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgICAgICAg
ICBjdXJTaGFwZS0+YWRkUHJvcGVydHkoaXRlci0+a2V5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgIH0KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3Ry
dWN0dXJlLCB0YWJsZSk7Ci0gICAgCi0gICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsKLSAgICAgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOworICAgICAgICAgICAgY3VyU2hhcGUt
PmFkZFByb3BlcnR5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSk7CisgICAgICAg
IH0KIAotICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgIHNo
YXBlLT5hZGRQcm9wZXJ0eShpdGVyLT5rZXkpOwotICAgICAgICAKLSAgICAgICAgc3RydWN0dXJl
LT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0
cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMp
Ci0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBmb3VuZEN0b3JOYW1lID0gZmFs
c2U7CisgICAgICAgIGlmIChKU09iamVjdCogcHJvZmlsaW5nVmFsID0gY3VyVmFsdWUuZ2V0T2Jq
ZWN0KCkpIHsKKyAgICAgICAgICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb2ZpbGluZ1ZhbC0+Z2xv
YmFsT2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
KHN0b3JlZFByb3RvdHlwZSgpKTsKKyAgICAgICAgICAgIFByb3BlcnR5TmFtZSBjb25zdHJ1Y3Rv
cihleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IpOworICAgICAgICAgICAgaWYgKHBy
b2ZpbGluZ1ZhbC0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGNvbnN0cnVjdG9yLCBzbG90KSkgewor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlzIGEgY3VzdG9tIHByb3BlcnR5IHNsb3Q/
CisgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEpTVmFsdWUgY29uc3RydWN0b3JWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3Ry
dWN0b3IpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JWYWx1ZS5pc0NlbGwo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTQ2VsbCogY29uc3RydWN0b3JDZWxs
ID0gY29uc3RydWN0b3JWYWx1ZS5hc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChKU09iamVjdCogY3Rvck9iamVjdCA9IGNvbnN0cnVjdG9yQ2VsbC0+Z2V0T2JqZWN0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEpTRnVuY3Rpb24qIGNv
bnN0cnVjdG9yRnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjdG9yT2JqZWN0
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyU2hhcGUtPnNldENv
bnN0cnVjdG9yTmFtZShjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUo
ZXhlYykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDdG9yTmFt
ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50
ZXJuYWxGdW5jdGlvbiogY29uc3RydWN0b3JGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJu
YWxGdW5jdGlvbio+KGN0b3JPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjdXJTaGFwZS0+c2V0Q29uc3RydWN0b3JOYW1lKGNvbnN0cnVjdG9yRnVuY3Rpb24t
PmNhbGN1bGF0ZWREaXNwbGF5TmFtZShleGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3VuZEN0b3JOYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogCi0gICAgICAgIHNoYXBlLT5hZGRQcm9wZXJ0eShzdHJ1
Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpOwotICAgIH0KKyAgICAgICAgaWYgKCFmb3Vu
ZEN0b3JOYW1lKQorICAgICAgICAgICAgY3VyU2hhcGUtPnNldENvbnN0cnVjdG9yTmFtZShjdXJT
dHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpOworCisgICAgICAgIGN1clNoYXBlLT5t
YXJrQXNGaW5hbCgpOworCisgICAgICAgIGlmIChjdXJTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlw
ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IG5ld1No
YXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOworICAgICAgICAgICAgY3VyU2hhcGUtPnNl
dFByb3RvKG5ld1NoYXBlKTsKKyAgICAgICAgICAgIGN1clNoYXBlID0gbmV3U2hhcGU7CisgICAg
ICAgICAgICBjdXJWYWx1ZSA9IGN1clN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCk7CisgICAg
ICAgIH0KIAotICAgIHNoYXBlLT5tYXJrQXNGaW5hbCgpOwotICAgIHJldHVybiBzaGFwZS5yZWxl
YXNlKCk7CisgICAgICAgIGN1clN0cnVjdHVyZSA9IGN1clN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlU3RydWN0dXJlKCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBiYXNlU2hhcGUucmVsZWFz
ZSgpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9u
IDE3MTI1OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOTAsNyArMzkwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgc3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOwog
ICAgIH0KIAotICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUo
KTsKKyAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKEpTVmFs
dWUpOwogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxv
Y2F0aW9uQ2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUeXBlTG9jYXRpb25DYWNoZS5oIgorCisjaW5jbHVkZSAiVk0uaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK3N0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBUeXBlTG9j
YXRpb25DYWNoZTo6Z2V0VHlwZUxvY2F0aW9uKGludDY0X3QgZ2xvYmFsVmFyaWFibGVJRCwgaW50
cHRyX3Qgc291cmNlSUQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFBhc3NSZWZQdHI8
VHlwZVNldD4gZ2xvYmFsVHlwZVNldCwgVk0qIHZtKQoreworICAgIExvY2F0aW9uS2V5IGtleTsK
KyAgICBrZXkubV9nbG9iYWxWYXJpYWJsZUlEID0gZ2xvYmFsVmFyaWFibGVJRDsKKyAgICBrZXku
bV9zb3VyY2VJRCA9IHNvdXJjZUlEOworICAgIGtleS5tX3N0YXJ0ID0gc3RhcnQ7CisgICAga2V5
Lm1fZW5kID0gZW5kOworCisgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gZmFsc2U7CisgICAgaWYg
KG1fbG9jYXRpb25NYXAuZmluZChrZXkpID09IG1fbG9jYXRpb25NYXAuZW5kKCkpIHsKKyAgICAg
ICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IHZtLT5uZXh0TG9jYXRpb24oKTsKKyAgICAgICAg
bG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IGdsb2JhbFZhcmlhYmxlSUQ7CisgICAgICAg
IGxvY2F0aW9uLT5tX3NvdXJjZUlEID0gc291cmNlSUQ7CisgICAgICAgIGxvY2F0aW9uLT5tX2Rp
dm90U3RhcnQgPSBzdGFydDsKKyAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RFbmQgPSBlbmQ7Cisg
ICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgPSBnbG9iYWxUeXBlU2V0OworCisgICAg
ICAgIG1fbG9jYXRpb25NYXBba2V5XSA9IGxvY2F0aW9uOworICAgICAgICBpc05ld0xvY2F0aW9u
ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbV9sb2NhdGlv
bk1hcC5maW5kKGtleSktPnNlY29uZDsKKyAgICByZXR1cm4gc3RkOjpwYWlyPFR5cGVMb2NhdGlv
biosIGJvb2w+KGxvY2F0aW9uLCBpc05ld0xvY2F0aW9uKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
SlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNo
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2Nh
dGlvbkNhY2hlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9UeXBlTG9jYXRpb25DYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFR5cGVM
b2NhdGlvbkNhY2hlX2gKKyNkZWZpbmUgVHlwZUxvY2F0aW9uQ2FjaGVfaAorCisjaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDx3dGYv
SGFzaE1ldGhvZC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk07CisKK2NsYXNzIFR5
cGVMb2NhdGlvbkNhY2hlIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgTG9jYXRpb25LZXkgeworICAg
ICAgICBMb2NhdGlvbktleSgpIHt9CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBMb2Nh
dGlvbktleSYgb3RoZXIpIGNvbnN0IAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9n
bG9iYWxWYXJpYWJsZUlEID09IG90aGVyLm1fZ2xvYmFsVmFyaWFibGVJRAorICAgICAgICAgICAg
ICAgICAgICYmIG1fc291cmNlSUQgPT0gb3RoZXIubV9zb3VyY2VJRAorICAgICAgICAgICAgICAg
ICAgICYmIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydAorICAgICAgICAgICAgICAgICAgICYmIG1f
ZW5kID09IG90aGVyLm1fZW5kOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsb2JhbFZhcmlhYmxlSUQg
KyBtX3NvdXJjZUlEICsgbV9zdGFydCArIG1fZW5kOworICAgICAgICB9CisKKyAgICAgICAgaW50
NjRfdCBtX2dsb2JhbFZhcmlhYmxlSUQ7CisgICAgICAgIGludHB0cl90IG1fc291cmNlSUQ7Cisg
ICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fZW5kOworICAgIH07
CisKKyAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gZ2V0VHlwZUxvY2F0aW9uKGlu
dDY0X3QsIGludHB0cl90LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBQYXNzUmVmUHRy
PFR5cGVTZXQ+LCBWTSopOworcHJpdmF0ZTogICAgIAorICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVy
ZWRfbWFwPExvY2F0aW9uS2V5LCBUeXBlTG9jYXRpb24qLCBIYXNoTWV0aG9kPExvY2F0aW9uS2V5
Pj4gTG9jYXRpb25NYXA7CisgICAgTG9jYXRpb25NYXAgbV9sb2NhdGlvbk1hcDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVHlwZUxvY2F0aW9uQ2FjaGVfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHJldmlzaW9uIDE3MTI1
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VHlwZVNldC5oIgogCisjaW5jbHVkZSAiSW5zcGVjdG9ySlNUeXBlQnVpbGRlcnMuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01OCw4ICs1OSw2IEBAIFJ1bnRpbWVUeXBlIFR5
cGVTZXQ6OmdldFJ1bnRpbWVUeXBlRm9yVmEKICAgICAgICAgcmV0ID0gVHlwZU51bWJlcjsKICAg
ICBlbHNlIGlmICh2LmlzU3RyaW5nKCkpCiAgICAgICAgIHJldCA9IFR5cGVTdHJpbmc7Ci0gICAg
ZWxzZSBpZiAodi5pc1ByaW1pdGl2ZSgpKQotICAgICAgICByZXQgPSBUeXBlUHJpbWl0aXZlOwog
ICAgIGVsc2UgaWYgKHYuaXNPYmplY3QoKSkKICAgICAgICAgcmV0ID0gVHlwZU9iamVjdDsKICAg
ICBlbHNlCkBAIC03Myw3ICs3Miw3IEBAIHZvaWQgVHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpT
VmFsdWUgdiwKICAgICBSdW50aW1lVHlwZSB0ID0gZ2V0UnVudGltZVR5cGVGb3JWYWx1ZSh2KTsK
ICAgICBtX3NlZW5UeXBlcyA9IG1fc2VlblR5cGVzIHwgdDsKIAotICAgIGlmIChpZCAmJiBzaGFw
ZSkgeworICAgIGlmIChpZCAmJiBzaGFwZSAmJiAhdi5pc1N0cmluZygpICYmICF2LmlzRnVuY3Rp
b24oKSkgewogICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmVJREhpc3RvcnkuaXNWYWxpZEtleShp
ZCkpOwogICAgICAgICBhdXRvIGl0ZXIgPSBtX3N0cnVjdHVyZUlESGlzdG9yeS5maW5kKGlkKTsK
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdHJ1Y3R1cmVJREhpc3RvcnkuZW5kKCkpIHsKQEAgLTk1
LDcgKzk0LDcgQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LAogICAg
IH0KIH0KIAotU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAorU3RyaW5nIFR5cGVTZXQ6OnNl
ZW5UeXBlcygpIGNvbnN0CiB7CiAgICAgaWYgKG1fc2VlblR5cGVzID09IFR5cGVOb3RoaW5nKQog
ICAgICAgICByZXR1cm4gIihVbnJlYWNoZWQgU3RhdGVtZW50KSI7CkBAIC0xMTYsOCArMTE1LDYg
QEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAogICAgICAgICAgc2Vlbi5hcHBlbmQoIk51
bWJlciAiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlU3RyaW5nKQogICAgICAgICAgc2Vl
bi5hcHBlbmQoIlN0cmluZyAiKTsKLSAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlUHJpbWl0aXZl
KQotICAgICAgICAgc2Vlbi5hcHBlbmQoIlByaW1pdGl2ZSAiKTsKICAgICBpZiAobV9zZWVuVHlw
ZXMgJiBUeXBlT2JqZWN0KQogICAgICAgICAgc2Vlbi5hcHBlbmQoIk9iamVjdCAiKTsKIApAQCAt
MTQwLDE5ICsxMzcsMTU1IEBAIFN0cmluZyBUeXBlU2V0OjpzZWVuVHlwZXMoKSAKIAogICAgIGlm
IChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSkgewogICAgICAgICBzZWVuLmFwcGVuZCgiXG5M
VUI6ICIpOwotICAgICAgICBzZWVuLmFwcGVuZChTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJv
dW5kKG1fc3RydWN0dXJlSGlzdG9yeSkpOworICAgICAgICBzZWVuLmFwcGVuZChTdHJ1Y3R1cmVT
aGFwZTo6bGVhc3RVcHBlckJvdW5kQXNTdHJpbmcobV9zdHJ1Y3R1cmVIaXN0b3J5KSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHNlZW4udG9TdHJpbmcoKTsKIH0KIAorYm9vbCBUeXBlU2V0Ojpkb2Vz
VHlwZUNvbmZvcm1Ubyh1aW50MzJfdCB0ZXN0KSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gY2hlY2tzIGlmIG91ciBzZWVuIHR5cGVzIGNvbmZvcm1zIHRvIHRoZSB0eXBlcyBkZXNjcmli
ZWQgYnkgdGhlIHRlc3QgYml0c3RyaW5nLiAKKyAgICAvLyBXZSBhcmUgPD0gdG8gdGhvc2UgdHlw
ZXMgaWYgQU5EaW5nIHdpdGggdGhlIGJpdHN0cmluZyBkb2Vzbid0IHplcm8gb3V0IGFueSBvZiBv
dXIgYml0cy4KKworICAgIC8vIEZvciBleGFtcGxlOgorICAgIC8vIDBiMDExMCAoc2VlbikKKyAg
ICAvLyAwYjExMTEgKHRlc3QpCisgICAgLy8gLS0tLS0tIChBTkQpCisgICAgLy8gMGIwMTEwID09
IHNlZW4KKworICAgIC8vIDBiMDExMCAoc2VlbikKKyAgICAvLyAwYjAwMTAgKHRlc3QpCisgICAg
Ly8gLS0tLS0tIChBTkQpCisgICAgLy8gMGIwMDEwICE9IHNlZW4KKworICAgIHJldHVybiAobV9z
ZWVuVHlwZXMgJiB0ZXN0KSA9PSBtX3NlZW5UeXBlczsKK30KKworU3RyaW5nIFR5cGVTZXQ6OmRp
c3BsYXlOYW1lKCkgY29uc3QKK3sKKyAgICBpZiAobV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmcp
CisgICAgICAgIHJldHVybiAiIjsKKworICAgIGlmIChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUo
KSkgeworICAgICAgICBIYXNoU2V0PFN0cmluZz4gY3Rvck5hbWVzOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUgPSBtX3N0cnVjdHVyZUhpc3Rvcnkt
PmF0KGkpOworICAgICAgICAgICAgaWYgKCFzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICAgICAgY3Rvck5hbWVzLmFkZChzaGFwZS0+bV9jb25zdHJ1Y3Rv
ck5hbWUpOworICAgICAgICAgICAgICAgIGlmIChjdG9yTmFtZXMuc2l6ZSgpID4gMSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoY3Rvck5hbWVzLnNpemUoKSA9PSAxICYmIGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVPYmpl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuICooY3Rvck5hbWVzLmJlZ2luKCkpOworICAgICAgICBl
bHNlIGlmIChjdG9yTmFtZXMuc2l6ZSgpID09IDEgJiYgZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9i
amVjdCB8IFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgICAgICByZXR1cm4gKihj
dG9yTmFtZXMuYmVnaW4oKSkgKyAiPyI7CisgICAgICAgIGVsc2UgaWYgKGRvZXNUeXBlQ29uZm9y
bVRvKFR5cGVPYmplY3QgfCBUeXBlRnVuY3Rpb24gfCBUeXBlU3RyaW5nKSkKKyAgICAgICAgICAg
IHJldHVybiAiT2JqZWN0IjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuICIobWFu
eSkiOworICAgIH0KKworICAgIC8vIFRoZSBvcmRlciBvZiB0aGVzZSBjaGVja3MgYXJlIGltcG9y
dGFudC4gRm9yIGV4YW1wbGUsIGlmIGEgdmFsdWUgaXMgb25seSBhIGZ1bmN0aW9uLCBpdCBjb25m
b3JtcyB0byBUeXBlRnVuY3Rpb24sIGJ1dCBpdCBhbHNvIGNvbmZvcm1zIHRvIFR5cGVGdW5jdGlv
biB8IFR5cGVOdWxsLgorICAgIC8vIFRoZXJlZm9yZSwgbW9yZSBzcGVjaWZpYyB0eXBlcyBtdXN0
IGJlIGNoZWNrZWQgZmlyc3QuCisKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUZ1bmN0
aW9uKSkKKyAgICAgICAgcmV0dXJuICJGdW5jdGlvbiI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9y
bVRvKFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIlVuZGVmaW5lZCI7CisgICAgaWYg
KGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdWxsKSkKKyAgICAgICAgcmV0dXJuICJOdWxsIjsKKyAg
ICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUJvb2xlYW4pKQorICAgICAgICByZXR1cm4gIkJv
b2xlYW4iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTWFjaGluZUludCkpCisgICAg
ICAgIHJldHVybiAiSW50ZWdlciI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1i
ZXIgfCBUeXBlTWFjaGluZUludCkpCisgICAgICAgIHJldHVybiAiTnVtYmVyIjsKKyAgICBpZiAo
ZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN0cmluZykpCisgICAgICAgIHJldHVybiAiU3RyaW5nIjsK
KworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQor
ICAgICAgICByZXR1cm4gIig/KSI7CisKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUZ1
bmN0aW9uIHwgVHlwZU51bGwgfCBUeXBlVW5kZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuICJGdW5j
dGlvbj8iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlQm9vbGVhbiB8IFR5cGVOdWxs
IHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiAiQm9vbGVhbj8iOworICAgIGlmIChk
b2VzVHlwZUNvbmZvcm1UbyhUeXBlTWFjaGluZUludCB8IFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5l
ZCkpCisgICAgICAgIHJldHVybiAiSW50ZWdlcj8iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1U
byhUeXBlTnVtYmVyIHwgVHlwZU1hY2hpbmVJbnQgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQp
KQorICAgICAgICByZXR1cm4gIk51bWJlcj8iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhU
eXBlU3RyaW5nIHwgVHlwZU51bGwgfCBUeXBlVW5kZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuICJT
dHJpbmc/IjsKKyAgIAorICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlT2JqZWN0IHwgVHlw
ZUZ1bmN0aW9uIHwgVHlwZVN0cmluZykpCisgICAgICAgIHJldHVybiAiT2JqZWN0IjsKKyAgICBp
ZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVjdCB8IFR5cGVGdW5jdGlvbiB8IFR5cGVTdHJp
bmcgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIk9iamVjdD8i
OworCisgICAgcmV0dXJuICIobWFueSkiOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5cGVTZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcygp
IGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUo
KTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlRnVuY3Rpb24pCisgICAgICAgICBzZWVuLT5h
ZGRJdGVtKCJGdW5jdGlvbiIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQp
CisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJVbmRlZmluZWQiKTsKKyAgICBpZiAobV9zZWVuVHlw
ZXMgJiBUeXBlTnVsbCkKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIk51bGwiKTsKKyAgICBpZiAo
bV9zZWVuVHlwZXMgJiBUeXBlQm9vbGVhbikKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkJvb2xl
YW4iKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTWFjaGluZUludCkKKyAgICAgICAgIHNl
ZW4tPmFkZEl0ZW0oIkludGVnZXIiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVtYmVy
KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiTnVtYmVyIik7CisgICAgaWYgKG1fc2VlblR5cGVz
ICYgVHlwZVN0cmluZykKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIlN0cmluZyIpOworCisgICAg
cmV0dXJuIHNlZW4ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5cGVTZXQ6OmFsbE9iamVjdFR5cGVOYW1lcygpIGNvbnN0
Cit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHNl
ZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSA9IG1fc3RydWN0dXJlSGlz
dG9yeS0+YXQoaSk7CisgICAgICAgIGlmICghc2hhcGUtPm1fY29uc3RydWN0b3JOYW1lLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHNlZW4tPmFkZEl0ZW0oc2hhcGUtPm1fY29uc3RydWN0b3JOYW1l
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiT2JqZWN0Iik7Cisg
ICAgfQorCisgICAgcmV0dXJuIHNlZW4ucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0
cmluZz4+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdAorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNwZWN0b3I6OlR5cGVC
dWlsZGVyOjpBcnJheTxTdHJpbmc+Pj4gcmV0ID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj46OmNyZWF0ZSgpOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsr
KQorICAgICAgICByZXQtPmFkZEl0ZW0obV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKS0+aW5zcGVj
dG9yUmVwcmVzZW50YXRpb24oKSk7CisKKyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBUeXBlU2V0
OjpsZWFzdFVwcGVyQm91bmQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFwZTo6
bGVhc3RVcHBlckJvdW5kKG1fc3RydWN0dXJlSGlzdG9yeSk7Cit9CisKIHZvaWQgVHlwZVNldDo6
ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVuVHlwZXMoKSwgIlxuIik7CiB9CiAK
IFN0cnVjdHVyZVNoYXBlOjpTdHJ1Y3R1cmVTaGFwZSgpCi0gICAgOiBtX3Byb3BlcnR5SGFzaChu
dWxscHRyKQorICAgIDogbV9wcm90byhudWxscHRyKQorICAgICwgbV9wcm9wZXJ0eUhhc2gobnVs
bHB0cikKICAgICAsIG1fZmluYWwoZmFsc2UpCiB7CiB9CkBAIC0xNjYsNyArMjk5LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVTaGFwZTo6bWFya0FzRmluYWwoKQogdm9pZCBTdHJ1Y3R1cmVTaGFwZTo6YWRk
UHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpCiB7CiAgICAgQVNTRVJUKCFtX2ZpbmFs
KTsKLSAgICBtX2ZpZWxkcy5zZXQoaW1wbCwgdHJ1ZSk7CisgICAgbV9maWVsZHMuYXBwZW5kKGlt
cGwpOwogfQogCiBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnByb3BlcnR5SGFzaCgpIApAQCAtMTc3
LDE3ICszMTAsNTEgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAKIAog
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOworICAg
IGlmICghbV9jb25zdHJ1Y3Rvck5hbWUuaXNFbXB0eSgpKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZChtX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
T2JqZWN0Iik7CisgICAgYnVpbGRlci5hcHBlbmQoIjoiKTsKICAgICBmb3IgKGF1dG8gaXRlciA9
IG1fZmllbGRzLmJlZ2luKCksIGVuZCA9IG1fZmllbGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7Ci0gICAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IFN0cmluZyhpdGVyLT5rZXkpOworICAg
ICAgICBTdHJpbmcgcHJvcGVydHkgPSBTdHJpbmcoKCppdGVyKSk7CiAgICAgICAgIHByb3BlcnR5
LnJlcGxhY2UoIjoiLCAiXFw6Iik7IC8vIEVuc3VyZSB0aGF0IGhhc2goeyJmb286IiwgImJhciJ9
KSAhPSBoYXNoKHsiZm9vIiwgIjpiYXIifSkgYmVjYXVzZSB3ZSdyZSB1c2luZyBjb2xvbnMgYXMg
YSBzZXBhcmF0b3IgYW5kIGNvbG9ucyBhcmUgbGVnYWwgY2hhcmFjdGVycyBpbiBmaWVsZCBuYW1l
cyBpbiBKUy4KICAgICAgICAgYnVpbGRlci5hcHBlbmQocHJvcGVydHkpOwogICAgIH0KKyAgICBp
ZiAobV9wcm90bykgeworICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOworICAgICAgICBidWls
ZGVyLmFwcGVuZCgiX19wcm90b19fIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fcHJvdG8t
PnByb3BlcnR5SGFzaCgpKTsKKyAgICB9CiAKICAgICBtX3Byb3BlcnR5SGFzaCA9IHN0ZDo6bWFr
ZV91bmlxdWU8U3RyaW5nPihidWlsZGVyLnRvU3RyaW5nKCkpOwogICAgIHJldHVybiAqbV9wcm9w
ZXJ0eUhhc2g7CiB9CiAKLVN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBlckJvdW5kKFZl
Y3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+Piogc2hhcGVzKQorUGFzc1JlZlB0cjxJbnNwZWN0
b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBTdHJ1Y3R1cmVTaGFwZTo6bGVhc3RVcHBl
ckJvdW5kKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+Piogc2hhcGVzKQorewor
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBsdWIgPSBJ
bnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKworICAgIGlm
ICghc2hhcGVzLT5zaXplKCkpCisgICAgICAgIHJldHVybiBsdWIucmVsZWFzZSgpOworCisgICAg
UmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBvcmlnaW4gPSBzaGFwZXMtPmF0KDApOworICAgIGZvciAo
YXV0byBpdGVyID0gb3JpZ2luLT5tX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBvcmlnaW4tPm1fZmll
bGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGJvb2wgc2hvdWxkQWRk
ID0gdHJ1ZTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDEsIHNpemUgPSBzaGFwZXMtPnNpemUo
KTsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgLy8gSWYgYWxsIG90aGVyIFNoYXBlcyBo
YXZlIHRoZSBzYW1lIGZpZWxkIGFzIG9yaWdpbiwgYWRkIGl0IHRvIHRoZSBsZWFzdCB1cHBlciBi
b3VuZC4KKyAgICAgICAgICAgIGlmICghc2hhcGVzLT5hdChpKS0+bV9maWVsZHMuY29udGFpbnMo
Kml0ZXIpKSB7CisgICAgICAgICAgICAgICAgc2hvdWxkQWRkID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNob3Vs
ZEFkZCkKKyAgICAgICAgICAgIGx1Yi0+YWRkSXRlbShTdHJpbmcoKCppdGVyKS5nZXQoKSkpOyAK
KyAgICB9CisKKyAgICByZXR1cm4gbHViLnJlbGVhc2UoKTsKK30KKworU3RyaW5nIFN0cnVjdHVy
ZVNoYXBlOjpsZWFzdFVwcGVyQm91bmRBc1N0cmluZyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVj
dHVyZVNoYXBlPj4qIHNoYXBlcykKIHsKICAgICBpZiAoIXNoYXBlcy0+c2l6ZSgpKQogICAgICAg
ICByZXR1cm4gIiI7CkBAIC0xOTksMTMgKzM2NiwxMyBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6
OmxlYXN0VXBwZXJCb3VuZChWCiAgICAgICAgIGJvb2wgc2hvdWxkQWRkID0gdHJ1ZTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDEsIHNpemUgPSBzaGFwZXMtPnNpemUoKTsgaSA8IHNpemU7IGkr
KykgewogICAgICAgICAgICAgLy8gSWYgYWxsIG90aGVyIFNoYXBlcyBoYXZlIHRoZSBzYW1lIGZp
ZWxkIGFzIG9yaWdpbiwgYWRkIGl0IHRvIHRoZSBsZWFzdCB1cHBlciBib3VuZC4KLSAgICAgICAg
ICAgIGlmICghc2hhcGVzLT5hdChpKS0+bV9maWVsZHMuY29udGFpbnMoaXRlci0+a2V5KSkgewor
ICAgICAgICAgICAgaWYgKCFzaGFwZXMtPmF0KGkpLT5tX2ZpZWxkcy5jb250YWlucygqaXRlcikp
IHsKICAgICAgICAgICAgICAgICBzaG91bGRBZGQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoc2hvdWxkQWRkKQot
ICAgICAgICAgICAgbHViLmFwcGVuZChTdHJpbmcoaXRlci0+a2V5LmdldCgpKSArIFN0cmluZygi
LCAiKSk7CisgICAgICAgICAgICBsdWIuYXBwZW5kKFN0cmluZygoKml0ZXIpLmdldCgpKSArIFN0
cmluZygiLCAiKSk7CiAgICAgfQogCiAgICAgaWYgKGx1Yi5sZW5ndGgoKSA+PSAzKQpAQCAtMjE5
LDExICszODYsMjMgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQoVgog
U3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNlbnRhdGlvbigpCiB7CiAgICAgU3Ry
aW5nQnVpbGRlciByZXByZXNlbnRhdGlvbjsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IGN1
clNoYXBlID0gdGhpczsKKwogICAgIHJlcHJlc2VudGF0aW9uLmFwcGVuZCgieyIpOwotICAgIGZv
ciAoYXV0byBpdGVyID0gbV9maWVsZHMuYmVnaW4oKSwgZW5kID0gbV9maWVsZHMuZW5kKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgU3RyaW5nIHByb3AoaXRlci0+a2V5LmdldCgp
KTsKLSAgICAgICAgcmVwcmVzZW50YXRpb24uYXBwZW5kKHByb3ApOwotICAgICAgICByZXByZXNl
bnRhdGlvbi5hcHBlbmQoIiwgIik7CisgICAgd2hpbGUgKGN1clNoYXBlKSB7CisgICAgICAgIGZv
ciAoYXV0byBpdGVyID0gY3VyU2hhcGUtPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9IGN1clNoYXBl
LT5tX2ZpZWxkcy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICAgICAgU3Ry
aW5nIHByb3AoKCppdGVyKS5nZXQoKSk7CisgICAgICAgICAgICByZXByZXNlbnRhdGlvbi5hcHBl
bmQocHJvcCk7CisgICAgICAgICAgICByZXByZXNlbnRhdGlvbi5hcHBlbmQoIiwgIik7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY3VyU2hhcGUtPm1fcHJvdG8pIHsKKyAgICAgICAgICAgIFN0
cmluZyBwcm90ID0gU3RyaW5nKCJfX3Byb3RvX18iKSArIFN0cmluZygiIFsiKSArIGN1clNoYXBl
LT5tX3Byb3RvLT5tX2NvbnN0cnVjdG9yTmFtZSArIFN0cmluZygiXSIpOworICAgICAgICAgICAg
cmVwcmVzZW50YXRpb24uYXBwZW5kKHByb3QpOworICAgICAgICAgICAgcmVwcmVzZW50YXRpb24u
YXBwZW5kKCIsICIpOworICAgICAgICB9CisKKyAgICAgICAgY3VyU2hhcGUgPSBjdXJTaGFwZS0+
bV9wcm90bzsKICAgICB9CiAKICAgICBpZiAocmVwcmVzZW50YXRpb24ubGVuZ3RoKCkgPj0gMykK
QEAgLTIzNCw0ICs0MTMsMjMgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpzdHJpbmdSZXByZXNl
bnRhdAogICAgIHJldHVybiByZXByZXNlbnRhdGlvbi50b1N0cmluZygpOwogfQogCitQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFN0cnVjdHVyZVNoYXBl
OjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpCit7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBl
PiBjdXJTaGFwZSA9IHRoaXM7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PFN0cmluZz4+IHJldCA9IEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46
OmNyZWF0ZSgpOworICAgIHdoaWxlIChjdXJTaGFwZSkgeworICAgICAgICBmb3IgKGF1dG8gaXRl
ciA9IGN1clNoYXBlLT5tX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBjdXJTaGFwZS0+bV9maWVsZHMu
ZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAgICByZXQtPmFkZEl0ZW0oKCpp
dGVyKS5nZXQoKSk7CisKKyAgICAgICAgaWYgKGN1clNoYXBlLT5tX3Byb3RvKSB7CisgICAgICAg
ICAgICBTdHJpbmcgcHJvdCA9IFN0cmluZygiX19wcm90b19fIikgKyBTdHJpbmcoIiBbIikgKyBj
dXJTaGFwZS0+bV9wcm90by0+bV9jb25zdHJ1Y3Rvck5hbWUgKyBTdHJpbmcoIl0iKTsKKyAgICAg
ICAgICAgIHJldC0+YWRkSXRlbShwcm90KTsKKyAgICAgICAgfQorCisgICAgICAgIGN1clNoYXBl
ID0gY3VyU2hhcGUtPm1fcHJvdG87CisgICAgfQorCisgICAgcmV0dXJuIHJldC5yZWxlYXNlKCk7
Cit9CisKIH0gLy9uYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZVNldC5oCShyZXZpc2lvbiAxNzEyNTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDExIEBACiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCitu
YW1lc3BhY2UgSW5zcGVjdG9yIHsgbmFtZXNwYWNlIFR5cGVCdWlsZGVyICB7IAordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK2NsYXNzIEFycmF5OworfX0KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEpTVmFsdWU7CkBAIC00NSw4ICs1MCw3IEBAIGVudW0gUnVudGltZVR5cGUgewogICAgIFR5cGVN
YWNoaW5lSW50ICAgICAgICAgPSAweDEwLAogICAgIFR5cGVOdW1iZXIgICAgICAgICAgICAgPSAw
eDIwLAogICAgIFR5cGVTdHJpbmcgICAgICAgICAgICAgPSAweDQwLAotICAgIFR5cGVQcmltaXRp
dmUgICAgICAgICAgPSAweDgwLAotICAgIFR5cGVPYmplY3QgICAgICAgICAgICAgPSAweDEwMAor
ICAgIFR5cGVPYmplY3QgICAgICAgICAgICAgPSAweDgwCiB9OwogCiBjbGFzcyBTdHJ1Y3R1cmVT
aGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cnVjdHVyZVNoYXBlPiB7CkBAIC01OSwxMiArNjMs
MTcgQEAgcHVibGljOgogICAgIFN0cmluZyBwcm9wZXJ0eUhhc2goKTsKICAgICB2b2lkIG1hcmtB
c0ZpbmFsKCk7CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwotICAg
IHN0YXRpYyBTdHJpbmcgbGVhc3RVcHBlckJvdW5kKFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hh
cGU+PiopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFy
cmF5PFN0cmluZz4+IGxlYXN0VXBwZXJCb3VuZChjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVy
ZVNoYXBlPj4qKTsKKyAgICBzdGF0aWMgU3RyaW5nIGxlYXN0VXBwZXJCb3VuZEFzU3RyaW5nKGNv
bnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+Piogc2hhcGVzKTsKICAgICBTdHJpbmcg
c3RyaW5nUmVwcmVzZW50YXRpb24oKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4+IGluc3BlY3RvclJlcHJlc2VudGF0aW9uKCk7CiAgICAgdm9p
ZCBzZXRDb25zdHJ1Y3Rvck5hbWUoU3RyaW5nIG5hbWUpIHsgbV9jb25zdHJ1Y3Rvck5hbWUgPSBu
YW1lOyB9CisgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3RydWN0
b3JOYW1lOyB9CisgICAgdm9pZCBzZXRQcm90byhQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBz
aGFwZSkgeyBtX3Byb3RvID0gc2hhcGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPFJlZlB0
cjxTdHJpbmdJbXBsPiwgYm9vbD4gbV9maWVsZHM7ICAgICAgICAgCisgICAgVmVjdG9yPFJlZlB0
cjxTdHJpbmdJbXBsPj4gbV9maWVsZHM7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBtX3By
b3RvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJpbmc+IG1fcHJvcGVydHlIYXNoOwogICAgIFN0
cmluZyBtX2NvbnN0cnVjdG9yTmFtZTsKICAgICBib29sIG1fZmluYWw7CkBAIC03NywxMSArODYs
MTggQEAgcHVibGljOgogICAgIFR5cGVTZXQoKTsKICAgICB2b2lkIGFkZFR5cGVGb3JWYWx1ZShK
U1ZhbHVlIHYsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAg
c3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUoSlNWYWx1ZSk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNlZW5UeXBlcygpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKKyAgICBTdHJpbmcgZGlzcGxheU5hbWUoKSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmlu
Zz4+IGFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVj
dG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gYWxsT2JqZWN0VHlwZU5hbWVzKCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
PiBsZWFzdFVwcGVyQm91bmQoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+PiBh
bGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICB1aW50
MzJfdCBtX3NlZW5UeXBlczsKICAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKKyAgICBib29sIGRv
ZXNUeXBlQ29uZm9ybVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OworCisgICAgdWludDMyX3QgbV9z
ZWVuVHlwZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBtX3N0cnVjdHVy
ZUhpc3Rvcnk7CiAgICAgSGFzaE1hcDxTdHJ1Y3R1cmVJRCwgdWludDhfdD4gbV9zdHJ1Y3R1cmVJ
REhpc3Rvcnk7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMTcxMjU5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05MjYsNDMgKzkyNiwxNiBAQCB2b2lkIFZNOjpzZXRFbmFibGVkUHJv
ZmlsZXIoTGVnYWN5UHJvZmlsCiAgICAgfQogfQogCi1TdHJpbmcgVk06OmdldFR5cGVzRm9yVmFy
aWFibGVBdE9mZnNldCh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1l
LCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcpCi17Ci0gICAgaWYgKCFpc1Byb2ZpbGlu
Z1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQotICAgICAgICByZXR1cm4gIihOb3QgUHJvZmlsaW5n
KSI7Ci0KLSAgICBib29sIG9rYXk7Ci0gICAgaW50cHRyX3Qgc291cmNlSUQgPSBzb3VyY2VJREFz
U3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KTsKLSAgICBpZiAoIW9rYXkpCi0gICAgICAgIENS
QVNIKCk7Ci0KLSAgICB1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCk7Ci0gICAg
cmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLT5nZXRUeXBlc0ZvclZhcmlhYmxlSW5B
dE9mZnNldChvZmZzZXQsIHZhcmlhYmxlTmFtZSwgc291cmNlSUQpOwotfQotCi12b2lkIFZNOjp1
cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCkKLXsKLSAgICBpZiAoIWlzUHJvZmls
aW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZ2hG
aWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGZhbHNlLCAiVk0gVXBkYXRlIik7
Ci19Ci0KIHZvaWQgVk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpCiB7CiAgICAg
aWYgKCFpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICB1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCk7CisgICAgaGlnaEZp
ZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIlZNIER1bXAgVHlwZXMiKTsKICAg
ICBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIqIHByb2ZpbGVyID0gbV9oaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXIuZ2V0KCk7CiAgICAgZm9yIChCYWc8VHlwZUxvY2F0aW9uPjo6aXRlcmF0b3IgaXRl
ciA9IG1fbG9jYXRpb25JbmZvLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFR5
cGVMb2NhdGlvbiogbG9jYXRpb24gPSAqaXRlcjsKLSAgICAgICAgZGF0YUxvZ0YoIltTdGFydCwg
RW5kXTo6WyV1LCAldV0gIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2
b3RFbmQpOwotICAgICAgICBkYXRhTG9nKCJcblx0XHQjTG9jYWwjXG5cdFx0IiwKLSAgICAgICAg
ICAgICAgICBwcm9maWxlci0+Z2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQobG9jYXRp
b24tPm1fZGl2b3RTdGFydCwgIiIsIGxvY2F0aW9uLT5tX3NvdXJjZUlEKS5yZXBsYWNlKCJcbiIs
ICJcblx0XHQiKSwKLSAgICAgICAgICAgICAgICAiXG5cdFx0I0dsb2JhbCNcblx0XHQiLAotICAg
ICAgICAgICAgICAgIHByb2ZpbGVyLT5nZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQo
bG9jYXRpb24tPm1fZGl2b3RTdGFydCwgIiIsIGxvY2F0aW9uLT5tX3NvdXJjZUlEKS5yZXBsYWNl
KCJcbiIsICJcblx0XHQiKSwKLSAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgcHJvZmls
ZXItPmxvZ1R5cGVzRm9yVHlwZUxvY2F0aW9uKGxvY2F0aW9uKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcxMjU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDEwICs1
MTUsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWls
dGluRXhlY3V0YWJsZXMoKSB7IHJldHVybiBtX2J1aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQog
CiAgICAgICAgIGJvb2wgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSB7IHJldHVy
biAhIW1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOyB9Ci0gICAgICAgIFN0cmluZyBnZXRUeXBl
c0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFi
bGVOYW1lLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKICAgICAgICAgSGlnaEZpZGVsaXR5TG9n
KiBoaWdoRmlkZWxpdHlMb2coKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eUxvZy5nZXQoKTsgfQog
ICAgICAgICBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIqIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cigpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOyB9Ci0gICAgICAg
IHZvaWQgdXBkYXRlSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpOwogICAgICAgICBUeXBl
TG9jYXRpb24qIG5leHRMb2NhdGlvbigpIHsgcmV0dXJuIG1fbG9jYXRpb25JbmZvLmFkZCgpOyB9
IC8vVE9ETzogcG9zc2libGUgb3B0bWl6YXRpb246IHdoZW4gY29kZWJsb2NrcyBkaWUsIHJlcG9y
dCB3aGljaCBsb2NhdGlvbnMgYXJlIG5vIGxvbmdlciBiZWluZyBjaGFuZ2VkIHNvIHdlIGRvbid0
IHdhbGsgb3ZlciB0aGVtCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcEhpZ2hG
aWRlbGl0eVByb2ZpbGluZ1R5cGVzKCk7CiAgICAgICAgIGludDY0X3QgZ2V0TmV4dFVuaXF1ZVZh
cmlhYmxlSUQoKSB7IHJldHVybiBtX25leHRVbmlxdWVWYXJpYWJsZUlEKys7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235326</attachid>
            <date>2014-07-22 16:52:00 -0700</date>
            <delta_ts>2014-07-22 18:29:10 -0700</delta_ts>
            <desc>patch </desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>92775</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMCBA
QAorMjAxNC0wNy0yMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIGltcHJvdmVtZW50cyB0byBUeXBlIFByb2ZpbGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBpbXByb3ZlZCB0aGUgQVBJIGJldHdlZW4g
dGhlIGluc3BlY3RvciBhbmQgSlNDLiBXZSBubyBsb25nZXIgc2VuZCBvbmUgaHVnZQorICAgICAg
ICBzdHJpbmcgdG8gdGhlIGluc3BlY3Rvci4gV2Ugbm93IHNlbmQgc3RydWN0dXJlZCBkYXRhIHRo
YXQgcmVwcmVzZW50cyB0aGUgdHlwZQorICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IEpTQyBoYXMg
Y29sbGVjdGVkLiBJJ3ZlIGFsc28gY3JlYXRlZCBhIGJlZ2lubmluZyBpbXBsZW1lbnRhdGlvbiAK
KyAgICAgICAgb2YgYSB0eXBlIGxhdHRpY2UgdGhhdCBhbGxvd3MgdXMgdG8gcmVzb2x2ZSBhIGRp
c3BsYXkgbmFtZSBmb3IgYSB0eXBlIHRoYXQKKyAgICAgICAgY29uc2lzdHMgb2YgYSBzaW5nbGUg
d29yZC4KKworICAgICAgICBJIGNyZWF0ZWQgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGtub3dzIHdo
aWNoIGZ1bmN0aW9ucyBoYXZlIGV4ZWN1dGVkLiBUaGlzCisgICAgICAgIHNvbHZlcyB0aGUgYnVn
IHdoZXJlIHR5cGVzIGluc2lkZSBhbiB1bi1leGVjdXRlZCBmdW5jdGlvbiB3aWxsIHJlc29sdmUK
KyAgICAgICAgdG8gdGhlIHR5cGUgb2YgdGhlIGVuY2xvc2luZyBleHByZXNzaW9uIG9mIHRoYXQg
ZnVuY3Rpb24uIFRoaXMgZGF0YQorICAgICAgICBzdHJ1Y3R1cmUgbWF5IGFsc28gYmUgdXNlZnVs
IGxhdGVyIGlmIHRoZSBpbnNwZWN0b3IgY2hvb3NlcyB0byBjcmVhdGUgYSBVSQorICAgICAgICBh
cm91bmQgc2hvd2luZyB3aGljaCBmdW5jdGlvbnMgaGF2ZSBleGVjdXRlZC4KKworICAgICAgICBC
ZXR0ZXIgdHlwZSBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZCBmb3Igb2JqZWN0cy4gU3RydWN0dXJl
U2hhcGUgbm93CisgICAgICAgIHJlcHJlc2VudHMgYW4gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWlu
LiAgU3RydWN0dXJlU2hhcGUgYWxzbyBjb2xsZWN0cworICAgICAgICB0aGUgY29uc3RydWN0b3Ig
bmFtZSBmb3IgYW4gb2JqZWN0LgorCisgICAgICAgIEV4cHJlc3Npb24gcmFuZ2VzIGFyZSBub3cg
emVybyBpbmRleGVkLgorCisgICAgICAgIFJlbW92ZWQgc29tZSBleHRyYW5lb3VzIG1ldGhvZHMu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzY29wZURlcGVuZGVudFBy
b2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1R5cGVMb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpUeXBlTG9jYXRpb246OlR5cGVMb2Nh
dGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5m
byk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y29sbGVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb246CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0
YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
OjpQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6Omlu
aXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlOjpoYXNFeGVjdXRlZEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlOjppbnNlcnRVbmV4ZWN1dGVkUmFuZ2UpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRSYW5nZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25SYW5nZTo6RnVuY3Rpb25S
YW5nZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25S
YW5nZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZTo6RnVuY3Rpb25SYW5nZTo6aGFzaCk6CisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2cpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJvY2Vzc0xv
Z1RocmVhZEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0
eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1h
dGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlw
ZXNGb3JUeXBlTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6Omluc2VydE5ld0xvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3IpOgorICAgICAg
ICAoSlNDOjpkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6Okhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlSW5BdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFs
VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6UXVlcnlLZXk6OlF1ZXJ5S2V5KToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpRdWVyeUtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1
ZXJ5S2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1ZXJ5S2V5SGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6dHlwZUxv
Y2F0aW9uQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6VHlwZUxvY2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uQ2FjaGU6OkxvY2F0aW9uS2V5OjpMb2NhdGlvbktleSk6CisgICAgICAg
IChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6aGFzaCk6CisgICAgICAg
ICogcnVudGltZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGlt
ZVR5cGVGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OnNlZW5UeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZGlzcGxheU5h
bWUpOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxQcmltaXRpdmVUeXBlTmFtZXMpOgorICAg
ICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAgICAg
ICAoSlNDOjpUeXBlU2V0OjpsZWFzdENvbW1vbkFuY2VzdG9yKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2hhcGU6OlN0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hh
cGU6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnByb3BlcnR5
SGFzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2VzdG9y
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZCk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9UeXBlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNo
YXBlOjpzZXRDb25zdHJ1Y3Rvck5hbWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6
Y29uc3RydWN0b3JOYW1lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnNldFByb3Rv
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmR1bXBIaWdo
RmlkZWxpdHlQcm9maWxpbmdUeXBlcyk6CisgICAgICAgIChKU0M6OlZNOjpnZXRUeXBlc0ZvclZh
cmlhYmxlQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6dXBkYXRlSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAoSlNDOjpWTTo6aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkpOgor
ICAgICAgICAoSlNDOjpWTTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKToKKwogMjAxNC0wNy0x
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERG
RyBGbHVzaChTZXRMb2NhbCkgc3RvcmUgZWxpbWluYXRpb24gaXMgb3ZlcnplYWxvdXMgZm9yIGNh
cHR1cmVkIHZhcmlhYmxlcyBpbiB0aGUgcHJlc2VuY2Ugb2Ygbm9kZXMgdGhhdCBoYXZlIG5vIGVm
ZmVjdHMgYnV0IG1heSB0aHJvdyAobWVyZ2UgdHJ1bmsgcjE3MTE5MCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtODQ0LDYgKzg0NCwxMCBAQAogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyog
RGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9
OwogCQk0NDQzQUUzMzE2RTE4OEQ5MDA3NkYxMTAgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5
MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQjMxMEZCMTk3
NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3
QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUuY3BwICovOyB9OworCQk1MkIzMTBGRjE5NzVCNDI0MDA4MDg1N0MgLyogVHlw
ZUxvY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNw
cCAqLzsgfTsKKwkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTEw
MDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkRBRDM4RjE5NUExNjRFMDBGMzA0
NjQgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkRBRDM4RTE5NUExNjRFMDBGMzA0NjQgLyogVHlwZUxvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJGQjcxMzcx
OTUzNzRCODAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkZCNzEzMzE5NTM3NEI3MDBCQjYxMkUgLyog
SGlnaEZpZGVsaXR5TG9nLmNwcCAqLzsgfTsKIAkJNTJGQjcxMzgxOTUzNzRCODAwQkI2MTJFIC8q
IEhpZ2hGaWRlbGl0eUxvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJGQjcxMzQxOTUzNzRCNzAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTk2LDYg
KzMwMDAsMTAgQEAKIAkJNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2Jq
Yy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91
c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUy
MkFCQUY5MTk0QTgwNDMwMDhCMUM4NSAvKiBUeXBlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMzEwRkUxOTc1
QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFR5cGVMb2NhdGlvbkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJC
MzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVMb2NhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
REFEMzhFMTk1QTE2NEUwMEYzMDQ2NCAvKiBUeXBlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHlwZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRkI3MTMzMTk1
Mzc0QjcwMEJCNjEyRSAvKiBIaWdoRmlkZWxpdHlMb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSGlnaEZpZGVsaXR5TG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGQjcxMzQxOTUzNzRCNzAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaWdoRmlkZWxpdHlMb2cuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2NzAsNiArNDY3OCw4IEBACiAJCQkJQkMyNjgw
QzEwRTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCAqLywKIAkJCQkwRkI0
QjUyMTE2QjYyNzhEMDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgKi8sCiAJ
CQkJMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAq
LywKKwkJCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlLmggKi8sCisJCQkJNTJCMzEwRkMxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZS5jcHAgKi8sCiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0
aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCkBAIC00OTUxLDYgKzQ5NjEsOCBAQAogCQkJCTBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovLAogCQkJCTBGMkI2NkRDMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8sCiAJCQkJMEYyQjY2REQxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8sCisJCQkJNTJCMzExMDAxOTc1QjQ2
NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi8sCisJCQkJNTJCMzEwRkUxOTc1QjQy
NDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLywKIAkJCQk1MkZCNzIxMjE5NTM3
NjBDMDBCQjYxMkUgLyogVHlwZVNldC5jcHAgKi8sCiAJCQkJNTJGQjcyMTMxOTUzNzYwQzAwQkI2
MTJFIC8qIFR5cGVTZXQuaCAqLywKIAkJCQlBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDE2QXJyYXkuaCAqLywKQEAgLTYyNDgsNiArNjI2MCw3IEBACiAJCQkJMEYyMzVCREQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkRFMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMTE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0
MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMkExODdE
RkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY1
OTYsNiArNjYwOSw3IEBACiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJF
eGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE5MENBRDE4OUQ4MkY2MDAw
QUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkYxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggaW4gSGVhZGVycyAqLywK
QEAgLTc1ODEsNiArNzU5NSw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MkIzMTBG
RjE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTlFQTVDN0ExMTkwRjA4NDIwMDUwOEVCRSAvKiBCdW5kbGVQYXRo
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRp
YWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODI4LDYgKzc4NDMsNyBAQAog
CQkJCTBGNUE2MjgzMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyQjMxMEZEMTk3
NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMUExNjI2MkJERDAw
NUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCi0jaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRl
ICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKQEAgLTE2ODUsMTIgKzE2ODUsMTcgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIEFTU0VSVChtX3NvdXJj
ZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKIAorICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KQorICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgbV9vd25lckV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpLCBtX293bmVyRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCgpKTsKKwogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVz
ZXNHbG9iYWxPYmplY3QoKSkKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCpt
X3ZtLCBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKICAgICBtX2Z1bmN0
aW9uRGVjbHMucmVzaXplVG9GaXQodW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25E
ZWNscygpKTsKICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOworICAgICAgICBpZiAodm0oKS0+aXNQcm9maWxpbmdU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRl
ZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAgICAgICAgIHVuc2ln
bmVkIGxpbmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CiAgICAgICAg
IHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtl
ZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwogICAgICAgICBib29sIHN0YXJ0Q29sdW1u
SXNPbk93bmVyU3RhcnRMaW5lID0gIXVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0
KCk7CkBAIC0xNzA3LDYgKzE3MTIsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRF
eGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKKyAgICAgICAg
aWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAg
ICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQo
KSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUt
PmxpbmVDb3VudCgpOwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKICAg
ICAgICAgYm9vbCBzdGFydENvbHVtbklzT25Pd25lclN0YXJ0TGluZSA9ICF1bmxpbmtlZEV4ZWN1
dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwpAQCAtMTkyMiw4ICsxOTI5LDcgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaWYgKHBjWzBdLnUu
b3Bjb2RlID09IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogZ2V0X2Zyb21fc2NvcGVf
d2l0aF9wcm9maWxlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVy
ZSwgT3BlcmFuZCwgLi4uLCBUeXBlTG9jYXRpb24KICAgICAgICAgICAgICAgICBzaXplX3QgaW5z
dHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwotICAgICAgICAgICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgICAg
ICBzY29wZURlcGVuZGVudFByb2ZpbGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCwgbG9j
YXRpb24pOworICAgICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBzY29wZURl
cGVuZGVudFByb2ZpbGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA4XS51LmxvY2F0aW9uID0gbG9jYXRpb247CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NDksOCArMTk1NSw3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGlmIChwY1swXS51
Lm9wY29kZSA9PSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0
aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJl
LCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCiAgICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0
aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRp
b24qIGxvY2F0aW9uID0gdm0oKS0+bmV4dExvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2Nv
cGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxvY2F0aW9u
KTsKKyAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2NvcGVEZXBlbmRl
bnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTU5LDQ0ICsxOTY0LDUyIEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eTogewogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9u
T2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3Rh
cnQsIGRpdm90RW5kOworICAgICAgICAgICAgaW50cHRyX3QgZ2xvYmFsVmFyaWFibGVJRDsKKyAg
ICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OwogICAgICAgICAgICAgYm9v
bCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
RXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcihwY1sxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKLSAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9j
YXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rp
dm90U3RhcnQgPSBkaXZvdFN0YXJ0OwotICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RFbmQg
PSBkaXZvdEVuZDsKLSAgICAgICAgICAgIGxvY2F0aW9uLT5tX3NvdXJjZUlEID0gbV9vd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCk7CiAKICAgICAgICAgICAgIFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHlCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHlCeXRlY29kZUZsYWc+KHBjWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBz
d2l0Y2ggKGZsYWcpIHsKICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNH
bG9iYWxJRDogewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZh
cmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGxv
Y2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgZ2xv
YmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2Vy
LCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElEOiAKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVGdW5jdGlvbkFyZ3VtZW50OgorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29k
ZUZ1bmN0aW9uQXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0g
SGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlv
blRoaXNPYmplY3Q6IHsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJs
ZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKyAgICAgICAgICAgICAgICBnbG9i
YWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewotICAgICAgICAgICAgICAgIGxvY2F0aW9u
LT5tX2dsb2JhbFR5cGVTZXQgPSByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7Ci0gICAgICAgICAg
ICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudDsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zm
c2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBtX3NvdXJjZU9mZnNldDsgCisgICAgICAgICAgICAgICAg
Z2xvYmFsVHlwZVNldCA9IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKKyAgICAgICAgICAgICAg
ICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50OwogICAgICAg
ICAgICAgICAgIGlmICghc2hvdWxkQW5hbHl6ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBC
ZWNhdXNlIHNvbWUgcmV0dXJuIHN0YXRlbWVudHMgYXJlIGFkZGVkIGltcGxpY2l0bHkgKHRvIHJl
dHVybiB1bmRlZmluZWQgYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uKSwgYW5kIHRoZXNlIG5vZGVz
IGRvbid0IGVtaXQgZXhwcmVzc2lvbiByYW5nZXMsIGdpdmUgdGhlbSBzb21lIHJhbmdlLgogICAg
ICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgZGl2b3QgaXMgb24gdGhlIG9wZW4g
YnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLiAKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1f
ZGl2b3RTdGFydCA9IGxvY2F0aW9uLT5tX2Rpdm90RW5kID0gbG9jYXRpb24tPm1fZGl2b3RGb3JG
dW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50OworICAgICAgICAgICAgICAgICAgICBkaXZv
dFN0YXJ0ID0gZGl2b3RFbmQgPSBtX3NvdXJjZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkQW5hbHl6ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
c2hvdWxkQW5hbHl6ZSkKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29s
PiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxv
Y2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsIG1fb3duZXJF
eGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNl
dCwgdm0oKSk7CisgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLmZpcnN0OworICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWly
LnNlY29uZDsKKworICAgICAgICAgICAgaWYgKFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25S
ZXR1cm5TdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5j
dGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID0gbV9zb3VyY2VPZmZzZXQ7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRBbmFseXplICYmIGlzTmV3TG9jYXRpb24pCiAgICAgICAgICAgICAgICAg
dm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0
aW9uKTsKKwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9j
YXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzg4MywxMyArMzg5Niwx
MiBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpCiB9CiAjZW5kaWYK
IAotdm9pZCBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3Agb3AsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQsIFR5cGVMb2Nh
dGlvbiogbG9jYXRpb24pCitUeXBlTG9jYXRpb24qIENvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQ
cm9maWxlKFJlc29sdmVPcCBvcCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHNpemVfdCBpbnN0
cnVjdGlvbk9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKICAg
ICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7Ci0gICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IGRpdm90
U3RhcnQ7Ci0gICAgbG9jYXRpb24tPm1fZGl2b3RFbmQgPSBkaXZvdEVuZDsKLSAgICBsb2NhdGlv
bi0+bV9zb3VyY2VJRCA9IG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpOworICAgIGludHB0
cl90IGdsb2JhbFZhcmlhYmxlSUQ7CisgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7
CiAKICAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBh
bmQgYWxzbyBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRl
cm1pbmUgdGhlIGdsb2JhbElECiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0
cjsKQEAgLTM5MDAsMTMgKzM5MTIsMTkgQEAgdm9pZCBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50
UHJvZmlsZShSZQogICAgIAogICAgIGlmIChzeW1ib2xUYWJsZSkgewogICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxl
KGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgICAgIGxvY2F0aW9uLT5tX2dsb2Jh
bFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwg
aWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xU
YWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwor
ICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJp
YWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0
czsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlz
dHM7CiAKLSAgICBpZiAoc2hvdWxkQW5hbHl6ZSkKKyAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9u
KiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkt
PnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELCBt
X293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2Jh
bFR5cGVTZXQsIHZtKCkpOworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBh
aXIuZmlyc3Q7CisgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsK
KworICAgIGlmIChzaG91bGRBbmFseXplICYgaXNOZXdMb2NhdGlvbikKICAgICAgICAgdm0oKS0+
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsK
KworICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFeGVjU3Rh
dGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwor
Y2xhc3MgVHlwZUxvY2F0aW9uOwogCiBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0
dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci5vZmZzZXQoKSArIDEpOyB9CiAK
QEAgLTEwMjEsNyArMTAyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0g
YWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAKLSAgICB2b2lkIHNjb3BlRGVwZW5kZW50
UHJvZmlsZShSZXNvbHZlT3AsIGNvbnN0IElkZW50aWZpZXImLCBzaXplX3QsIFR5cGVMb2NhdGlv
biopOworICAgIFR5cGVMb2NhdGlvbiogc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVPcCwg
Y29uc3QgSWRlbnRpZmllciYsIHNpemVfdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9jYXRpb24u
aAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5
cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiBlbnVtIEhpZ2hGaWRlbGl0eUdsb2JhbElERmxhZ3MgewogICAgIEhpZ2hGaWRlbGl0
eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uID0gLTEsCiAgICAgSGlnaEZpZGVsaXR5Tm9HbG9iYWxJ
REV4aXN0cyA9IC0yLAotICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zCisgICAg
SGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMsCisgICAgSGlnaEZpZGVsaXR5VGhpc1N0
YXRlbWVudCA9IC00CiB9OwogCiBjbGFzcyBUeXBlTG9jYXRpb24gewogcHVibGljOgogICAgIFR5
cGVMb2NhdGlvbigpIAotICAgICAgICA6IG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNy
ZWF0ZSgpKQorICAgICAgICA6IG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVt
ZW50KFVJTlRfTUFYKQorICAgICAgICAsIG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNy
ZWF0ZSgpKQogICAgICAgICAsIG1fZ2xvYmFsVHlwZVNldChudWxscHRyKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2
ICsxMDAsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jCiAgICAg
LCBtX3VubGlua2VkQm9keUVuZENvbHVtbihtX2xpbmVDb3VudCA/IG5vZGUtPmVuZENvbHVtbigp
IDogbm9kZS0+ZW5kQ29sdW1uKCkgLSBub2RlLT5zdGFydENvbHVtbigpKQogICAgICwgbV9zdGFy
dE9mZnNldChub2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0
KCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKKyAgICAs
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uTmFt
ZVN0YXJ0KCkpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQobm9k
ZS0+c3RhcnRTdGFydE9mZnNldCgpICsgbm9kZS0+c291cmNlKCkubGVuZ3RoKCkgLSAxKQogICAg
ICwgbV9mZWF0dXJlcyhub2RlLT5mZWF0dXJlcygpKQogICAgICwgbV9mdW5jdGlvbk1vZGUobm9k
ZS0+ZnVuY3Rpb25Nb2RlKCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdW5saW5rZWRC
b2R5RW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47IH0K
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7
IH0KICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGgoKSB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsg
fQorICAgIHVuc2lnbmVkIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OyB9Cisg
ICAgdW5zaWduZWQgaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQogCiAgICAgU3Ry
aW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTE4Niw2ICsxODgsOCBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOwogICAgIHVuc2lnbmVkIG1fc3Rh
cnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CisgICAgdW5zaWduZWQgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVh
dHVyZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzEzNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIAogICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAotICAg
IGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3Rp
dmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsK
KyAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJvZHktPm5lZWRz
QWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxkRW1pdERlYnVnSG9v
a3MgJiYgIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCk7CiAgICAgbV9maXJzdExh
enlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CkBAIC0xMTE2LDYgKzExMTYsMTQgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbAogICAgIHJldHVybiBkc3Q7
CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlbmREaXZvdCkKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IHN0YXJ0
RGl2b3Qub2Zmc2V0OyAvLyBSYW5nZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGVpciBlbmRwb2ludHMs
IEFORCAwIGluZGV4ZWQuCisgICAgdW5zaWduZWQgZW5kID0gZW5kRGl2b3Qub2Zmc2V0IC0gMTsg
Ly8gRW5kIFJhbmdlcyBhbHJlYWR5IGdvIG9uZSBwYXN0IHRoZSBpbmNsdXNpdmUgcmFuZ2UsIHNv
IHN1YnRyYWN0IDEuCisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlv
bnMoKS5zaXplKCkgLSAxOworICAgIG1fY29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZUV4cHJlc3Npb25JbmZvKGluc3RydWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKK30KKwog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
UmVnaXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHlCeXRlY29kZUZsYWcgZmxhZykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfdHlwZXNf
d2l0aF9oaWdoX2ZpZGVsaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDEzICszMjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVzc2lvbkluZm8oaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4p
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gc3RhcnREaXZvdC5vZmZzZXQgKyAxOyAvLyBSYW5nZXMgYXJlIGluY2x1c2l2ZSBv
ZiB0aGVpciBlbmRwb2ludHMsIEFORCAxIGluZGV4ZWQuCi0gICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSBlbmREaXZvdC5vZmZzZXQ7IC8vIEVuZCBSYW5nZXMgYWxyZWFkeSBnbyBvbmUgcGFzdCB0
aGUgaW5jbHVzaXZlIHJhbmdlLCBzbyBubyBuZWVkIHRvIGRvICsgMSAtIDEuCi0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAtIDE7
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHBy
ZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KIAog
ICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGVmdEhhbmRTaWRlTmVlZHNDb3B5KGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodElzUHVyZSkKICAgICAgICAgewpAQCAtMzQ4LDYg
KzM0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVtaXROb2RlKG4p
OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpOwogICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIGRzdCwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eUJ5dGVjb2RlRmxhZyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcwLDggKzk3MCw2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFw
T3BlcmF0aW9uIGNvbGxlY3QKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQogICAgIGRh
dGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2VuZGlmCi0gICAgaWYg
KHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHZtKCkt
PmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGZhbHNlLCAiR0MiKTsK
ICAgICAKICAgICBkb3VibGUgYmVmb3JlID0gMDsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewpAQCAtOTgxLDYgKzk3OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBj
b2xsZWN0CiAgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2Ug
Q29sbGVjdGlvbiIpOwogICAgIAorICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsK
KyAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2co
IkdDIik7CisgICAgfQorICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgp
OwogICAgIEFTU0VSVCh2bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERh
dGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsOCBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJDb21wbGV0
aW9uLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRl
ICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIK
QEAgLTQzLDYgKzQ1LDcgQEAKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1
ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xOTEsMTEg
KzE5NCw0MSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cnVuKEVycm9yU3RyCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxl
QXRPZmZzZXQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3ZhcmlhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJiBpbl9pZCwgaW50IGluX2Rpdm90LCBTdHJpbmcqIG91dF90eXBlcykgCit2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZz
ZXRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+JiBpbl9sb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYgb3V0X3R5cGVzKQogeworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwotICAgIFN0cmluZyB0eXBlcyh2bS5nZXRUeXBl
c0ZvclZhcmlhYmxlQXRPZmZzZXQoaW5fZGl2b3QsIGluX3ZhcmlhYmxlTmFtZSwgaW5faWQpKTsK
LSAgICAqb3V0X3R5cGVzID0gdHlwZXM7CisgICAgb3V0X3R5cGVzID0gSW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgaWYgKCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgc3RhcnQgPSBjdXJy
ZW50VGltZU1TKCk7CisgICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2coIlVzZXIgUXVlcnkiKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5fbG9j
YXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSA9IGluX2xvY2F0aW9ucy0+Z2V0KGkpOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbjsKKyAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qo
JmxvY2F0aW9uKSkgeworICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJB
cnJheSBvZiBUeXBlTG9jYXRpb24gb2JqZWN0cyBoYXMgYW4gb2JqZWN0IHRoYXQgZG9lcyBub3Qg
aGF2ZSB0eXBlIG9mIFR5cGVMb2NhdGlvbi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBkZXNjcmlwdG9yOworICAgICAgICBTdHJpbmcgc291cmNlSURB
c1N0cmluZzsKKyAgICAgICAgaW50IGRpdm90OworICAgICAgICBsb2NhdGlvbi0+Z2V0TnVtYmVy
KEFTQ0lJTGl0ZXJhbCgidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciIpLCAmZGVzY3JpcHRvcik7
CisgICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzb3VyY2VJRCIpLCAm
c291cmNlSURBc1N0cmluZyk7CisgICAgICAgIGxvY2F0aW9uLT5nZXROdW1iZXIoQVNDSUlMaXRl
cmFsKCJkaXZvdCIpLCAmZGl2b3QpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiB0eXBlRGVzY3JpcHRpb24gPSBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJvb2wgb2theTsKKyAgICAgICAgdm0uaGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyKCktPmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3Bl
Y3RvcihzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9y
KSwgZGl2b3QsIHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpLCB0eXBlRGVz
Y3JpcHRpb24pOworICAgICAgICBvdXRfdHlwZXMtPnB1c2hPYmplY3QodHlwZURlc2NyaXB0aW9u
KTsKKyAgICB9CisKKyAgICBkb3VibGUgZW5kID0gY3VycmVudFRpbWVNUygpOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JW
YXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZtc1xuIiwgZW5kIC0gc3RhcnQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBy
dW4oRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5
cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl92YXJp
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwgU3RyaW5nKiBvdXRf
dHlwZXMpIG92ZXJyaWRlOwotCisgICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZh
cmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYgaW5fbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mIG91dF90eXBlcykgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzZXRTY3JpcHREZWJ1
Z1NlcnZlcihTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2ZXIpIHsgbV9zY3JpcHRE
ZWJ1Z1NlcnZlciA9IHNjcmlwdERlYnVnU2VydmVyOyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCShyZXZpc2lvbiAxNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUu
anNvbgkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwzOSBAQAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3RhcnRPZmZzZXQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIlN0YXJ0IG9mZnNldCBvZiByYW5nZSAoaW5jbHVzaXZlKS4iIH0sCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlbmRPZmZzZXQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVuZCBvZmZzZXQgb2YgcmFuZ2UgKGV4Y2x1c2l2ZSkuIiB9CiAgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJTdHJ1Y3R1cmVEZXNjcmlw
dGlvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmaWVsZHMiLCAidHlwZSI6ICJh
cnJheSIsICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkFy
cmF5IG9mIHN0cmluZ3MsIHdoZXJlIHRoZSBzdHJpbmdzIHJlcHJlc2VudCBvYmplY3QgcHJvcGVy
dGllcy4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb25zdHJ1Y3Rvck5hbWUiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiTmFtZSBvZiB0aGUgY29uc3RydWN0b3Iu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvdG90eXBlU3RydWN0dXJlIiwgIiRy
ZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iLCAib3B0aW9uYWwiOiAidHJ1ZSIsICJkZXNjcmlw
dGlvbiI6ICJQb2ludGVyIHRvIHRoZSBTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJv
dG95cGUgaWYgb25lIGV4aXN0cy4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbnRhaW5lciBm
b3IgdHlwZSBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIGdhdGhlcmVkLiIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpc3BsYXlUeXBl
TmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJXaGF0IHRoZSBpbnNwZWN0b3Igc2hvdWxkIGRpc3BsYXkgYXMgYSBzaW1wbGUgdHlwZS4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFByaW1pdGl2ZVR5cGVOYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6
ICJ0cnVlIiwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIHByaW10aXZl
IHR5cGVzIChpbnQsIHN0cmluZywgZXRjKSBzZWVuIGF0IGFuIGluc3RydWN0aW9uIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxPYmplY3RUeXBlTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiAidHJ1ZSIs
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0IHNlZW4g
YXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFN0
cnVjdHVyZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJl
RGVzY3JpcHRpb24iIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBv
ZiBkZXNjcmlwdGlvbnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlzIGluc3Ry
dWN0aW9uLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1pdGl2ZVR5
cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0s
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZv
ciBhbGwgcHJpbWl0aXZlIHR5cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZ2xvYmFsT2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9i
YWxseS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxTdHJ1Y3R1cmVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVyZURlc2NyaXB0aW9u
IiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgZGVzY3JpcHRp
b25zIGZvciBhbGwgc3RydWN0dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxlLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZUxv
Y2F0aW9uIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiBhbiBleHByZXNzaW9uIHdlIHdh
bnQgdHlwZSBpbmZvcm1hdGlvbiBmb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiV2hhdCBraW5kIG9mIHR5cGUgaW5mb3Jt
YXRpb24gZG8gd2Ugd2FudCAobm9ybWFsLCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLCAndGhpcycg
c3RhdGVtZW50KS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlm
eWluZyBhIHNjcmlwdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3Np
Z25tZW50IHJhbmdlIiB9CisgICAgICAgICAgICBdCiAgICAgICAgIH0KICAgICBdLAogICAgICJj
b21tYW5kcyI6IFsKQEAgLTE5OCwxNCArMjMxLDEyIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGlzYWJsZXMgcmVwb3J0aW5nIG9mIGV4ZWN1dGlvbiBjb250ZXh0cyBjcmVhdGlvbi4i
CiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImdldFJ1bnRpbWVU
eXBlRm9yVmFyaWFibGVBdE9mZnNldCIsCisgICAgICAgICAgICAibmFtZSI6ICJnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YXJpYWJsZU5hbWUiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiVmFyaWFibGUgd2Ugd2FudCB0eXBlIGluZnJvbWF0aW9uIGZv
ci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNj
cmlwdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3NpZ25tZW50IHJh
bmdlIiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhdGlvbnMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiVHlwZUxvY2F0aW9uIiB9LCAiZGVzY3JpcHRpb24i
OiAiQW4gYXJyYXkgb2YgdHlwZSBsb2NhdGlvbnMgd2UncmUgcmVxdWVzdGluZyBpbmZvcm1hdGlv
biBmb3IuIFJlc3VsdHMgYXJlIGV4cGVjdGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkncmUgc2Vu
dCBpbi4ifQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiVHlwZXMgZm9yIHJlcXVlc3RlZCB2YXJpYWJsZS4iIH0KKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInR5cGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbSI6IHsgIiRyZWYiOiAiVHlw
ZURlc2NyaXB0aW9uIiwgImRlc2NyaXB0aW9uIjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFi
bGUuIiB9IH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0
dXJucyBkZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Ry
aXZlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKQEAgLTEwMyw2ICsxMDQsOCBAQCBTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRFeGVjdXRh
YmxlKFN0cnVjCiAgICAgLCBtX2xhc3RMaW5lKC0xKQogICAgICwgbV9zdGFydENvbHVtbihVSU5U
X01BWCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoVUlOVF9NQVgpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoVUlOVF9NQVgpCiB7CiB9CiAKQEAgLTM3OSw2ICszODIsMTAg
QEAgY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZgogUHJvZ3JhbUV4ZWN1
dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dyYW1FeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNlKQogeworICAg
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gMDsKKyAgICBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBzb3VyY2UubGVuZ3RoKCkgLSAxOworICAg
IGlmIChleGVjLT52bSgpLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAg
ICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCk7CiB9CiAKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQpAQCAtNDAyLDYgKzQwOSw4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25F
eGVjdXRhYmxlKFYKICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKICAgICBtX3N0
YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47Cisg
ICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAgIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJsZS0+aGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01MDAsNiArNTA5LDEwIEBAIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25EZWNs
YXJhdGlvbnNbaV0uc2Vjb25kLmdldCgpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2bSwgbV9z
b3VyY2UsIGxpbmVObygpKSwgc2NvcGUpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmFkZEZ1bmN0
aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAg
ICAgICB2bS5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShzb3VyY2VJRCgpLCAKKyAgICAgICAgICAgICAg
ICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0KCksIAorICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw4IEBAIHB1YmxpYzoKICAgICBpbnQgbGFz
dExpbmUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgc3RhcnRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgdW5zaWduZWQgZW5k
Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBoaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KIAogICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KICAgICBib29sIHVzZXNBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQpAQCAt
NDM1LDYgKzQzNyw4IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9sYXN0TGluZTsKICAgICB1bnNp
Z25lZCBtX3N0YXJ0Q29sdW1uOwogICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworICAgIHVuc2ln
bmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVk
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKIH07CiAKIGNsYXNzIEV2YWxF
eGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworYm9vbCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVk
QXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAobV9yYW5n
ZU1hcC5maW5kKGlkKSA9PSBtX3JhbmdlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSYW5nZU1hcCYgbWFwID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOworICAg
IHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7CisgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGZh
bHNlOworICAgIGZvciAoYXV0byBpdGVyID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5n
ZSA9IGl0ZXItPmZpcnN0OworICAgICAgICBpZiAocmFuZ2UubV9zdGFydCA8PSBvZmZzZXQgJiYg
b2Zmc2V0IDw9IHJhbmdlLm1fZW5kICYmIHJhbmdlLm1fZW5kIC0gcmFuZ2UubV9zdGFydCA8IGRp
c3RhbmNlKSB7CisgICAgICAgICAgICBoYXNFeGVjdXRlZCA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgICAgIGRpc3RhbmNlID0gcmFuZ2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0OworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGhhc0V4ZWN1dGVkOworfQorCit2b2lkIEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTo6aW5zZXJ0VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKSAKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9
PSBtX3JhbmdlTWFwLmVuZCgpKSB7CisgICAgICAgIFJhbmdlTWFwIG1hcDsKKyAgICAgICAgbV9y
YW5nZU1hcFtpZF0gPSBtYXA7CisgICAgfQorCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VN
YXAuZmluZChpZCktPnNlY29uZDsKKyAgICBGdW5jdGlvblJhbmdlIHJhbmdlOworICAgIHJhbmdl
Lm1fc3RhcnQgPSBzdGFydDsKKyAgICByYW5nZS5tX2VuZCA9IGVuZDsKKyAgICAvLyBPbmx5IGlu
c2VydCB1bmV4ZWN1dGVkIHJhbmdlcyBvbmNlIGZvciBhIGdpdmVuIHNvdXJjZUlEIGJlY2F1c2Ug
d2UgbWF5IHJ1biBpbnRvIGEgc2l0dWF0aW9uIHdoZXJlIGFuIGV4ZWN1dGFibGUgZXhlY3V0ZXMs
IHRoZW4gaXMgR0NlZCwgYW5kIHRoZW4gaXMgYWxsb2NhdGVkIGFnYWluLAorICAgIC8vIGFuZCB0
cmllcyB0byByZWluc2VydCBpdHNlbGYsIGNsYWltaW5nIGl0IGhhcyBuZXZlciBydW4sIGJ1dCB0
aGlzIGlzIGZhbHNlIGJlY2F1c2UgaXQgaW5kZWVkIGFscmVhZHkgZXhlY3V0ZWQuCisgICAgaWYg
KG1hcC5maW5kKHJhbmdlKSA9PSBtYXAuZW5kKCkpCisgICAgICAgIG1hcFtyYW5nZV0gPSBmYWxz
ZTsKK30KKwordm9pZCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRS
YW5nZShpbnRwdHJfdCBpZCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gaW5zdGFuY2Ugd2hlcmUgd2UgcmV0dXJu
IGhlcmUsIGJ1dCBjdXJyZW50bHkgZG8gaW4gc29tZSBzaXR1YXRpb25zLiBGaW5kIG91dCB3aHku
CisgICAgaWYgKG1fcmFuZ2VNYXAuZmluZChpZCkgPT0gbV9yYW5nZU1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNl
Y29uZDsKKworICAgIEZ1bmN0aW9uUmFuZ2UgcmFuZ2U7CisgICAgcmFuZ2UubV9zdGFydCA9IHN0
YXJ0OworICAgIHJhbmdlLm1fZW5kID0gZW5kOworICAgIG1hcFtyYW5nZV0gPSB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
X2gKKyNkZWZpbmUgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlX2gKKworI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8d3RmL0hhc2hNZXRob2QuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSB7CitwdWJsaWM6CisgICAgc3RydWN0
IEZ1bmN0aW9uUmFuZ2UgeworICAgICAgICBGdW5jdGlvblJhbmdlKCkge30KKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZ1bmN0aW9uUmFuZ2UmIG90aGVyKSBjb25zdCAKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9
PSBvdGhlci5tX2VuZDsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgKiBtX2VuZDsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fZW5kOwor
ICAgIH07CisKKyAgICBib29sIGhhc0V4ZWN1dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2ln
bmVkIG9mZnNldCk7CisgICAgdm9pZCBpbnNlcnRVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOworICAgIHZvaWQgcmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKworcHJp
dmF0ZTogICAgIAorICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEZ1bmN0aW9uUmFuZ2Us
IGJvb2wsIEhhc2hNZXRob2Q8RnVuY3Rpb25SYW5nZT4+IFJhbmdlTWFwOworICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPGludHB0cl90LCBSYW5nZU1hcD4gU291cmNlSURUb1JhbmdlTWFw
OworICAgIFNvdXJjZUlEVG9SYW5nZU1hcCBtX3JhbmdlTWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGVfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw0NSArNTMsMjUgQEAgSGlnaEZpZGVs
aXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9
CiAKLXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5
bmNocm9ub3VzbHksIFN0cmluZyByZWFzb24pCit2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vz
c0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KICAgICBpZiAoIW1f
Y3VycmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAotICAgIEJ5dGVT
cGluTG9ja2VyKiBsb2NrZXIgPSBuZXcgQnl0ZVNwaW5Mb2NrZXIobV9sb2NrKTsKLSAgICBUaHJl
YWREYXRhKiBkYXRhID0gbmV3IFRocmVhZERhdGE7Ci0gICAgZGF0YS0+bV9wcm9jY2Vzc0xvZ1Rv
T2Zmc2V0ID0gbV9jdXJyZW50T2Zmc2V0OwotICAgIGRhdGEtPm1fcHJvY2Vzc0xvZ1B0ciA9IG1f
bG9nU3RhcnRQdHI7Ci0gICAgZGF0YS0+bV9sb2NrZXIgPSBsb2NrZXI7Ci0KLSAgICBtX2N1cnJl
bnRPZmZzZXQgPSAwOwotICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25leHRCdWZmZXIp
OwotICAgIAotICAgIGlmIChhc3luY2hyb25vdXNseSkKLSAgICAgICAgY3JlYXRlVGhyZWFkKGFj
dHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hpZ2hGaWRlbGl0
eUxvZyIpOwotICAgIGVsc2UgCi0gICAgICAgIGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0
aW9uKGRhdGEpOwotfQotCi12b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9n
VGhyZWFkRnVuY3Rpb24odm9pZCogYXJnKQotewogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50
VGltZU1TKCk7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEq
PihhcmcpOwotICAgIExvZ0VudHJ5KiBlbnRyeSA9IGRhdGEtPm1fcHJvY2Vzc0xvZ1B0cjsKKyAg
ICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJl
SUQsIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IHByb2Nl
c3NMb2dUb09mZnNldCA9IGRhdGEtPm1fcHJvY2Nlc3NMb2dUb09mZnNldDsgCiAgICAgc2l6ZV90
IGkgPSAwOwotICAgIHdoaWxlIChpIDwgcHJvY2Vzc0xvZ1RvT2Zmc2V0KSB7CisgICAgd2hpbGUg
KGkgPCBtX2N1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+
c3RydWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAogICAg
ICAgICBpZiAoaWQpIHsKICAgICAgICAgICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChp
ZCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBzZWVuU2hhcGVzLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgc2hhcGUgPSBlbnRyeS0+dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50b1N0
cnVjdHVyZVNoYXBlKCk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpoZWFwKGVudHJ5
LT52YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZW50cnktPnN0cnVjdHVy
ZUlEKS0+dG9TdHJ1Y3R1cmVTaGFwZShlbnRyeS0+dmFsdWUpOwogICAgICAgICAgICAgICAgIHNl
ZW5TaGFwZXMuc2V0KGlkLCBzaGFwZSk7CiAgICAgICAgICAgICB9IGVsc2UgCiAgICAgICAgICAg
ICAgICAgc2hhcGUgPSBpdGVyLT52YWx1ZTsKQEAgLTEwNSwxMSArODUsMTIgQEAgdm9pZCBIaWdo
RmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJvY2Vzc0xvZwogICAgICAgICBpKys7CiAgICAgfQogCi0g
ICAgZGVsZXRlIGRhdGEtPm1fbG9ja2VyOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIGRvdWJsZSBh
ZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICBpZiAodmVyYm9zZSkKKyAgICBtX2N1cnJlbnRP
ZmZzZXQgPSAwOworCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZG91YmxlIGFmdGVyID0g
Y3VycmVudFRpbWVNUygpOwogICAgICAgICBkYXRhTG9nRigiIFByb2Nlc3NpbmcgdGhlIGxvZyB0
b29rOiAnJWYnIG1zXG4iLCBhZnRlciAtIGJlZm9yZSk7CisgICAgfQogfQogCiB9IC8vbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmgJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTMg
QEAgcHVibGljOgogICAgIAogICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsKICAgICAgICAg
aWYgKG1fY3VycmVudE9mZnNldCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCi0gICAgICAgICAg
ICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKHRydWUsICJMb2cgRnVsbCIpOworICAgICAgICAgICAg
cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiTG9nIEZ1bGwiKTsKICAgICB9CiAKLSAgICB2b2lkIHBy
b2Nlc3NIaWdoRmlkZWxpdHlMb2coYm9vbCBhc3luY2hyb25vdXNseSA9IGZhbHNlLCBTdHJpbmcg
PSAiIik7CisgICAgdm9pZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyk7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBpbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKCk7Ci0gICAgc3RhdGljIHZv
aWQgYWN0dWFsbHlQcm9jZXNzTG9nVGhyZWFkRnVuY3Rpb24odm9pZCopOwogCiAgICAgdW5zaWdu
ZWQgbV9oaWdoRmlkZWxpdHlMb2dTaXplOwogICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcyICsyNiwxMDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaCIKIAorI2luY2x1ZGUgIkluc3BlY3RvckpTVHlw
ZUJ1aWxkZXJzLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLVN0cmluZyBIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVJbkF0T2Zmc2V0KHVuc2lnbmVk
IGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRyX3Qgc291cmNlSUQpCit2
b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBTdHJpbmcgZ2xvYmFsID0gZ2V0R2xvYmFsVHlw
ZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKLSAg
ICBpZiAoIWdsb2JhbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWw7Ci0gICAgCi0g
ICAgcmV0dXJuIGdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJs
ZU5hbWUsIHNvdXJjZUlEKTsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IgPSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVy
blN0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbG9jYXRpb24t
Pm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50ID8gVHlwZVBy
b2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JO
b3JtYWw7CisKKyAgICBkYXRhTG9nRigiW1N0YXJ0LCBFbmRdOjpbJXUsICV1XVxuIiwgbG9jYXRp
b24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOworCisgICAgaWYgKGZpbmRM
b2NhdGlvbihsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9zb3VyY2VJRCwgZGVz
Y3JpcHRvcikpCisgICAgICAgIGRhdGFMb2coIlx0XHRbRW50cnkgSVMgaW4gU3lzdGVtXVxuIik7
CisgICAgZWxzZQorICAgICAgICBkYXRhTG9nKCJcdFx0W0VudHJ5IElTIE5PVCBpbiBzeXN0ZW1d
XG4iKTsKKworICAgIGRhdGFMb2coIlx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlE
ID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA/ICJbUmV0dXJuIFN0YXRlbWVudF0iCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsb2Nh
dGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAi
W1RoaXMgU3RhdGVtZW50XSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6ICJbTm9ybWFsIFN0YXRlbWVudF0iLCAiXG4iKTsKKworICAgIGRhdGFM
b2coIlx0XHQjTG9jYWwjXG5cdFx0IiwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25UeXBlU2V0LT5z
ZWVuVHlwZXMoKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwgIlxuIik7CisgICAgaWYgKGxvY2F0
aW9uLT5tX2dsb2JhbFR5cGVTZXQpCisgICAgICAgIGRhdGFMb2coIlx0XHQjR2xvYmFsI1xuXHRc
dCIsIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPnNlZW5UeXBlcygpLnJlcGxhY2UoIlxuIiwg
IlxuXHRcdCIpLCAiXG4iKTsKIH0KIAotU3RyaW5nIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6
Z2V0R2xvYmFsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBT
dHJpbmcmICwgaW50cHRyX3Qgc291cmNlSUQpCit2b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
cjo6aW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJRCk7Ci0gICAg
aWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuICAiIjsKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZ0YoIlJlZ2lzdGVyaW5nIGxvY2F0aW9uOjogZGl2b3RTdGFydDoldSwgZGl2
b3RFbmQ6JXVcbiIsIGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX2Rpdm90RW5k
KTsKIAotICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0
eU5vR2xvYmFsSURFeGlzdHMpCi0gICAgICAgIHJldHVybiAiIjsKKyAgICBpZiAoIW1fYnVja2V0
TWFwLmNvbnRhaW5zKGxvY2F0aW9uLT5tX3NvdXJjZUlEKSkgeworICAgICAgICBWZWN0b3I8VHlw
ZUxvY2F0aW9uKj4gYnVja2V0OworICAgICAgICBtX2J1Y2tldE1hcC5zZXQobG9jYXRpb24tPm1f
c291cmNlSUQsIGJ1Y2tldCk7CisgICAgfQogCi0gICAgcmV0dXJuIGxvY2F0aW9uLT5tX2dsb2Jh
bFR5cGVTZXQtPnNlZW5UeXBlcygpOworICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiYgYnVja2V0
ID0gbV9idWNrZXRNYXAuZmluZChsb2NhdGlvbi0+bV9zb3VyY2VJRCktPnZhbHVlOworICAgIGJ1
Y2tldC5hcHBlbmQobG9jYXRpb24pOwogfQogCi1TdHJpbmcgSGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGVyOjpnZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29u
c3QgU3RyaW5nJiAsIGludHB0cl90IHNvdXJjZUlEKQordm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IsIHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBz
b3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiYgcmV0KQogewotICAg
IFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBmaW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlEKTsK
KyAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3VyY2VJ
RCwgZGVzY3JpcHRvcik7CiAgICAgaWYgKCFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuICAiIjsK
KyAgICAgICAgcmV0dXJuOwogCi0gICAgcmV0dXJuIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlw
ZVNldC0+c2VlblR5cGVzKCk7CisgICAgaWYgKGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQgJiYg
bG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCAhPSBIaWdoRmlkZWxpdHlOb0dsb2JhbElERXhp
c3RzKSB7CisgICAgICAgIHJldC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGlzcGxheVR5cGVO
YW1lIiksIGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmRpc3BsYXlOYW1lKCkpOworICAgICAg
ICByZXQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZ2xvYmFsUHJpbWl0aXZlVHlwZU5hbWVzIiks
IGxvY2F0aW9uLT5tX2dsb2JhbFR5cGVTZXQtPmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpLT5hc0Fy
cmF5KCkpOworICAgICAgICByZXQtPnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgiZ2xvYmFsU3RydWN0
dXJlcyIpLCBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRh
dGlvbnMoKS0+YXNBcnJheSgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0LT5zZXRTdHJpbmco
QVNDSUlMaXRlcmFsKCJkaXNwbGF5VHlwZU5hbWUiKSwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rpb25U
eXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsKKworICAgIHJldC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFs
KCJsb2NhbFByaW1pdGl2ZVR5cGVOYW1lcyIpLCBsb2NhdGlvbi0+bV9pbnN0cnVjdGlvblR5cGVT
ZXQtPmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpLT5hc0FycmF5KCkpOworICAgIHJldC0+c2V0QXJy
YXkoQVNDSUlMaXRlcmFsKCJsb2NhbFN0cnVjdHVyZXMiKSwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rp
b25UeXBlU2V0LT5hbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKS0+YXNBcnJheSgpKTsKIH0K
IAotdm9pZCBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6Omluc2VydE5ld0xvY2F0aW9uKFR5cGVM
b2NhdGlvbiogbG9jYXRpb24pCitzdGF0aWMgYm9vbCBkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2Nh
dGlvbihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IsIFR5cGVMb2NhdGlv
biogbG9jYXRpb24pCiB7Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2dGKCJSZWdp
c3RlcmluZyBsb2NhdGlvbjo6IGRpdm90U3RhcnQ6JXUsIGRpdm90RW5kOiV1XG4iLCBsb2NhdGlv
bi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9kaXZvdEVuZCk7CisgICAgaWYgKGRlc2NyaXB0
b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuICYmIGxvY2F0
aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50KSAg
CisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFtX2J1Y2tldE1hcC5jb250YWlucyhs
b2NhdGlvbi0+bV9zb3VyY2VJRCkpIHsKLSAgICAgICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+IGJ1
Y2tldDsKLSAgICAgICAgbV9idWNrZXRNYXAuc2V0KGxvY2F0aW9uLT5tX3NvdXJjZUlELCBidWNr
ZXQpOwotICAgIH0KKyAgICBpZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNj
cmlwdG9yVGhpc1N0YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhp
Z2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQpICAKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBW
ZWN0b3I8VHlwZUxvY2F0aW9uKj4mIGJ1Y2tldCA9IG1fYnVja2V0TWFwLmZpbmQobG9jYXRpb24t
Pm1fc291cmNlSUQpLT52YWx1ZTsKLSAgICBidWNrZXQuYXBwZW5kKGxvY2F0aW9uKTsKKyAgICBp
ZiAoZGVzY3JpcHRvciA9PSBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsICYmIGxv
Y2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50
ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5VGhpc1N0YXRl
bWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAot
VHlwZUxvY2F0aW9uKiBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZpbmRMb2NhdGlvbih1bnNp
Z25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQpCitUeXBlTG9jYXRpb24qIEhpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3Vy
Y2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yKQogewotICAgIEFT
U0VSVChtX2J1Y2tldE1hcC5jb250YWlucyhzb3VyY2VJRCkpOyAKKyAgICBRdWVyeUtleSBxdWVy
eUtleShzb3VyY2VJRCwgZGl2b3QpOworICAgIGF1dG8gaXRlciA9IG1fcXVlcnlDYWNoZS5maW5k
KHF1ZXJ5S2V5KTsKKyAgICBpZiAoaXRlciAhPSBtX3F1ZXJ5Q2FjaGUuZW5kKCkpCisgICAgICAg
IHJldHVybiBpdGVyLT52YWx1ZTsKKworICAgIGlmICghbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuaGFzRXhlY3V0ZWRBdE9mZnNldChzb3VyY2VJRCwgZGl2b3QpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIEFTU0VSVChtX2J1Y2tldE1hcC5jb250YWlucyhzb3VyY2VJRCkpOwog
CiAgICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+JiBidWNrZXQgPSBtX2J1Y2tldE1hcC5maW5kKHNv
dXJjZUlEKS0+dmFsdWU7Ci0gICAgdW5zaWduZWQgZGlzdGFuY2UgPSBVSU5UX01BWDsgLy8gQmVj
YXVzZSBhc3NpZ25tZW50cyBtYXkgYmUgbmVzdGVkLCBtYWtlIHN1cmUgd2UgZmluZCB0aGUgY2xv
c2VzdCBlbmNsb3NpbmcgYXNzaWdubWVudCB0byB0aGlzIGNoYXJhY3RlciBvZmZzZXQuCiAgICAg
VHlwZUxvY2F0aW9uKiBiZXN0TWF0Y2ggPSBudWxscHRyOworICAgIHVuc2lnbmVkIGRpc3RhbmNl
ID0gVUlOVF9NQVg7IC8vIEJlY2F1c2UgYXNzaWdubWVudHMgbWF5IGJlIG5lc3RlZCwgbWFrZSBz
dXJlIHdlIGZpbmQgdGhlIGNsb3Nlc3QgZW5jbG9zaW5nIGFzc2lnbm1lbnQgdG8gdGhpcyBjaGFy
YWN0ZXIgb2Zmc2V0LgogICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gYnVja2V0LnNpemUo
KTsgaSA8IHNpemU7IGkrKykgewogICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gYnVj
a2V0LmF0KGkpOwotICAgICAgICBpZiAobG9jYXRpb24tPm1fZGl2b3RTdGFydCA8PSBkaXZvdCAm
JiBkaXZvdCA8PSBsb2NhdGlvbi0+bV9kaXZvdEVuZCAmJiBsb2NhdGlvbi0+bV9kaXZvdEVuZCAt
IGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPD0gZGlzdGFuY2UpIHsKKyAgICAgICAgaWYgKGRlc2Ny
aXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuICYmIGRl
c2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKGRlc2NyaXB0b3IsIGxvY2F0aW9uKSAmJiBsb2Nh
dGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zmc2V0SWZSZXR1cm5TdGF0ZW1lbnQgPT0gZGl2b3Qp
CisgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CisKKyAgICAgICAgaWYgKGxvY2F0aW9uLT5t
X2Rpdm90U3RhcnQgPD0gZGl2b3QgJiYgZGl2b3QgPD0gbG9jYXRpb24tPm1fZGl2b3RFbmQgJiYg
bG9jYXRpb24tPm1fZGl2b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNl
ICYmIGRlc2NyaXB0b3JNYXRjaGVzVHlwZUxvY2F0aW9uKGRlc2NyaXB0b3IsIGxvY2F0aW9uKSkg
ewogICAgICAgICAgICAgZGlzdGFuY2UgPSBsb2NhdGlvbi0+bV9kaXZvdEVuZCAtIGxvY2F0aW9u
LT5tX2Rpdm90U3RhcnQ7CiAgICAgICAgICAgICBiZXN0TWF0Y2ggPSBsb2NhdGlvbjsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIC8vIEZJWE1FOiBCZXN0TWF0Y2ggc2hvdWxkIG5ldmVyIGJlIG51
bGwuIFRoaXMgZG9lc24ndCBob2xkIGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSBzb21lIEV2
YWwvV2l0aC9WYXJJbmplY3Rpb24gdmFyaWFibGUgYXNzaWdubWVudHMuCisgICAgaWYgKGJlc3RN
YXRjaCkKKyAgICAgICAgbV9xdWVyeUNhY2hlLnNldChxdWVyeUtleSwgYmVzdE1hdGNoKTsKKyAg
ICAvLyBGSVhNRTogQmVzdE1hdGNoIHNob3VsZCBuZXZlciBiZSBudWxsIHBhc3QgdGhpcyBwb2lu
dC4gVGhpcyBkb2Vzbid0IGhvbGQgY3VycmVudGx5IGJlY2F1c2Ugd2UgaWdub3JlIHNvbWUgRXZh
bC9XaXRoL1ZhckluamVjdGlvbiB2YXJpYWJsZSBhc3NpZ25tZW50cy4KICAgICByZXR1cm4gYmVz
dE1hdGNoOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaAkocmV2aXNpb24gMTcxMzY4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDMxICsyNyw5MyBAQAogI2RlZmluZSBIaWdoRmlkZWxpdHlU
eXBlUHJvZmlsZXJfaAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCi0jaW5jbHVkZSA8dW5vcmRl
cmVkX21hcD4KKyNpbmNsdWRlICJGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCIKKyNpbmNsdWRl
ICJUeXBlTG9jYXRpb25DYWNoZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL0hhc2hNZXRob2QuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBJbnNwZWN0b3IgeyBuYW1lc3BhY2Ug
VHlwZUJ1aWxkZXIgIHsgbmFtZXNwYWNlIFJ1bnRpbWUgeworY2xhc3MgVHlwZURlc2NyaXB0aW9u
OworfX19CituYW1lc3BhY2UgSW5zcGVjdG9yIHsKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK30K
KwogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFR5cGVMb2NhdGlvbjsKIAotY2xhc3MgSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyIHsKK3N0cnVjdCBRdWVyeUtleSB7CisgICAgUXVlcnlLZXkoKQor
ICAgICAgICA6IG1fc291cmNlSUQoMCkKKyAgICAgICAgLCBtX2Rpdm90KDApCisgICAgeyB9CisK
KyAgICBRdWVyeUtleShpbnRwdHJfdCBzb3VyY2VJRCwgdW5zaWduZWQgZGl2b3QpCisgICAgICAg
IDogbV9zb3VyY2VJRChzb3VyY2VJRCkKKyAgICAgICAgLCBtX2Rpdm90KGRpdm90KQorICAgIHsg
fQorCisgICAgUXVlcnlLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fc291cmNlSUQoSU5UUFRSX01BWCkKKyAgICAgICAgLCBtX2Rpdm90KFVJTlRfTUFYKQor
ICAgIHsgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlSUQgPT0gSU5UUFRSX01BWCAmJiBtX2Rpdm90ID09IFVJTlRfTUFYOyB9Cisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFF1ZXJ5S2V5JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2VJRCA9PSBvdGhlci5tX3NvdXJjZUlEICYmIG1fZGl2b3QgPT0gb3RoZXIubV9kaXZv
dDsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlEICsgbV9k
aXZvdDsgfQorCisgICAgaW50cHRyX3QgbV9zb3VyY2VJRDsKKyAgICB1bnNpZ25lZCBtX2Rpdm90
OworfTsKKworc3RydWN0IFF1ZXJ5S2V5SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgUXVlcnlLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFF1ZXJ5S2V5JiBhLCBjb25zdCBRdWVyeUtleSYgYikgeyByZXR1cm4g
YSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRl
bGV0ZWQgPSB0cnVlOworfTsKKworfSAvL25hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6UXVlcnlLZXk+IHsKKyAgICB0eXBlZGVmIEpTQzo6UXVl
cnlLZXlIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRy
YWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpRdWVyeUtleT4gOiBTaW1w
bGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpRdWVyeUtleT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworbmFtZXNwYWNlIEpTQyB7CiAKK2VudW0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ciB7CisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCA9IDEsCisgICAgVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgPSAyLAorICAgIFR5cGVQcm9m
aWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiA9IDMKK307CisKK2NsYXNzIEhpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlciB7CiBwdWJsaWM6Ci0gICAgU3RyaW5nIGdldFR5cGVzRm9yVmFy
aWFibGVJbkF0T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFt
ZSwgaW50cHRyX3Qgc291cmNlSUQpOwotICAgIFN0cmluZyBnZXRHbG9iYWxUeXBlc0ZvclZhcmlh
YmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBp
bnRwdHJfdCBzb3VyY2VJRCk7Ci0gICAgU3RyaW5nIGdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUF0
T2Zmc2V0KHVuc2lnbmVkIGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRy
X3Qgc291cmNlSUQpOworICAgIHZvaWQgbG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlwZUxvY2F0
aW9uKik7CisgICAgdm9pZCBnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3Io
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwg
aW50cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mKTsK
ICAgICB2b2lkIGluc2VydE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiopOworICAgIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZSogZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCkgeyByZXR1cm4gJm1f
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlOyB9CisgICAgVHlwZUxvY2F0aW9uQ2FjaGUqIHR5cGVM
b2NhdGlvbkNhY2hlKCkgeyByZXR1cm4gJm1fdHlwZUxvY2F0aW9uQ2FjaGU7IH0KICAgICAKIHBy
aXZhdGU6Ci0gICAgVHlwZUxvY2F0aW9uKiBmaW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGlu
dHB0cl90IHNvdXJjZUlEKTsKLQorICAgIFR5cGVMb2NhdGlvbiogZmluZExvY2F0aW9uKHVuc2ln
bmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRv
ciBkZXNjcmlwdG9yKTsKICAgICB0eXBlZGVmIEhhc2hNYXA8aW50cHRyX3QsIFZlY3RvcjxUeXBl
TG9jYXRpb24qPj4gU291cmNlSURUb0xvY2F0aW9uQnVja2V0TWFwOwogICAgIFNvdXJjZUlEVG9M
b2NhdGlvbkJ1Y2tldE1hcCBtX2J1Y2tldE1hcDsKKyAgICBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUgbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7CisgICAgVHlwZUxvY2F0aW9uQ2FjaGUgbV90
eXBlTG9jYXRpb25DYWNoZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UXVlcnlLZXksIFR5cGVMb2Nh
dGlvbio+IFR5cGVMb2NhdGlvblF1ZXJ5Q2FjaGU7CisgICAgVHlwZUxvY2F0aW9uUXVlcnlDYWNo
ZSBtX3F1ZXJ5Q2FjaGU7CiB9OwogCi19IC8vbmFtZXNwYWNlIEpTQworfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcl9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNDgsMzYgKzEwNDgsNzQgQEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNo
YWluTWF5SW50ZXJjZQogICAgIH0KIH0KIAotCi1QYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBT
dHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoKQorUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4g
U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVmVjdG9y
PFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0g
ICAgUHJvcGVydHlUYWJsZSogdGFibGU7Ci0gICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFw
ZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IGJhc2VTaGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8U3RydWN0
dXJlU2hhcGU+IGN1clNoYXBlID0gYmFzZVNoYXBlOworICAgIFN0cnVjdHVyZSogY3VyU3RydWN0
dXJlID0gdGhpczsKKyAgICBKU1ZhbHVlIGN1clZhbHVlID0gdmFsdWU7CisgICAgd2hpbGUgKGN1
clN0cnVjdHVyZSkgeworICAgICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsK
KyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CisgICAgICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlOworCisgICAgICAgIGN1clN0cnVjdHVyZS0+ZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRl
cmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7CisgICAgICAgIGlmICh0
YWJsZSkgeworICAgICAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxl
LT5iZWdpbigpOworICAgICAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFi
bGUtPmVuZCgpOworICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAg
ICAgICAgICAgICAgY3VyU2hhcGUtPmFkZFByb3BlcnR5KGl0ZXItPmtleSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOworICAgICAgICB9Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CisgICAgICAgICAg
ICBpZiAoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQorICAgICAgICAgICAgICAgIGN1clNo
YXBlLT5hZGRQcm9wZXJ0eShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCkpOworICAg
ICAgICB9CiAKLSAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1
Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKLSAgICAKLSAgICBpZiAodGFibGUpIHsKLSAgICAg
ICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOwotICAgICAg
ICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgICAgIGJv
b2wgZm91bmRDdG9yTmFtZSA9IGZhbHNlOworICAgICAgICBpZiAoSlNPYmplY3QqIHByb2ZpbGlu
Z1ZhbCA9IGN1clZhbHVlLmdldE9iamVjdCgpKSB7CisgICAgICAgICAgICBFeGVjU3RhdGUqIGV4
ZWMgPSBwcm9maWxpbmdWYWwtPmdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAgICAg
ICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChzdG9yZWRQcm90b3R5cGUoKSk7CisgICAgICAgICAgICBQ
cm9wZXJ0eU5hbWUgY29uc3RydWN0b3IoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
KTsKKyAgICAgICAgICAgIGlmIChwcm9maWxpbmdWYWwtPmdldFByb3BlcnR5U2xvdChleGVjLCBj
b25zdHJ1Y3Rvciwgc2xvdCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2hhdCBpcyBh
IGN1c3RvbSBwcm9wZXJ0eSBzbG90PworICAgICAgICAgICAgICAgIGlmIChzbG90LmlzVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0cnVjdG9yVmFsdWUgPSBzbG90
LmdldFZhbHVlKGV4ZWMsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNv
bnN0cnVjdG9yVmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChK
U0NlbGwqIGNvbnN0cnVjdG9yQ2VsbCA9IGNvbnN0cnVjdG9yVmFsdWUuYXNDZWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSlNPYmplY3QqIGN0b3JPYmplY3QgPSBjb25z
dHJ1Y3RvckNlbGwtPmdldE9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChKU0Z1bmN0aW9uKiBjb25zdHJ1Y3RvckZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxK
U0Z1bmN0aW9uKj4oY3Rvck9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1clNoYXBlLT5zZXRDb25zdHJ1Y3Rvck5hbWUoY29uc3RydWN0b3JGdW5jdGlvbi0+
Y2FsY3VsYXRlZERpc3BsYXlOYW1lKGV4ZWMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvdW5kQ3Rvck5hbWUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKEludGVybmFsRnVuY3Rpb24qIGNvbnN0cnVjdG9yRnVuY3Rpb24g
PSBqc0R5bmFtaWNDYXN0PEludGVybmFsRnVuY3Rpb24qPihjdG9yT2JqZWN0KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyU2hhcGUtPnNldENvbnN0cnVjdG9yTmFt
ZShjb25zdHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoZXhlYykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDdG9yTmFtZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICBm
b3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgIHNoYXBlLT5hZGRQcm9wZXJ0
eShpdGVyLT5rZXkpOwotICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMuc2l6ZSgp
OyBpLS07KSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsK
LSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCi0gICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKCFmb3VuZEN0b3JOYW1lKQorICAgICAgICAgICAgY3VyU2hh
cGUtPnNldENvbnN0cnVjdG9yTmFtZShjdXJTdHJ1Y3R1cmUtPmNsYXNzSW5mbygpLT5jbGFzc05h
bWUpOwogCi0gICAgICAgIHNoYXBlLT5hZGRQcm9wZXJ0eShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJl
dmlvdXMuZ2V0KCkpOwotICAgIH0KKyAgICAgICAgY3VyU2hhcGUtPm1hcmtBc0ZpbmFsKCk7CisK
KyAgICAgICAgaWYgKGN1clN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlU3RydWN0dXJlKCkpIHsK
KyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gbmV3U2hhcGUgPSBTdHJ1Y3R1cmVT
aGFwZTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBjdXJTaGFwZS0+c2V0UHJvdG8obmV3U2hhcGUp
OworICAgICAgICAgICAgY3VyU2hhcGUgPSBuZXdTaGFwZTsKKyAgICAgICAgICAgIGN1clZhbHVl
ID0gY3VyU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKTsKKyAgICAgICAgfQogCi0gICAgc2hh
cGUtPm1hcmtBc0ZpbmFsKCk7Ci0gICAgcmV0dXJuIHNoYXBlLnJlbGVhc2UoKTsKKyAgICAgICAg
Y3VyU3RydWN0dXJlID0gY3VyU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGJhc2VTaGFwZS5yZWxlYXNlKCk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM5MCw3ICszOTAsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0
Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeSh2bSk7CiAgICAgfQogCi0gICAgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZSgpOworICAgIFBhc3NSZWZQ
dHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSk7CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbkNhY2hlLmgiCisKKyNpbmNsdWRlICJWTS5oIgorCituYW1lc3BhY2UgSlNDIHsK
Kworc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IFR5cGVMb2NhdGlvbkNhY2hlOjpnZXRU
eXBlTG9jYXRpb24oaW50NjRfdCBnbG9iYWxWYXJpYWJsZUlELCBpbnRwdHJfdCBzb3VyY2VJRCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgUGFzc1JlZlB0cjxUeXBlU2V0PiBnbG9iYWxU
eXBlU2V0LCBWTSogdm0pCit7CisgICAgTG9jYXRpb25LZXkga2V5OworICAgIGtleS5tX2dsb2Jh
bFZhcmlhYmxlSUQgPSBnbG9iYWxWYXJpYWJsZUlEOworICAgIGtleS5tX3NvdXJjZUlEID0gc291
cmNlSUQ7CisgICAga2V5Lm1fc3RhcnQgPSBzdGFydDsKKyAgICBrZXkubV9lbmQgPSBlbmQ7CisK
KyAgICBib29sIGlzTmV3TG9jYXRpb24gPSBmYWxzZTsKKyAgICBpZiAobV9sb2NhdGlvbk1hcC5m
aW5kKGtleSkgPT0gbV9sb2NhdGlvbk1hcC5lbmQoKSkgeworICAgICAgICBUeXBlTG9jYXRpb24q
IGxvY2F0aW9uID0gdm0tPm5leHRMb2NhdGlvbigpOworICAgICAgICBsb2NhdGlvbi0+bV9nbG9i
YWxWYXJpYWJsZUlEID0gZ2xvYmFsVmFyaWFibGVJRDsKKyAgICAgICAgbG9jYXRpb24tPm1fc291
cmNlSUQgPSBzb3VyY2VJRDsKKyAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IHN0YXJ0
OworICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEVuZCA9IGVuZDsKKyAgICAgICAgbG9jYXRpb24t
Pm1fZ2xvYmFsVHlwZVNldCA9IGdsb2JhbFR5cGVTZXQ7CisKKyAgICAgICAgbV9sb2NhdGlvbk1h
cFtrZXldID0gbG9jYXRpb247CisgICAgICAgIGlzTmV3TG9jYXRpb24gPSB0cnVlOworICAgIH0K
KworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBtX2xvY2F0aW9uTWFwLmZpbmQoa2V5KS0+
c2Vjb25kOworICAgIHJldHVybiBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4obG9jYXRp
b24sIGlzTmV3TG9jYXRpb24pOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNh
Y2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVHlwZUxvY2F0aW9uQ2FjaGVfaAor
I2RlZmluZSBUeXBlTG9jYXRpb25DYWNoZV9oCisKKyNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIK
KyNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWV0aG9kLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWTTsKKworY2xhc3MgVHlwZUxvY2F0aW9uQ2FjaGUg
eworcHVibGljOgorICAgIHN0cnVjdCBMb2NhdGlvbktleSB7CisgICAgICAgIExvY2F0aW9uS2V5
KCkge30KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IExvY2F0aW9uS2V5JiBvdGhlcikg
Y29uc3QgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dsb2JhbFZhcmlhYmxlSUQg
PT0gb3RoZXIubV9nbG9iYWxWYXJpYWJsZUlECisgICAgICAgICAgICAgICAgICAgJiYgbV9zb3Vy
Y2VJRCA9PSBvdGhlci5tX3NvdXJjZUlECisgICAgICAgICAgICAgICAgICAgJiYgbV9zdGFydCA9
PSBvdGhlci5tX3N0YXJ0CisgICAgICAgICAgICAgICAgICAgJiYgbV9lbmQgPT0gb3RoZXIubV9l
bmQ7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fZ2xvYmFsVmFyaWFibGVJRCArIG1fc291cmNlSUQgKyBt
X3N0YXJ0ICsgbV9lbmQ7CisgICAgICAgIH0KKworICAgICAgICBpbnQ2NF90IG1fZ2xvYmFsVmFy
aWFibGVJRDsKKyAgICAgICAgaW50cHRyX3QgbV9zb3VyY2VJRDsKKyAgICAgICAgdW5zaWduZWQg
bV9zdGFydDsKKyAgICAgICAgdW5zaWduZWQgbV9lbmQ7CisgICAgfTsKKworICAgIHN0ZDo6cGFp
cjxUeXBlTG9jYXRpb24qLCBib29sPiBnZXRUeXBlTG9jYXRpb24oaW50NjRfdCwgaW50cHRyX3Qs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFBhc3NSZWZQdHI8VHlwZVNldD4sIFZNKik7
Citwcml2YXRlOiAgICAgCisgICAgdHlwZWRlZiBzdGQ6OnVub3JkZXJlZF9tYXA8TG9jYXRpb25L
ZXksIFR5cGVMb2NhdGlvbiosIEhhc2hNZXRob2Q8TG9jYXRpb25LZXk+PiBMb2NhdGlvbk1hcDsK
KyAgICBMb2NhdGlvbk1hcCBtX2xvY2F0aW9uTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKKyNlbmRpZiAvLyBUeXBlTG9jYXRpb25DYWNoZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUeXBlU2V0LmgiCiAKKyNp
bmNsdWRlICJJbnNwZWN0b3JKU1R5cGVCdWlsZGVycy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTU4LDggKzU5LDYgQEAgUnVudGltZVR5cGUgVHlwZVNldDo6Z2V0UnVudGlt
ZVR5cGVGb3JWYQogICAgICAgICByZXQgPSBUeXBlTnVtYmVyOwogICAgIGVsc2UgaWYgKHYuaXNT
dHJpbmcoKSkKICAgICAgICAgcmV0ID0gVHlwZVN0cmluZzsKLSAgICBlbHNlIGlmICh2LmlzUHJp
bWl0aXZlKCkpCi0gICAgICAgIHJldCA9IFR5cGVQcmltaXRpdmU7CiAgICAgZWxzZSBpZiAodi5p
c09iamVjdCgpKQogICAgICAgICByZXQgPSBUeXBlT2JqZWN0OwogICAgIGVsc2UKQEAgLTczLDcg
KzcyLDcgQEAgdm9pZCBUeXBlU2V0OjphZGRUeXBlRm9yVmFsdWUoSlNWYWx1ZSB2LAogICAgIFJ1
bnRpbWVUeXBlIHQgPSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKHYpOwogICAgIG1fc2VlblR5cGVz
ID0gbV9zZWVuVHlwZXMgfCB0OwogCi0gICAgaWYgKGlkICYmIHNoYXBlKSB7CisgICAgaWYgKGlk
ICYmIHNoYXBlICYmICF2LmlzU3RyaW5nKCkgJiYgIXYuaXNGdW5jdGlvbigpKSB7CiAgICAgICAg
IEFTU0VSVChtX3N0cnVjdHVyZUlESGlzdG9yeS5pc1ZhbGlkS2V5KGlkKSk7CiAgICAgICAgIGF1
dG8gaXRlciA9IG1fc3RydWN0dXJlSURIaXN0b3J5LmZpbmQoaWQpOwogICAgICAgICBpZiAoaXRl
ciA9PSBtX3N0cnVjdHVyZUlESGlzdG9yeS5lbmQoKSkgewpAQCAtOTUsNyArOTQsNyBAQCB2b2lk
IFR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZShKU1ZhbHVlIHYsCiAgICAgfQogfQogCi1TdHJpbmcg
VHlwZVNldDo6c2VlblR5cGVzKCkgCitTdHJpbmcgVHlwZVNldDo6c2VlblR5cGVzKCkgY29uc3QK
IHsKICAgICBpZiAobV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmcpCiAgICAgICAgIHJldHVybiAi
KFVucmVhY2hlZCBTdGF0ZW1lbnQpIjsKQEAgLTExNiwxNyArMTE1LDEzIEBAIFN0cmluZyBUeXBl
U2V0OjpzZWVuVHlwZXMoKSAKICAgICAgICAgIHNlZW4uYXBwZW5kKCJOdW1iZXIgIik7CiAgICAg
aWYgKG1fc2VlblR5cGVzICYgVHlwZVN0cmluZykKICAgICAgICAgIHNlZW4uYXBwZW5kKCJTdHJp
bmcgIik7Ci0gICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVByaW1pdGl2ZSkKLSAgICAgICAgIHNl
ZW4uYXBwZW5kKCJQcmltaXRpdmUgIik7CiAgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZU9iamVj
dCkKICAgICAgICAgIHNlZW4uYXBwZW5kKCJPYmplY3QgIik7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpOyBpKyspIHsKICAgICAgICAgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiBzaGFwZSA9IG1fc3RydWN0dXJlSGlzdG9yeS0+YXQoaSk7Ci0g
ICAgICAgIGlmICghc2hhcGUtPm1fY29uc3RydWN0b3JOYW1lLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgc2Vlbi5hcHBlbmQoc2hhcGUtPm1fY29uc3RydWN0b3JOYW1lKTsKLSAgICAgICAgICAg
IHNlZW4uYXBwZW5kKCIgIik7Ci0gICAgICAgIH0KKyAgICAgICAgc2Vlbi5hcHBlbmQoc2hhcGUt
Pm1fY29uc3RydWN0b3JOYW1lKTsKKyAgICAgICAgc2Vlbi5hcHBlbmQoIiAiKTsKICAgICB9CiAK
ICAgICBpZiAobV9zdHJ1Y3R1cmVIaXN0b3J5LT5zaXplKCkpIApAQCAtMTM5LDIwICsxMzQsMTMx
IEBAIFN0cmluZyBUeXBlU2V0OjpzZWVuVHlwZXMoKSAKICAgICAgICAgc2Vlbi5hcHBlbmQoIl0i
KTsKIAogICAgIGlmIChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSkgewotICAgICAgICBzZWVu
LmFwcGVuZCgiXG5MVUI6ICIpOwotICAgICAgICBzZWVuLmFwcGVuZChTdHJ1Y3R1cmVTaGFwZTo6
bGVhc3RVcHBlckJvdW5kKG1fc3RydWN0dXJlSGlzdG9yeSkpOworICAgICAgICBzZWVuLmFwcGVu
ZCgiXG5MZWFzdCBDb21tb24gQW5jZXN0b3I6ICIpOworICAgICAgICBzZWVuLmFwcGVuZChsZWFz
dENvbW1vbkFuY2VzdG9yKCkpOwogICAgIH0KIAogICAgIHJldHVybiBzZWVuLnRvU3RyaW5nKCk7
CiB9CiAKK2Jvb2wgVHlwZVNldDo6ZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3QgdGVzdCkgY29u
c3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBvdXIgc2VlbiB0eXBlcyBjb25m
b3JtICB0byB0aGUgdHlwZXMgZGVzY3JpYmVkIGJ5IHRoZSB0ZXN0IGJpdHN0cmluZy4gKGkuZSB3
ZSBoYXZlbid0IHNlZW4gbW9yZSB0eXBlcyB0aGFuIHRlc3QpLgorICAgIC8vIFdlIGFyZSA8PSB0
byB0aG9zZSB0eXBlcyBpZiBBTkRpbmcgd2l0aCB0aGUgYml0c3RyaW5nIGRvZXNuJ3QgemVybyBv
dXQgYW55IG9mIG91ciBiaXRzLgorCisgICAgLy8gRm9yIGV4YW1wbGU6CisKKyAgICAvLyAwYjAx
MTAgKHNlZW4pCisgICAgLy8gMGIxMTExICh0ZXN0KQorICAgIC8vIC0tLS0tLSAoQU5EKQorICAg
IC8vIDBiMDExMCA9PSBzZWVuCisKKyAgICAvLyAwYjAxMTAgKHNlZW4pCisgICAgLy8gMGIwMDEw
ICh0ZXN0KQorICAgIC8vIC0tLS0tLSAoQU5EKQorICAgIC8vIDBiMDAxMCAhPSBzZWVuCisKKyAg
ICByZXR1cm4gKG1fc2VlblR5cGVzICYgdGVzdCkgPT0gbV9zZWVuVHlwZXM7Cit9CisKK1N0cmlu
ZyBUeXBlU2V0OjpkaXNwbGF5TmFtZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fc2VlblR5cGVzID09
IFR5cGVOb3RoaW5nKQorICAgICAgICByZXR1cm4gIiI7CisKKyAgICBpZiAobV9zdHJ1Y3R1cmVI
aXN0b3J5LT5zaXplKCkgJiYgZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVjdCB8IFR5cGVOdWxs
IHwgVHlwZVVuZGVmaW5lZCkpIHsKKyAgICAgICAgU3RyaW5nIGN0b3JOYW1lID0gbGVhc3RDb21t
b25BbmNlc3RvcigpOyAKKworICAgICAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVj
dCkpCisgICAgICAgICAgICByZXR1cm4gY3Rvck5hbWU7CisgICAgICAgIGVsc2UgaWYgKGRvZXNU
eXBlQ29uZm9ybVRvKFR5cGVPYmplY3QgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAg
ICAgICAgICAgcmV0dXJuIGN0b3JOYW1lICsgIj8iOworICAgIH0KKworICAgIC8vIFRoZSBvcmRl
ciBvZiB0aGVzZSBjaGVja3MgYXJlIGltcG9ydGFudC4gRm9yIGV4YW1wbGUsIGlmIGEgdmFsdWUg
aXMgb25seSBhIGZ1bmN0aW9uLCBpdCBjb25mb3JtcyB0byBUeXBlRnVuY3Rpb24sIGJ1dCBpdCBh
bHNvIGNvbmZvcm1zIHRvIFR5cGVGdW5jdGlvbiB8IFR5cGVOdWxsLgorICAgIC8vIFRoZXJlZm9y
ZSwgbW9yZSBzcGVjaWZpYyB0eXBlcyBtdXN0IGJlIGNoZWNrZWQgZmlyc3QuCisKKyAgICBpZiAo
ZG9lc1R5cGVDb25mb3JtVG8oVHlwZUZ1bmN0aW9uKSkKKyAgICAgICAgcmV0dXJuICJGdW5jdGlv
biI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVVbmRlZmluZWQpKQorICAgICAgICBy
ZXR1cm4gIlVuZGVmaW5lZCI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdWxsKSkK
KyAgICAgICAgcmV0dXJuICJOdWxsIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUJv
b2xlYW4pKQorICAgICAgICByZXR1cm4gIkJvb2xlYW4iOworICAgIGlmIChkb2VzVHlwZUNvbmZv
cm1UbyhUeXBlTWFjaGluZUludCkpCisgICAgICAgIHJldHVybiAiSW50ZWdlciI7CisgICAgaWYg
KGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1iZXIgfCBUeXBlTWFjaGluZUludCkpCisgICAgICAg
IHJldHVybiAiTnVtYmVyIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVN0cmluZykp
CisgICAgICAgIHJldHVybiAiU3RyaW5nIjsKKworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhU
eXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIig/KSI7CisKKyAgICBp
ZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZUZ1bmN0aW9uIHwgVHlwZU51bGwgfCBUeXBlVW5kZWZp
bmVkKSkKKyAgICAgICAgcmV0dXJuICJGdW5jdGlvbj8iOworICAgIGlmIChkb2VzVHlwZUNvbmZv
cm1UbyhUeXBlQm9vbGVhbiB8IFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJl
dHVybiAiQm9vbGVhbj8iOworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTWFjaGluZUlu
dCB8IFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiAiSW50ZWdlcj8i
OworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlTnVtYmVyIHwgVHlwZU1hY2hpbmVJbnQg
fCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIk51bWJlcj8iOwor
ICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlU3RyaW5nIHwgVHlwZU51bGwgfCBUeXBlVW5k
ZWZpbmVkKSkKKyAgICAgICAgcmV0dXJuICJTdHJpbmc/IjsKKyAgIAorICAgIGlmIChkb2VzVHlw
ZUNvbmZvcm1UbyhUeXBlT2JqZWN0IHwgVHlwZUZ1bmN0aW9uIHwgVHlwZVN0cmluZykpCisgICAg
ICAgIHJldHVybiAiT2JqZWN0IjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVj
dCB8IFR5cGVGdW5jdGlvbiB8IFR5cGVTdHJpbmcgfCBUeXBlTnVsbCB8IFR5cGVVbmRlZmluZWQp
KQorICAgICAgICByZXR1cm4gIk9iamVjdD8iOworCisgICAgcmV0dXJuICIobWFueSkiOworfQor
CitQYXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IFR5cGVT
ZXQ6OmFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0Cit7CisgICAgUmVmUHRyPEluc3BlY3Rv
cjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IHNlZW4gPSBJbnNwZWN0b3I6OlR5cGVCdWls
ZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBl
RnVuY3Rpb24pCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJGdW5jdGlvbiIpOworICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVVbmRlZmluZWQpCisgICAgICAgICBzZWVuLT5hZGRJdGVtKCJVbmRl
ZmluZWQiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVsbCkKKyAgICAgICAgIHNlZW4t
PmFkZEl0ZW0oIk51bGwiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlQm9vbGVhbikKKyAg
ICAgICAgIHNlZW4tPmFkZEl0ZW0oIkJvb2xlYW4iKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBU
eXBlTWFjaGluZUludCkKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkludGVnZXIiKTsKKyAgICBp
ZiAobV9zZWVuVHlwZXMgJiBUeXBlTnVtYmVyKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiTnVt
YmVyIik7CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVN0cmluZykKKyAgICAgICAgIHNlZW4t
PmFkZEl0ZW0oIlN0cmluZyIpOworCisgICAgcmV0dXJuIHNlZW4ucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6SW5zcGVj
dG9yT2JqZWN0Pj4gVHlwZVNldDo6YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3QK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpJ
bnNwZWN0b3JPYmplY3Q+PiByZXQgPSBJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxJbnNw
ZWN0b3I6Okluc3BlY3Rvck9iamVjdD46OmNyZWF0ZSgpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKTsgaSsrKQorICAgICAgICByZXQtPmFk
ZEl0ZW0obV9zdHJ1Y3R1cmVIaXN0b3J5LT5hdChpKS0+aW5zcGVjdG9yUmVwcmVzZW50YXRpb24o
KSk7CisKKyAgICByZXR1cm4gcmV0LnJlbGVhc2UoKTsKK30KKworU3RyaW5nIFR5cGVTZXQ6Omxl
YXN0Q29tbW9uQW5jZXN0b3IoKSBjb25zdAoreworICAgIHJldHVybiBTdHJ1Y3R1cmVTaGFwZTo6
bGVhc3RDb21tb25BbmNlc3RvcihtX3N0cnVjdHVyZUhpc3RvcnkpOworfQorCiB2b2lkIFR5cGVT
ZXQ6OmR1bXBTZWVuVHlwZXMoKQogewogICAgIGRhdGFMb2coc2VlblR5cGVzKCksICJcbiIpOwog
fQogCiBTdHJ1Y3R1cmVTaGFwZTo6U3RydWN0dXJlU2hhcGUoKQotICAgIDogbV9wcm9wZXJ0eUhh
c2gobnVsbHB0cikKKyAgICA6IG1fcHJvdG8obnVsbHB0cikKKyAgICAsIG1fcHJvcGVydHlIYXNo
KG51bGxwdHIpCiAgICAgLCBtX2ZpbmFsKGZhbHNlKQogewogfQpAQCAtMTY2LDcgKzI3Miw3IEBA
IHZvaWQgU3RydWN0dXJlU2hhcGU6Om1hcmtBc0ZpbmFsKCkKIHZvaWQgU3RydWN0dXJlU2hhcGU6
OmFkZFByb3BlcnR5KFJlZlB0cjxTdHJpbmdJbXBsPiBpbXBsKQogewogICAgIEFTU0VSVCghbV9m
aW5hbCk7Ci0gICAgbV9maWVsZHMuc2V0KGltcGwsIHRydWUpOworICAgIG1fZmllbGRzLmFwcGVu
ZChpbXBsKTsKIH0KIAogU3RyaW5nIFN0cnVjdHVyZVNoYXBlOjpwcm9wZXJ0eUhhc2goKSAKQEAg
LTE3Nyw1MyArMjgzLDc3IEBAIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6cHJvcGVydHlIYXNoKCkg
CiAKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVpbGRlci5hcHBlbmQoIjoiKTsK
KyAgICBidWlsZGVyLmFwcGVuZChtX2NvbnN0cnVjdG9yTmFtZSk7CisgICAgYnVpbGRlci5hcHBl
bmQoIjoiKTsKKyAgICAKICAgICBmb3IgKGF1dG8gaXRlciA9IG1fZmllbGRzLmJlZ2luKCksIGVu
ZCA9IG1fZmllbGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFN0cmlu
ZyBwcm9wZXJ0eSA9IFN0cmluZyhpdGVyLT5rZXkpOworICAgICAgICBTdHJpbmcgcHJvcGVydHkg
PSBTdHJpbmcoKCppdGVyKSk7CiAgICAgICAgIHByb3BlcnR5LnJlcGxhY2UoIjoiLCAiXFw6Iik7
IC8vIEVuc3VyZSB0aGF0IGhhc2goeyJmb286IiwgImJhciJ9KSAhPSBoYXNoKHsiZm9vIiwgIjpi
YXIifSkgYmVjYXVzZSB3ZSdyZSB1c2luZyBjb2xvbnMgYXMgYSBzZXBhcmF0b3IgYW5kIGNvbG9u
cyBhcmUgbGVnYWwgY2hhcmFjdGVycyBpbiBmaWVsZCBuYW1lcyBpbiBKUy4KICAgICAgICAgYnVp
bGRlci5hcHBlbmQocHJvcGVydHkpOwogICAgIH0KIAorICAgIGlmIChtX3Byb3RvKSB7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCI6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJfX3Byb3Rv
X18iKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9wcm90by0+cHJvcGVydHlIYXNoKCkpOwor
ICAgIH0KKwogICAgIG1fcHJvcGVydHlIYXNoID0gc3RkOjptYWtlX3VuaXF1ZTxTdHJpbmc+KGJ1
aWxkZXIudG9TdHJpbmcoKSk7CiAgICAgcmV0dXJuICptX3Byb3BlcnR5SGFzaDsKIH0KIAotU3Ry
aW5nIFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQoVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1
cmVTaGFwZT4+KiBzaGFwZXMpCitTdHJpbmcgU3RydWN0dXJlU2hhcGU6OmxlYXN0Q29tbW9uQW5j
ZXN0b3IoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBzaGFwZXMpCiB7CiAg
ICAgaWYgKCFzaGFwZXMtPnNpemUoKSkKICAgICAgICAgcmV0dXJuICIiOwogCi0gICAgU3RyaW5n
QnVpbGRlciBsdWI7CiAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBvcmlnaW4gPSBzaGFwZXMt
PmF0KDApOwotICAgIGx1Yi5hcHBlbmQoInsiKTsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG9yaWdp
bi0+bV9maWVsZHMuYmVnaW4oKSwgZW5kID0gb3JpZ2luLT5tX2ZpZWxkcy5lbmQoKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewotICAgICAgICBib29sIHNob3VsZEFkZCA9IHRydWU7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAxLCBzaXplID0gc2hhcGVzLT5zaXplKCk7IGkgPCBzaXplOyBpKysp
IHsKLSAgICAgICAgICAgIC8vIElmIGFsbCBvdGhlciBTaGFwZXMgaGF2ZSB0aGUgc2FtZSBmaWVs
ZCBhcyBvcmlnaW4sIGFkZCBpdCB0byB0aGUgbGVhc3QgdXBwZXIgYm91bmQuCi0gICAgICAgICAg
ICBpZiAoIXNoYXBlcy0+YXQoaSktPm1fZmllbGRzLmNvbnRhaW5zKGl0ZXItPmtleSkpIHsKLSAg
ICAgICAgICAgICAgICBzaG91bGRBZGQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
KyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHNoYXBlcy0+c2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgYm9vbCBmb3VuZExVQiA9IGZhbHNlOworICAgICAgICB3aGlsZSAoIWZvdW5kTFVCKSB7Cisg
ICAgICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IGNoZWNrID0gc2hhcGVzLT5hdChpKTsK
KyAgICAgICAgICAgIFN0cmluZyBjdXJDdG9yTmFtZSA9IG9yaWdpbi0+bV9jb25zdHJ1Y3Rvck5h
bWU7CisgICAgICAgICAgICB3aGlsZSAoY2hlY2spIHsKKyAgICAgICAgICAgICAgICBpZiAoY2hl
Y2stPm1fY29uc3RydWN0b3JOYW1lID09IGN1ckN0b3JOYW1lKSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kTFVCID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNoZWNrID0gY2hlY2stPm1fcHJvdG87CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kTFVCKSB7CisgICAgICAgICAgICAgICAg
b3JpZ2luID0gb3JpZ2luLT5tX3Byb3RvOworICAgICAgICAgICAgICAgIC8vIEFsbCBPYmplY3Rz
IG11c3Qgc2hhcmUgdGhlICdPYmplY3QnIFByb3RvdHlwZS4gVGhlcmVmb3JlLCBhdCB0aGUgdmVy
eSBsZWFzdCwgd2Ugc2hvdWxkIGFsd2F5cyBjb252ZXJnZSBvbiAnT2JqZWN0JyBiZWZvcmUgcmVh
Y2hpbmcgYSBudWxsIHByb3RvdHlwZS4KKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChv
cmlnaW4pOyAKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAoc2hvdWxkQWRk
KQotICAgICAgICAgICAgbHViLmFwcGVuZChTdHJpbmcoaXRlci0+a2V5LmdldCgpKSArIFN0cmlu
ZygiLCAiKSk7Ci0gICAgfQogCi0gICAgaWYgKGx1Yi5sZW5ndGgoKSA+PSAzKQotICAgICAgICBs
dWIucmVzaXplKGx1Yi5sZW5ndGgoKSAtIDIpOyAvLyBSZW1vdmUgdGhlIHRyYWlsaW5nICcsICcK
KyAgICAgICAgaWYgKG9yaWdpbi0+bV9jb25zdHJ1Y3Rvck5hbWUgPT0gIk9iamVjdCIpCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CiAKLSAgICBsdWIuYXBwZW5kKCJ9Iik7Ci0gICAgCi0gICAg
cmV0dXJuIGx1Yi50b1N0cmluZygpOworICAgIHJldHVybiBvcmlnaW4tPm1fY29uc3RydWN0b3JO
YW1lOwogfQogCiBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0aW9uKCkK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHJlcHJlc2VudGF0aW9uOworICAgIFJlZlB0cjxTdHJ1Y3R1
cmVTaGFwZT4gY3VyU2hhcGUgPSB0aGlzOworCiAgICAgcmVwcmVzZW50YXRpb24uYXBwZW5kKCJ7
Iik7Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBtX2ZpZWxk
cy5lbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBTdHJpbmcgcHJvcChpdGVy
LT5rZXkuZ2V0KCkpOwotICAgICAgICByZXByZXNlbnRhdGlvbi5hcHBlbmQocHJvcCk7Ci0gICAg
ICAgIHJlcHJlc2VudGF0aW9uLmFwcGVuZCgiLCAiKTsKKyAgICB3aGlsZSAoY3VyU2hhcGUpIHsK
KyAgICAgICAgZm9yIChhdXRvIGl0ZXIgPSBjdXJTaGFwZS0+bV9maWVsZHMuYmVnaW4oKSwgZW5k
ID0gY3VyU2hhcGUtPm1fZmllbGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAg
ICAgICAgICBTdHJpbmcgcHJvcCgoKml0ZXIpLmdldCgpKTsKKyAgICAgICAgICAgIHJlcHJlc2Vu
dGF0aW9uLmFwcGVuZChwcm9wKTsKKyAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uLmFwcGVuZCgi
LCAiKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjdXJTaGFwZS0+bV9wcm90bykgeworICAg
ICAgICAgICAgU3RyaW5nIHByb3QgPSBTdHJpbmcoIl9fcHJvdG9fXyIpICsgU3RyaW5nKCIgWyIp
ICsgY3VyU2hhcGUtPm1fcHJvdG8tPm1fY29uc3RydWN0b3JOYW1lICsgU3RyaW5nKCJdIik7Cisg
ICAgICAgICAgICByZXByZXNlbnRhdGlvbi5hcHBlbmQocHJvdCk7CisgICAgICAgICAgICByZXBy
ZXNlbnRhdGlvbi5hcHBlbmQoIiwgIik7CisgICAgICAgIH0KKworICAgICAgICBjdXJTaGFwZSA9
IGN1clNoYXBlLT5tX3Byb3RvOwogICAgIH0KIAogICAgIGlmIChyZXByZXNlbnRhdGlvbi5sZW5n
dGgoKSA+PSAzKQpAQCAtMjM0LDQgKzM2NCwzMCBAQCBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnN0
cmluZ1JlcHJlc2VudGF0CiAgICAgcmV0dXJuIHJlcHJlc2VudGF0aW9uLnRvU3RyaW5nKCk7CiB9
CiAKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IFN0cnVjdHVyZVNoYXBl
OjppbnNwZWN0b3JSZXByZXNlbnRhdGlvbigpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiBiYXNlID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4gY3VycmVudE9iamVjdCA9
IGJhc2U7CisgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBjdXJyZW50U2hhcGUgPSB0aGlzOwor
CisgICAgd2hpbGUgKGN1cnJlbnRTaGFwZSkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpU
eXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gZmllbGRzID0gSW5zcGVjdG9yOjpUeXBlQnVpbGRl
cjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgICAgIGZvciAoYXV0byBpdGVyID0gY3Vy
cmVudFNoYXBlLT5tX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBjdXJyZW50U2hhcGUtPm1fZmllbGRz
LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICAgICAgZmllbGRzLT5hZGRJdGVt
KCgqaXRlcikuZ2V0KCkpOworCisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgiZmllbGRzIiksIGZpZWxkcy0+YXNBcnJheSgpKTsKKyAgICAgICAgY3VycmVudE9i
amVjdC0+c2V0U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiY29uc3RydWN0b3JOYW1lIiksIGN1cnJlbnRT
aGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOworCisgICAgICAgIGlmIChjdXJyZW50U2hhcGUtPm1f
cHJvdG8pIHsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4g
bmV4dE9iamVjdCA9IEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9iamVjdChBU0NJSUxpdGVyYWwoInByb3RvdHlwZVN0
cnVjdHVyZSIpLCBuZXh0T2JqZWN0KTsKKyAgICAgICAgICAgIGN1cnJlbnRPYmplY3QgPSBuZXh0
T2JqZWN0OworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNoYXBlID0gY3VycmVudFNoYXBl
LT5tX3Byb3RvOworICAgIH0KKworICAgIHJldHVybiBiYXNlLnJlbGVhc2UoKTsKK30KKwogfSAv
L25hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0
LmgJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMTUgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKK25hbWVzcGFjZSBJ
bnNwZWN0b3IgeyBuYW1lc3BhY2UgVHlwZUJ1aWxkZXIgIHsgCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgQXJyYXk7Cit9fQorCituYW1lc3BhY2UgSW5zcGVjdG9yIHsgCitjbGFzcyBJbnNw
ZWN0b3JPYmplY3Q7Cit9CisKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1ZhbHVlOwpAQCAt
NDUsOCArNTQsNyBAQCBlbnVtIFJ1bnRpbWVUeXBlIHsKICAgICBUeXBlTWFjaGluZUludCAgICAg
ICAgID0gMHgxMCwKICAgICBUeXBlTnVtYmVyICAgICAgICAgICAgID0gMHgyMCwKICAgICBUeXBl
U3RyaW5nICAgICAgICAgICAgID0gMHg0MCwKLSAgICBUeXBlUHJpbWl0aXZlICAgICAgICAgID0g
MHg4MCwKLSAgICBUeXBlT2JqZWN0ICAgICAgICAgICAgID0gMHgxMDAKKyAgICBUeXBlT2JqZWN0
ICAgICAgICAgICAgID0gMHg4MAogfTsKIAogY2xhc3MgU3RydWN0dXJlU2hhcGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxTdHJ1Y3R1cmVTaGFwZT4gewpAQCAtNTksMTIgKzY3LDE3IEBAIHB1YmxpYzoK
ICAgICBTdHJpbmcgcHJvcGVydHlIYXNoKCk7CiAgICAgdm9pZCBtYXJrQXNGaW5hbCgpOwogICAg
IHZvaWQgYWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+KTsKLSAgICBzdGF0aWMgU3RyaW5n
IGxlYXN0VXBwZXJCb3VuZChWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qKTsKICAgICBT
dHJpbmcgc3RyaW5nUmVwcmVzZW50YXRpb24oKTsKLSAgICB2b2lkIHNldENvbnN0cnVjdG9yTmFt
ZShTdHJpbmcgbmFtZSkgeyBtX2NvbnN0cnVjdG9yTmFtZSA9IG5hbWU7IH0KKyAgICBQYXNzUmVm
UHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0PiBpbnNwZWN0b3JSZXByZXNlbnRhdGlvbigp
OworICAgIHZvaWQgc2V0Q29uc3RydWN0b3JOYW1lKFN0cmluZyBuYW1lKSB7IG1fY29uc3RydWN0
b3JOYW1lID0gKG5hbWUuaXNFbXB0eSgpID8gIk9iamVjdCIgOiBuYW1lKTsgfQorICAgIFN0cmlu
ZyBjb25zdHJ1Y3Rvck5hbWUoKSB7IHJldHVybiBtX2NvbnN0cnVjdG9yTmFtZTsgfQorICAgIHZv
aWQgc2V0UHJvdG8oUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGUpIHsgbV9wcm90byA9
IHNoYXBlOyB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaE1hcDxSZWZQdHI8U3RyaW5nSW1wbD4sIGJv
b2w+IG1fZmllbGRzOyAgICAgICAgIAorICAgIHN0YXRpYyBTdHJpbmcgbGVhc3RDb21tb25BbmNl
c3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qKTsKKworICAgIFZlY3Rv
cjxSZWZQdHI8U3RyaW5nSW1wbD4+IG1fZmllbGRzOworICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4gbV9wcm90bzsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RyaW5nPiBtX3Byb3BlcnR5SGFzaDsK
ICAgICBTdHJpbmcgbV9jb25zdHJ1Y3Rvck5hbWU7CiAgICAgYm9vbCBtX2ZpbmFsOwpAQCAtNzcs
MTEgKzkwLDE3IEBAIHB1YmxpYzoKICAgICBUeXBlU2V0KCk7CiAgICAgdm9pZCBhZGRUeXBlRm9y
VmFsdWUoSlNWYWx1ZSB2LCBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiwgU3RydWN0dXJlSUQp
OwogICAgIHN0YXRpYyBSdW50aW1lVHlwZSBnZXRSdW50aW1lVHlwZUZvclZhbHVlKEpTVmFsdWUp
OwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmcgc2VlblR5cGVzKCkgY29uc3Q7CisgICAgU3RyaW5nIGRpc3BsYXlO
YW1lKCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJh
eTxTdHJpbmc+PiBhbGxQcmltaXRpdmVUeXBlTmFtZXMoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
Pj4gYWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCkgY29uc3Q7CiAKIHByaXZhdGU6Ci0gICAg
dWludDMyX3QgbV9zZWVuVHlwZXM7CisgICAgU3RyaW5nIGxlYXN0Q29tbW9uQW5jZXN0b3IoKSBj
b25zdDsKICAgICB2b2lkIGR1bXBTZWVuVHlwZXMoKTsKKyAgICBib29sIGRvZXNUeXBlQ29uZm9y
bVRvKHVpbnQzMl90IHRlc3QpIGNvbnN0OworCisgICAgdWludDMyX3QgbV9zZWVuVHlwZXM7CiAg
ICAgVmVjdG9yPFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+KiBtX3N0cnVjdHVyZUhpc3Rvcnk7CiAg
ICAgSGFzaE1hcDxTdHJ1Y3R1cmVJRCwgdWludDhfdD4gbV9zdHJ1Y3R1cmVJREhpc3Rvcnk7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTcxMzY4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MjYsNDMgKzkyNiwxNiBAQCB2b2lkIFZNOjpzZXRFbmFibGVkUHJvZmlsZXIoTGVnYWN5
UHJvZmlsCiAgICAgfQogfQogCi1TdHJpbmcgVk06OmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNl
dCh1bnNpZ25lZCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlEQXNTdHJpbmcpCi17Ci0gICAgaWYgKCFpc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKQotICAgICAgICByZXR1cm4gIihOb3QgUHJvZmlsaW5nKSI7Ci0KLSAgICBi
b29sIG9rYXk7Ci0gICAgaW50cHRyX3Qgc291cmNlSUQgPSBzb3VyY2VJREFzU3RyaW5nLnRvSW50
UHRyU3RyaWN0KCZva2F5KTsKLSAgICBpZiAoIW9rYXkpCi0gICAgICAgIENSQVNIKCk7Ci0KLSAg
ICB1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCk7Ci0gICAgcmV0dXJuIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVyLT5nZXRUeXBlc0ZvclZhcmlhYmxlSW5BdE9mZnNldChvZmZz
ZXQsIHZhcmlhYmxlTmFtZSwgc291cmNlSUQpOwotfQotCi12b2lkIFZNOjp1cGRhdGVIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCkKLXsKLSAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRo
SGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGhpZ2hGaWRlbGl0eUxvZygp
LT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGZhbHNlLCAiVk0gVXBkYXRlIik7Ci19Ci0KIHZvaWQg
Vk06OmR1bXBIaWdoRmlkZWxpdHlQcm9maWxpbmdUeXBlcygpCiB7CiAgICAgaWYgKCFpc1Byb2Zp
bGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICB1cGRh
dGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCk7CisgICAgaGlnaEZpZGVsaXR5TG9nKCkt
PnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coIlZNIER1bXAgVHlwZXMiKTsKICAgICBIaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIqIHByb2ZpbGVyID0gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuZ2V0
KCk7CiAgICAgZm9yIChCYWc8VHlwZUxvY2F0aW9uPjo6aXRlcmF0b3IgaXRlciA9IG1fbG9jYXRp
b25JbmZvLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKSB7CiAgICAgICAgIFR5cGVMb2NhdGlvbiog
bG9jYXRpb24gPSAqaXRlcjsKLSAgICAgICAgZGF0YUxvZ0YoIltTdGFydCwgRW5kXTo6WyV1LCAl
dV0gIiwgbG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOwotICAg
ICAgICBkYXRhTG9nKCJcblx0XHQjTG9jYWwjXG5cdFx0IiwKLSAgICAgICAgICAgICAgICBwcm9m
aWxlci0+Z2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQobG9jYXRpb24tPm1fZGl2b3RT
dGFydCwgIiIsIGxvY2F0aW9uLT5tX3NvdXJjZUlEKS5yZXBsYWNlKCJcbiIsICJcblx0XHQiKSwK
LSAgICAgICAgICAgICAgICAiXG5cdFx0I0dsb2JhbCNcblx0XHQiLAotICAgICAgICAgICAgICAg
IHByb2ZpbGVyLT5nZXRHbG9iYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQobG9jYXRpb24tPm1f
ZGl2b3RTdGFydCwgIiIsIGxvY2F0aW9uLT5tX3NvdXJjZUlEKS5yZXBsYWNlKCJcbiIsICJcblx0
XHQiKSwKLSAgICAgICAgICAgICAgICAiXG4iKTsKKyAgICAgICAgcHJvZmlsZXItPmxvZ1R5cGVz
Rm9yVHlwZUxvY2F0aW9uKGxvY2F0aW9uKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtNTE1LDEwICs1MTUsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgQnVpbHRpbkV4ZWN1dGFibGVzKiBidWlsdGluRXhlY3V0YWJs
ZXMoKSB7IHJldHVybiBtX2J1aWx0aW5FeGVjdXRhYmxlcy5nZXQoKTsgfQogCiAgICAgICAgIGJv
b2wgaXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSB7IHJldHVybiAhIW1faGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyOyB9Ci0gICAgICAgIFN0cmluZyBnZXRUeXBlc0ZvclZhcmlhYmxl
QXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFyaWFibGVOYW1lLCBjb25z
dCBTdHJpbmcmIHNvdXJjZUlEKTsKICAgICAgICAgSGlnaEZpZGVsaXR5TG9nKiBoaWdoRmlkZWxp
dHlMb2coKSB7IHJldHVybiBtX2hpZ2hGaWRlbGl0eUxvZy5nZXQoKTsgfQogICAgICAgICBIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXIqIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcigpIHsgcmV0dXJu
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyLmdldCgpOyB9Ci0gICAgICAgIHZvaWQgdXBkYXRl
SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSgpOwogICAgICAgICBUeXBlTG9jYXRpb24qIG5l
eHRMb2NhdGlvbigpIHsgcmV0dXJuIG1fbG9jYXRpb25JbmZvLmFkZCgpOyB9IC8vVE9ETzogcG9z
c2libGUgb3B0bWl6YXRpb246IHdoZW4gY29kZWJsb2NrcyBkaWUsIHJlcG9ydCB3aGljaCBsb2Nh
dGlvbnMgYXJlIG5vIGxvbmdlciBiZWluZyBjaGFuZ2VkIHNvIHdlIGRvbid0IHdhbGsgb3ZlciB0
aGVtCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcEhpZ2hGaWRlbGl0eVByb2Zp
bGluZ1R5cGVzKCk7CiAgICAgICAgIGludDY0X3QgZ2V0TmV4dFVuaXF1ZVZhcmlhYmxlSUQoKSB7
IHJldHVybiBtX25leHRVbmlxdWVWYXJpYWJsZUlEKys7IH0K
</data>
<flag name="review"
          id="259897"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
    <flag name="commit-queue"
          id="259898"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235332</attachid>
            <date>2014-07-22 18:29:10 -0700</date>
            <delta_ts>2014-07-23 21:50:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>92678</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcxMzcxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMCBA
QAorMjAxNC0wNy0yMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIGltcHJvdmVtZW50cyB0byBUeXBlIFByb2ZpbGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0ODYwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSSBpbXByb3ZlZCB0aGUgQVBJIGJldHdlZW4g
dGhlIGluc3BlY3RvciBhbmQgSlNDLiBXZSBubyBsb25nZXIgc2VuZCBvbmUgaHVnZQorICAgICAg
ICBzdHJpbmcgdG8gdGhlIGluc3BlY3Rvci4gV2Ugbm93IHNlbmQgc3RydWN0dXJlZCBkYXRhIHRo
YXQgcmVwcmVzZW50cyB0aGUgdHlwZQorICAgICAgICBpbmZvcm1hdGlvbiB0aGF0IEpTQyBoYXMg
Y29sbGVjdGVkLiBJJ3ZlIGFsc28gY3JlYXRlZCBhIGJlZ2lubmluZyBpbXBsZW1lbnRhdGlvbiAK
KyAgICAgICAgb2YgYSB0eXBlIGxhdHRpY2UgdGhhdCBhbGxvd3MgdXMgdG8gcmVzb2x2ZSBhIGRp
c3BsYXkgbmFtZSBmb3IgYSB0eXBlIHRoYXQKKyAgICAgICAgY29uc2lzdHMgb2YgYSBzaW5nbGUg
d29yZC4KKworICAgICAgICBJIGNyZWF0ZWQgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGtub3dzIHdo
aWNoIGZ1bmN0aW9ucyBoYXZlIGV4ZWN1dGVkLiBUaGlzCisgICAgICAgIHNvbHZlcyB0aGUgYnVn
IHdoZXJlIHR5cGVzIGluc2lkZSBhbiB1bi1leGVjdXRlZCBmdW5jdGlvbiB3aWxsIHJlc29sdmUK
KyAgICAgICAgdG8gdGhlIHR5cGUgb2YgdGhlIGVuY2xvc2luZyBleHByZXNzaW9uIG9mIHRoYXQg
ZnVuY3Rpb24uIFRoaXMgZGF0YQorICAgICAgICBzdHJ1Y3R1cmUgbWF5IGFsc28gYmUgdXNlZnVs
IGxhdGVyIGlmIHRoZSBpbnNwZWN0b3IgY2hvb3NlcyB0byBjcmVhdGUgYSBVSQorICAgICAgICBh
cm91bmQgc2hvd2luZyB3aGljaCBmdW5jdGlvbnMgaGF2ZSBleGVjdXRlZC4KKworICAgICAgICBC
ZXR0ZXIgdHlwZSBpbmZvcm1hdGlvbiBpcyBnYXRoZXJlZCBmb3Igb2JqZWN0cy4gU3RydWN0dXJl
U2hhcGUgbm93CisgICAgICAgIHJlcHJlc2VudHMgYW4gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWlu
LiAgU3RydWN0dXJlU2hhcGUgYWxzbyBjb2xsZWN0cworICAgICAgICB0aGUgY29uc3RydWN0b3Ig
bmFtZSBmb3IgYW4gb2JqZWN0LgorCisgICAgICAgIEV4cHJlc3Npb24gcmFuZ2VzIGFyZSBub3cg
emVybyBpbmRleGVkLgorCisgICAgICAgIFJlbW92ZWQgc29tZSBleHRyYW5lb3VzIG1ldGhvZHMu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6Q29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzY29wZURlcGVuZGVudFBy
b2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1R5cGVMb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpUeXBlTG9jYXRpb246OlR5cGVMb2Nh
dGlvbik6CisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAgICAg
ICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUpOgorICAgICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAg
IChKU0M6OlVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlOjpoaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nU3RhcnRPZmZzZXQpOgorICAgICAgICAoSlNDOjpVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRXhwcmVzc2lvbkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFeHByZXNzaW9uSW5m
byk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVh
cDo6Y29sbGVjdCk6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQ6Omdl
dFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyk6CisgICAgICAgIChJbnNwZWN0b3I6
Okluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVGb3JWYXJpYWJsZUF0T2Zmc2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9wcm90b2NvbC9SdW50aW1lLmpzb246CisgICAg
ICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0
YWJsZTo6U2NyaXB0RXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxl
OjpQcm9ncmFtRXhlY3V0YWJsZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
RnVuY3Rpb25FeGVjdXRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6Omlu
aXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUu
aDoKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZpZGVsaXR5VHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCk6CisgICAgICAgICogcnVudGltZS9GdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlOjpoYXNFeGVjdXRlZEF0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlOjppbnNlcnRVbmV4ZWN1dGVkUmFuZ2UpOgorICAgICAgICAoSlND
OjpGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRSYW5nZSk6CisgICAg
ICAgICogcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25SYW5nZTo6RnVuY3Rpb25S
YW5nZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTo6RnVuY3Rpb25S
YW5nZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNo
ZTo6RnVuY3Rpb25SYW5nZTo6aGFzaCk6CisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlM
b2cuY3BwOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2cpOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJvY2Vzc0xv
Z1RocmVhZEZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0
eUxvZy5oOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlMb2c6OnJlY29yZFR5cGVJbmZvcm1h
dGlvbkZvckxvY2F0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9m
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlw
ZXNGb3JUeXBlTG9jYXRpb24pOgorICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXI6Omluc2VydE5ld0xvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3IpOgorICAgICAg
ICAoSlNDOjpkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbik6CisgICAgICAgIChKU0M6Okhp
Z2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6ZmluZExvY2F0aW9uKToKKyAgICAgICAgKEpTQzo6SGln
aEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlSW5BdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6Z2V0R2xvYmFs
VHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyOjpnZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaDoKKyAg
ICAgICAgKEpTQzo6UXVlcnlLZXk6OlF1ZXJ5S2V5KToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UXVlcnlLZXk6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpRdWVyeUtleTo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1
ZXJ5S2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlF1ZXJ5S2V5SGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZ1bmN0aW9uSGFzRXhlY3V0
ZWRDYWNoZSk6CisgICAgICAgIChKU0M6OkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6dHlwZUxv
Y2F0aW9uQ2FjaGUpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjp0b1N0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6VHlwZUxvY2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbik6Cisg
ICAgICAgICogcnVudGltZS9UeXBlTG9jYXRpb25DYWNoZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6VHlwZUxvY2F0aW9uQ2FjaGU6OkxvY2F0aW9uS2V5OjpMb2NhdGlvbktleSk6CisgICAgICAg
IChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChKU0M6OlR5cGVMb2NhdGlvbkNhY2hlOjpMb2NhdGlvbktleTo6aGFzaCk6CisgICAgICAg
ICogcnVudGltZS9UeXBlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6Z2V0UnVudGlt
ZVR5cGVGb3JWYWx1ZSk6CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZSk6
CisgICAgICAgIChKU0M6OlR5cGVTZXQ6OnNlZW5UeXBlcyk6CisgICAgICAgIChKU0M6OlR5cGVT
ZXQ6OmRvZXNUeXBlQ29uZm9ybVRvKToKKyAgICAgICAgKEpTQzo6VHlwZVNldDo6ZGlzcGxheU5h
bWUpOgorICAgICAgICAoSlNDOjpUeXBlU2V0OjphbGxQcmltaXRpdmVUeXBlTmFtZXMpOgorICAg
ICAgICAoSlNDOjpUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMpOgorICAgICAg
ICAoSlNDOjpUeXBlU2V0OjpsZWFzdENvbW1vbkFuY2VzdG9yKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlU2hhcGU6OlN0cnVjdHVyZVNoYXBlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hh
cGU6OmFkZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnByb3BlcnR5
SGFzaCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2VzdG9y
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnN0cmluZ1JlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZCk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9UeXBlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNo
YXBlOjpzZXRDb25zdHJ1Y3Rvck5hbWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6
Y29uc3RydWN0b3JOYW1lKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2hhcGU6OnNldFByb3Rv
KToKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OmR1bXBIaWdo
RmlkZWxpdHlQcm9maWxpbmdUeXBlcyk6CisgICAgICAgIChKU0M6OlZNOjpnZXRUeXBlc0ZvclZh
cmlhYmxlQXRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpWTTo6dXBkYXRlSGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVTdGF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9WTS5o
OgorICAgICAgICAoSlNDOjpWTTo6aXNQcm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkpOgor
ICAgICAgICAoSlNDOjpWTTo6aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKToKKwogMjAxNC0wNy0x
NyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERG
RyBGbHVzaChTZXRMb2NhbCkgc3RvcmUgZWxpbWluYXRpb24gaXMgb3ZlcnplYWxvdXMgZm9yIGNh
cHR1cmVkIHZhcmlhYmxlcyBpbiB0aGUgcHJlc2VuY2Ugb2Ygbm9kZXMgdGhhdCBoYXZlIG5vIGVm
ZmVjdHMgYnV0IG1heSB0aHJvdyAobWVyZ2UgdHJ1bmsgcjE3MTE5MCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtODQ0LDYgKzg0NCwxMCBAQAogCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyog
RGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICovOyB9
OwogCQk0NDQzQUUzMzE2RTE4OEQ5MDA3NkYxMTAgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4g
RnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1
Qzg2QzZCMDBFNkRGMUIgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CiAJCTQ1MTUzOUI5
MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0NTE1MzlCODEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUyQjMxMEZCMTk3
NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZBMTk3NEFFNjEwMDgwODU3
QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4
ZWN1dGVkQ2FjaGUuY3BwICovOyB9OworCQk1MkIzMTBGRjE5NzVCNDI0MDA4MDg1N0MgLyogVHlw
ZUxvY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJCMzEwRkUxOTc1QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNw
cCAqLzsgfTsKKwkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkIzMTEw
MDE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MkRBRDM4RjE5NUExNjRFMDBGMzA0
NjQgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MkRBRDM4RTE5NUExNjRFMDBGMzA0NjQgLyogVHlwZUxvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTJGQjcxMzcx
OTUzNzRCODAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MkZCNzEzMzE5NTM3NEI3MDBCQjYxMkUgLyog
SGlnaEZpZGVsaXR5TG9nLmNwcCAqLzsgfTsKIAkJNTJGQjcxMzgxOTUzNzRCODAwQkI2MTJFIC8q
IEhpZ2hGaWRlbGl0eUxvZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTJGQjcxMzQxOTUzNzRCNzAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTk2LDYg
KzMwMDAsMTAgQEAKIAkJNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
d3JhcHBlci5mcmFtZXdvcms7IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IC9T
eXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0ZvdW5kYXRpb24uZnJhbWV3b3JrOyBzb3VyY2VUcmVl
ID0gIjxhYnNvbHV0ZT4iOyB9OwogCQk1MUYwRUMwNzA1Qzg2QzlBMDBFNkRGMUIgLyogbGlib2Jq
Yy5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGlib2JqYy5keWxpYjsgcGF0aCA9IC91
c3IvbGliL2xpYm9iamMuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7IH07CiAJCTUy
MkFCQUY5MTk0QTgwNDMwMDhCMUM4NSAvKiBUeXBlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUyQjMxMEZBMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTUyQjMxMEZDMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJCMzEwRkUxOTc1
QjQyNDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFR5cGVMb2NhdGlvbkNhY2hlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTJC
MzExMDAxOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFR5cGVMb2NhdGlvbkNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUy
REFEMzhFMTk1QTE2NEUwMEYzMDQ2NCAvKiBUeXBlTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VHlwZUxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUyRkI3MTMzMTk1
Mzc0QjcwMEJCNjEyRSAvKiBIaWdoRmlkZWxpdHlMb2cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSGlnaEZpZGVsaXR5TG9nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTJGQjcxMzQxOTUzNzRCNzAwQkI2MTJFIC8qIEhpZ2hGaWRlbGl0eUxvZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIaWdoRmlkZWxpdHlMb2cuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ2NzAsNiArNDY3OCw4IEBACiAJCQkJQkMyNjgw
QzEwRTE2RDRFOTAwQTA2RTkyIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCAqLywKIAkJCQkwRkI0
QjUyMTE2QjYyNzhEMDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgKi8sCiAJ
CQkJMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCAq
LywKKwkJCQk1MkIzMTBGQTE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlLmggKi8sCisJCQkJNTJCMzEwRkMxOTc0QUU4NzAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZS5jcHAgKi8sCiAJCQkJRjY5MkE4NUMwMjU1NTk3RDAxRkY2MEY3IC8qIEZ1bmN0
aW9uUHJvdG90eXBlLmNwcCAqLywKIAkJCQlGNjkyQTg1RDAyNTU1OTdEMDFGRjYwRjcgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCAqLywKIAkJCQkwRjJCNjZCMjE3QjZCNUFCMDBBN0FFM0YgLyogR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3LmggKi8sCkBAIC00OTUxLDYgKzQ5NjEsOCBAQAogCQkJCTBGMkI2
NkRCMTdCNkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5cy5oICovLAogCQkJCTBGMkI2NkRDMTdC
NkI1QUIwMEE3QUUzRiAvKiBUeXBlZEFycmF5VHlwZS5jcHAgKi8sCiAJCQkJMEYyQjY2REQxN0I2
QjVBQjAwQTdBRTNGIC8qIFR5cGVkQXJyYXlUeXBlLmggKi8sCisJCQkJNTJCMzExMDAxOTc1QjQ2
NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggKi8sCisJCQkJNTJCMzEwRkUxOTc1QjQy
NDAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmNwcCAqLywKIAkJCQk1MkZCNzIxMjE5NTM3
NjBDMDBCQjYxMkUgLyogVHlwZVNldC5jcHAgKi8sCiAJCQkJNTJGQjcyMTMxOTUzNzYwQzAwQkI2
MTJFIC8qIFR5cGVTZXQuaCAqLywKIAkJCQlBN0E4QUYzMjE3QURCNUYzMDA1QUIxNzQgLyogVWlu
dDE2QXJyYXkuaCAqLywKQEAgLTYyNDgsNiArNjI2MCw3IEBACiAJCQkJMEYyMzVCREQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkRFMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25I
YXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEExMTE3MDUxM0RCMDBC
QjcyMkMgLyogRlRMT3V0cHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0
MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMkExODdE
RkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY1
OTYsNiArNjYwOSw3IEBACiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCRDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCRTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJF
eGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE5MENBRDE4OUQ4MkY2MDAw
QUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NzI5QkYxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggaW4gSGVhZGVycyAqLywK
QEAgLTc1ODEsNiArNzU5NSw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJ
CWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQk1MkIzMTBG
RjE5NzVCNDI0MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTlFQTVDN0ExMTkwRjA4NDIwMDUwOEVCRSAvKiBCdW5kbGVQYXRo
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRp
YWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODI4LDYgKzc4NDMsNyBAQAog
CQkJCTBGNUE2MjgzMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUNCMTA3RUMzNzYwMDQyN0E0OCAvKiBGdW5jdGlvbkNvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlGMTZCNzJBMTcwMDVERjk1QiAvKiBG
dW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUyQjMxMEZEMTk3
NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJl
SklUU3R1YlJvdXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzIyMzlEMUExNjI2MkJERDAw
NUFDNUZEIC8qIEdDVGhyZWFkLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw3ICs0OSw3IEBACiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUg
IkpTTmFtZVNjb3BlLmgiCiAjaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCi0jaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2FjaGUuaCIKICNpbmNsdWRl
ICJMb3dMZXZlbEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIlBvbHltb3JwaGljR2V0QnlJZExpc3QuaCIKQEAgLTE2ODUsMTIgKzE2ODUsMTcgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgIEFTU0VSVChtX3NvdXJj
ZSk7CiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpKTsKIAorICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgp
KQorICAgICAgICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+
c291cmNlSUQoKSwgbV9vd25lckV4ZWN1dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdT
dGFydE9mZnNldCgpLCBtX293bmVyRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCgpKTsKKwogICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJs
b2NrLT5jb25zdGFudFJlZ2lzdGVycygpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVz
ZXNHbG9iYWxPYmplY3QoKSkKICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCpt
X3ZtLCBvd25lckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKICAgICBtX2Z1bmN0
aW9uRGVjbHMucmVzaXplVG9GaXQodW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25E
ZWNscygpKTsKICAgICBmb3IgKHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1i
ZXJPZkZ1bmN0aW9uRGVjbHMoKSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVu
bGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENv
ZGVCbG9jay0+ZnVuY3Rpb25EZWNsKGkpOworICAgICAgICBpZiAodm0oKS0+aXNQcm9maWxpbmdU
eXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKKyAgICAgICAgICAgIHZtKCktPmhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcigpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVjdXRl
ZFJhbmdlKG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFi
bGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSk7CiAgICAgICAgIHVuc2ln
bmVkIGxpbmVDb3VudCA9IHVubGlua2VkRXhlY3V0YWJsZS0+bGluZUNvdW50KCk7CiAgICAgICAg
IHVuc2lnbmVkIGZpcnN0TGluZSA9IG93bmVyRXhlY3V0YWJsZS0+bGluZU5vKCkgKyB1bmxpbmtl
ZEV4ZWN1dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwogICAgICAgICBib29sIHN0YXJ0Q29sdW1u
SXNPbk93bmVyU3RhcnRMaW5lID0gIXVubGlua2VkRXhlY3V0YWJsZS0+Zmlyc3RMaW5lT2Zmc2V0
KCk7CkBAIC0xNzA3LDYgKzE3MTIsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJs
b2NrLT5udW1iZXJPZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1
bmxpbmtlZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291
bnQ7ICsraSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRF
eGVjdXRhYmxlID0gdW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKKyAgICAgICAg
aWYgKHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAgICAg
ICB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShtX293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQo
KSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZz
ZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zm
c2V0KCkpOwogICAgICAgICB1bnNpZ25lZCBsaW5lQ291bnQgPSB1bmxpbmtlZEV4ZWN1dGFibGUt
PmxpbmVDb3VudCgpOwogICAgICAgICB1bnNpZ25lZCBmaXJzdExpbmUgPSBvd25lckV4ZWN1dGFi
bGUtPmxpbmVObygpICsgdW5saW5rZWRFeGVjdXRhYmxlLT5maXJzdExpbmVPZmZzZXQoKTsKICAg
ICAgICAgYm9vbCBzdGFydENvbHVtbklzT25Pd25lclN0YXJ0TGluZSA9ICF1bmxpbmtlZEV4ZWN1
dGFibGUtPmZpcnN0TGluZU9mZnNldCgpOwpAQCAtMTkyMiw4ICsxOTI5LDcgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgaWYgKHBjWzBdLnUu
b3Bjb2RlID09IG9wX2dldF9mcm9tX3Njb3BlX3dpdGhfcHJvZmlsZSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczogZ2V0X2Zyb21fc2NvcGVf
d2l0aF9wcm9maWxlIGRzdCwgc2NvcGUsIGlkLCBSZXNvbHZlTW9kZUFuZFR5cGUsIFN0cnVjdHVy
ZSwgT3BlcmFuZCwgLi4uLCBUeXBlTG9jYXRpb24KICAgICAgICAgICAgICAgICBzaXplX3QgaW5z
dHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BMZW5ndGggLSAxOwotICAgICAgICAgICAgICAgIFR5cGVM
b2NhdGlvbiogbG9jYXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgICAg
ICBzY29wZURlcGVuZGVudFByb2ZpbGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCwgbG9j
YXRpb24pOworICAgICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBzY29wZURl
cGVuZGVudFByb2ZpbGUob3AsIGlkZW50LCBpbnN0cnVjdGlvbk9mZnNldCk7CiAgICAgICAgICAg
ICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA4XS51LmxvY2F0aW9uID0gbG9jYXRpb247CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NDksOCArMTk1NSw3IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGlmIChwY1swXS51
Lm9wY29kZSA9PSBvcF9wdXRfdG9fc2NvcGVfd2l0aF9wcm9maWxlKSB7CiAgICAgICAgICAgICAg
ICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBwdXRfdG9fc2NvcGVfd2l0
aF9wcm9maWxlIHNjb3BlLCBpZCwgdmFsdWUsIFJlc29sdmVNb2RlQW5kVHlwZSwgU3RydWN0dXJl
LCBPcGVyYW5kLCBUeXBlTG9jYXRpb24qCiAgICAgICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0
aW9uT2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKLSAgICAgICAgICAgICAgICBUeXBlTG9jYXRp
b24qIGxvY2F0aW9uID0gdm0oKS0+bmV4dExvY2F0aW9uKCk7Ci0gICAgICAgICAgICAgICAgc2Nv
cGVEZXBlbmRlbnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQsIGxvY2F0aW9u
KTsKKyAgICAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gc2NvcGVEZXBlbmRl
bnRQcm9maWxlKG9wLCBpZGVudCwgaW5zdHJ1Y3Rpb25PZmZzZXQpOwogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgN10udS5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTU5LDQ0ICsxOTY0LDUyIEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgY2FzZSBvcF9wcm9maWxlX3R5
cGVzX3dpdGhfaGlnaF9maWRlbGl0eTogewogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9u
T2Zmc2V0ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3Rh
cnQsIGRpdm90RW5kOworICAgICAgICAgICAgaW50cHRyX3QgZ2xvYmFsVmFyaWFibGVJRDsKKyAg
ICAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiBnbG9iYWxUeXBlU2V0OwogICAgICAgICAgICAgYm9v
bCBzaG91bGRBbmFseXplID0gbV91bmxpbmtlZENvZGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxl
RXhwcmVzc2lvbkluZm9Gb3JCeXRlY29kZU9mZnNldChpbnN0cnVjdGlvbk9mZnNldCwgZGl2b3RT
dGFydCwgZGl2b3RFbmQpOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlcihwY1sxXS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gbV9zeW1ib2xUYWJsZS5nZXQoKTsKLSAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9j
YXRpb24gPSB2bSgpLT5uZXh0TG9jYXRpb24oKTsKLSAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rp
dm90U3RhcnQgPSBkaXZvdFN0YXJ0OwotICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RFbmQg
PSBkaXZvdEVuZDsKLSAgICAgICAgICAgIGxvY2F0aW9uLT5tX3NvdXJjZUlEID0gbV9vd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCk7CiAKICAgICAgICAgICAgIFByb2ZpbGVUeXBlc1dpdGhIaWdo
RmlkZWxpdHlCeXRlY29kZUZsYWcgZmxhZyA9IHN0YXRpY19jYXN0PFByb2ZpbGVUeXBlc1dpdGhI
aWdoRmlkZWxpdHlCeXRlY29kZUZsYWc+KHBjWzNdLnUub3BlcmFuZCk7CiAgICAgICAgICAgICBz
d2l0Y2ggKGZsYWcpIHsKICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVIYXNH
bG9iYWxJRDogewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2dsb2JhbFZh
cmlhYmxlSUQgPSBzeW1ib2xUYWJsZS0+dW5pcXVlSURGb3JSZWdpc3Rlcihsb2NrZXIsIHZpcnR1
YWxSZWdpc3Rlci5vZmZzZXQoKSwgKnZtKCkpOwotICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5t
X2dsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclJlZ2lzdGVyKGxv
Y2tlciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAg
Z2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclJlZ2lzdGVyKGxvY2tl
ciwgdmlydHVhbFJlZ2lzdGVyLm9mZnNldCgpLCAqdm0oKSk7CisgICAgICAgICAgICAgICAgZ2xv
YmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yUmVnaXN0ZXIobG9ja2Vy
LCB2aXJ0dWFsUmVnaXN0ZXIub2Zmc2V0KCksICp2bSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVE
b2VzTm90SGF2ZUdsb2JhbElEOiAKLSAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNv
ZGVGdW5jdGlvbkFyZ3VtZW50OgorICAgICAgICAgICAgY2FzZSBQcm9maWxlVHlwZXNCeXRlY29k
ZUZ1bmN0aW9uQXJndW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0g
SGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0ZWNvZGVGdW5jdGlv
blRoaXNPYmplY3Q6IHsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJs
ZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0czsKKyAgICAgICAgICAgICAgICBnbG9i
YWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5VGhpc1N0YXRlbWVudDsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUHJvZmlsZVR5cGVzQnl0
ZWNvZGVGdW5jdGlvblJldHVyblN0YXRlbWVudDogewotICAgICAgICAgICAgICAgIGxvY2F0aW9u
LT5tX2dsb2JhbFR5cGVTZXQgPSByZXR1cm5TdGF0ZW1lbnRUeXBlU2V0KCk7Ci0gICAgICAgICAg
ICAgICAgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudDsKLSAgICAgICAgICAgICAgICBsb2NhdGlvbi0+bV9kaXZvdEZvckZ1bmN0aW9uT2Zm
c2V0SWZSZXR1cm5TdGF0ZW1lbnQgPSBtX3NvdXJjZU9mZnNldDsgCisgICAgICAgICAgICAgICAg
Z2xvYmFsVHlwZVNldCA9IHJldHVyblN0YXRlbWVudFR5cGVTZXQoKTsKKyAgICAgICAgICAgICAg
ICBnbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50OwogICAgICAg
ICAgICAgICAgIGlmICghc2hvdWxkQW5hbHl6ZSkgewogICAgICAgICAgICAgICAgICAgICAvLyBC
ZWNhdXNlIHNvbWUgcmV0dXJuIHN0YXRlbWVudHMgYXJlIGFkZGVkIGltcGxpY2l0bHkgKHRvIHJl
dHVybiB1bmRlZmluZWQgYXQgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uKSwgYW5kIHRoZXNlIG5vZGVz
IGRvbid0IGVtaXQgZXhwcmVzc2lvbiByYW5nZXMsIGdpdmUgdGhlbSBzb21lIHJhbmdlLgogICAg
ICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHksIHRoaXMgZGl2b3QgaXMgb24gdGhlIG9wZW4g
YnJhY2Ugb2YgdGhlIGZ1bmN0aW9uLiAKLSAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1f
ZGl2b3RTdGFydCA9IGxvY2F0aW9uLT5tX2Rpdm90RW5kID0gbG9jYXRpb24tPm1fZGl2b3RGb3JG
dW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50OworICAgICAgICAgICAgICAgICAgICBkaXZv
dFN0YXJ0ID0gZGl2b3RFbmQgPSBtX3NvdXJjZU9mZnNldDsKICAgICAgICAgICAgICAgICAgICAg
c2hvdWxkQW5hbHl6ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAo
c2hvdWxkQW5hbHl6ZSkKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29s
PiBsb2NhdGlvblBhaXIgPSB2bSgpLT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+dHlwZUxv
Y2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsIG1fb3duZXJF
eGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNl
dCwgdm0oKSk7CisgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLmZpcnN0OworICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWly
LnNlY29uZDsKKworICAgICAgICAgICAgaWYgKFByb2ZpbGVUeXBlc0J5dGVjb2RlRnVuY3Rpb25S
ZXR1cm5TdGF0ZW1lbnQpCisgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5j
dGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID0gbV9zb3VyY2VPZmZzZXQ7CisKKyAgICAgICAg
ICAgIGlmIChzaG91bGRBbmFseXplICYmIGlzTmV3TG9jYXRpb24pCiAgICAgICAgICAgICAgICAg
dm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0
aW9uKTsKKwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyAyXS51LmxvY2F0aW9uID0gbG9j
YXRpb247CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzg4MywxMyArMzg5Niwx
MiBAQCBERkc6OkNhcGFiaWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpCiB9CiAjZW5kaWYK
IAotdm9pZCBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50UHJvZmlsZShSZXNvbHZlT3Agb3AsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQsIFR5cGVMb2Nh
dGlvbiogbG9jYXRpb24pCitUeXBlTG9jYXRpb24qIENvZGVCbG9jazo6c2NvcGVEZXBlbmRlbnRQ
cm9maWxlKFJlc29sdmVPcCBvcCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIHNpemVfdCBpbnN0
cnVjdGlvbk9mZnNldCkKIHsKICAgICB1bnNpZ25lZCBkaXZvdFN0YXJ0LCBkaXZvdEVuZDsKICAg
ICBib29sIHNob3VsZEFuYWx5emUgPSBtX3VubGlua2VkQ29kZS0+aGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVFeHByZXNzaW9uSW5mb0ZvckJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uT2Zmc2V0LCBk
aXZvdFN0YXJ0LCBkaXZvdEVuZCk7Ci0gICAgbG9jYXRpb24tPm1fZGl2b3RTdGFydCA9IGRpdm90
U3RhcnQ7Ci0gICAgbG9jYXRpb24tPm1fZGl2b3RFbmQgPSBkaXZvdEVuZDsKLSAgICBsb2NhdGlv
bi0+bV9zb3VyY2VJRCA9IG1fb3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpOworICAgIGludHB0
cl90IGdsb2JhbFZhcmlhYmxlSUQ7CisgICAgUmVmUHRyPFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQ7
CiAKICAgICAvLyBGSVhNRTogaGFuZGxlIG90aGVyIHZhbHVlcyBmb3Igb3AudHlwZSBoZXJlLCBh
bmQgYWxzbyBjb25zaWRlciB3aGF0IHRvIGRvIHdoZW4gd2UgY2FuJ3Qgc3RhdGljYWxseSBkZXRl
cm1pbmUgdGhlIGdsb2JhbElECiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gbnVsbHB0
cjsKQEAgLTM5MDAsMTMgKzM5MTIsMTkgQEAgdm9pZCBDb2RlQmxvY2s6OnNjb3BlRGVwZW5kZW50
UHJvZmlsZShSZQogICAgIAogICAgIGlmIChzeW1ib2xUYWJsZSkgewogICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAgICAgbG9jYXRp
b24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxl
KGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgICAgIGxvY2F0aW9uLT5tX2dsb2Jh
bFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwg
aWRlbnQuaW1wbCgpLCAqdm0oKSk7CisgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBzeW1ib2xU
YWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwor
ICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJp
YWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgKnZtKCkpOwogICAgIH0gZWxzZQotICAgICAgICBs
b2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID0gSGlnaEZpZGVsaXR5Tm9HbG9iYWxJREV4aXN0
czsKKyAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IEhpZ2hGaWRlbGl0eU5vR2xvYmFsSURFeGlz
dHM7CiAKLSAgICBpZiAoc2hvdWxkQW5hbHl6ZSkKKyAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9u
KiwgYm9vbD4gbG9jYXRpb25QYWlyID0gdm0oKS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCkt
PnR5cGVMb2NhdGlvbkNhY2hlKCktPmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELCBt
X293bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2Jh
bFR5cGVTZXQsIHZtKCkpOworICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBh
aXIuZmlyc3Q7CisgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWlyLnNlY29uZDsK
KworICAgIGlmIChzaG91bGRBbmFseXplICYgaXNOZXdMb2NhdGlvbikKICAgICAgICAgdm0oKS0+
aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmluc2VydE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsK
KworICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgzLDYgKzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBFeGVjU3Rh
dGU7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBSZXBhdGNoQnVmZmVyOwor
Y2xhc3MgVHlwZUxvY2F0aW9uOwogCiBpbmxpbmUgVmlydHVhbFJlZ2lzdGVyIHVubW9kaWZpZWRB
cmd1bWVudHNSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzUmVnaXN0ZXIpIHsgcmV0
dXJuIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rlci5vZmZzZXQoKSArIDEpOyB9CiAK
QEAgLTEwMjEsNyArMTAyMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX3JhcmVEYXRhID0g
YWRvcHRQdHIobmV3IFJhcmVEYXRhKTsKICAgICB9CiAKLSAgICB2b2lkIHNjb3BlRGVwZW5kZW50
UHJvZmlsZShSZXNvbHZlT3AsIGNvbnN0IElkZW50aWZpZXImLCBzaXplX3QsIFR5cGVMb2NhdGlv
biopOworICAgIFR5cGVMb2NhdGlvbiogc2NvcGVEZXBlbmRlbnRQcm9maWxlKFJlc29sdmVPcCwg
Y29uc3QgSWRlbnRpZmllciYsIHNpemVfdCk7CiAgICAgCiAjaWYgRU5BQkxFKEpJVCkKICAgICB2
b2lkIHJlc2V0U3R1YkludGVybmFsKFJlcGF0Y2hCdWZmZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyYp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5cGVMb2NhdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9UeXBlTG9jYXRpb24u
aAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1R5
cGVMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMyArMzMsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiBlbnVtIEhpZ2hGaWRlbGl0eUdsb2JhbElERmxhZ3MgewogICAgIEhpZ2hGaWRlbGl0
eU5lZWRzVW5pcXVlSURHZW5lcmF0aW9uID0gLTEsCiAgICAgSGlnaEZpZGVsaXR5Tm9HbG9iYWxJ
REV4aXN0cyA9IC0yLAotICAgIEhpZ2hGaWRlbGl0eVJldHVyblN0YXRlbWVudCA9IC0zCisgICAg
SGlnaEZpZGVsaXR5UmV0dXJuU3RhdGVtZW50ID0gLTMsCisgICAgSGlnaEZpZGVsaXR5VGhpc1N0
YXRlbWVudCA9IC00CiB9OwogCiBjbGFzcyBUeXBlTG9jYXRpb24gewogcHVibGljOgogICAgIFR5
cGVMb2NhdGlvbigpIAotICAgICAgICA6IG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNy
ZWF0ZSgpKQorICAgICAgICA6IG1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVt
ZW50KFVJTlRfTUFYKQorICAgICAgICAsIG1faW5zdHJ1Y3Rpb25UeXBlU2V0KFR5cGVTZXQ6OmNy
ZWF0ZSgpKQogICAgICAgICAsIG1fZ2xvYmFsVHlwZVNldChudWxscHRyKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxpbmtl
ZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw2
ICsxMDAsOCBAQCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZTo6VW5saW5rZWRGdW5jCiAgICAg
LCBtX3VubGlua2VkQm9keUVuZENvbHVtbihtX2xpbmVDb3VudCA/IG5vZGUtPmVuZENvbHVtbigp
IDogbm9kZS0+ZW5kQ29sdW1uKCkgLSBub2RlLT5zdGFydENvbHVtbigpKQogICAgICwgbV9zdGFy
dE9mZnNldChub2RlLT5zb3VyY2UoKS5zdGFydE9mZnNldCgpIC0gc291cmNlLnN0YXJ0T2Zmc2V0
KCkpCiAgICAgLCBtX3NvdXJjZUxlbmd0aChub2RlLT5zb3VyY2UoKS5sZW5ndGgoKSkKKyAgICAs
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KG5vZGUtPmZ1bmN0aW9uTmFt
ZVN0YXJ0KCkpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQobm9k
ZS0+c3RhcnRTdGFydE9mZnNldCgpICsgbm9kZS0+c291cmNlKCkubGVuZ3RoKCkgLSAxKQogICAg
ICwgbV9mZWF0dXJlcyhub2RlLT5mZWF0dXJlcygpKQogICAgICwgbV9mdW5jdGlvbk1vZGUobm9k
ZS0+ZnVuY3Rpb25Nb2RlKCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMTcxMzY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw2ICsxMjUsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgdW5saW5rZWRC
b2R5RW5kQ29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZEJvZHlFbmRDb2x1bW47IH0K
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRPZmZzZXQ7
IH0KICAgICB1bnNpZ25lZCBzb3VyY2VMZW5ndGgoKSB7IHJldHVybiBtX3NvdXJjZUxlbmd0aDsg
fQorICAgIHVuc2lnbmVkIGhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OyB9Cisg
ICAgdW5zaWduZWQgaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsgfQogCiAgICAgU3Ry
aW5nIHBhcmFtU3RyaW5nKCkgY29uc3Q7CiAKQEAgLTE4Niw2ICsxODgsOCBAQCBwcml2YXRlOgog
ICAgIHVuc2lnbmVkIG1fdW5saW5rZWRCb2R5RW5kQ29sdW1uOwogICAgIHVuc2lnbmVkIG1fc3Rh
cnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VMZW5ndGg7CisgICAgdW5zaWduZWQgbV9o
aWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9oaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0OwogCiAgICAgQ29kZUZlYXR1cmVzIG1fZmVh
dHVyZXM7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNzEzNjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzM3LDcgKzMzNyw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcihWTSYKIAogICAgIG1fc3ltYm9sVGFibGUtPnNldENhcHR1cmVFbmQodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoY29kZUJsb2NrLT5tX251bVZhcnMpLm9mZnNldCgpKTsKIAotICAg
IGJvb2wgY2FuTGF6aWx5Q3JlYXRlRnVuY3Rpb25zID0gIWZ1bmN0aW9uQm9keS0+bmVlZHNBY3Rp
dmF0aW9uRm9yTW9yZVRoYW5WYXJpYWJsZXMoKSAmJiAhbV9zaG91bGRFbWl0RGVidWdIb29rczsK
KyAgICBib29sIGNhbkxhemlseUNyZWF0ZUZ1bmN0aW9ucyA9ICFmdW5jdGlvbkJvZHktPm5lZWRz
QWN0aXZhdGlvbkZvck1vcmVUaGFuVmFyaWFibGVzKCkgJiYgIW1fc2hvdWxkRW1pdERlYnVnSG9v
a3MgJiYgIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCk7CiAgICAgbV9maXJzdExh
enlGdW5jdGlvbiA9IGNvZGVCbG9jay0+bV9udW1WYXJzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnVuY3Rpb25TdGFjay5zaXplKCk7ICsraSkgewogICAgICAgICBGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbiA9IGZ1bmN0aW9uU3RhY2tbaV07CkBAIC0xMTE2LDYgKzExMTYsMTQgQEAg
UmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFcXVhbAogICAgIHJldHVybiBkc3Q7
CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRIaWdoRmlkZWxpdHlUeXBlUHJvZmls
aW5nRXhwcmVzc2lvbkluZm8oY29uc3QgSlNUZXh0UG9zaXRpb24mIHN0YXJ0RGl2b3QsIGNvbnN0
IEpTVGV4dFBvc2l0aW9uJiBlbmREaXZvdCkKK3sKKyAgICB1bnNpZ25lZCBzdGFydCA9IHN0YXJ0
RGl2b3Qub2Zmc2V0OyAvLyBSYW5nZXMgYXJlIGluY2x1c2l2ZSBvZiB0aGVpciBlbmRwb2ludHMs
IEFORCAwIGluZGV4ZWQuCisgICAgdW5zaWduZWQgZW5kID0gZW5kRGl2b3Qub2Zmc2V0IC0gMTsg
Ly8gRW5kIFJhbmdlcyBhbHJlYWR5IGdvIG9uZSBwYXN0IHRoZSBpbmNsdXNpdmUgcmFuZ2UsIHNv
IHN1YnRyYWN0IDEuCisgICAgdW5zaWduZWQgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpbnN0cnVjdGlv
bnMoKS5zaXplKCkgLSAxOworICAgIG1fY29kZUJsb2NrLT5hZGRIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZUV4cHJlc3Npb25JbmZvKGluc3RydWN0aW9uT2Zmc2V0LCBzdGFydCwgZW5kKTsKK30KKwog
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxpdHko
UmVnaXN0ZXJJRCogcmVnaXN0ZXJUb1Byb2ZpbGUsIFByb2ZpbGVUeXBlc1dpdGhIaWdoRmlkZWxp
dHlCeXRlY29kZUZsYWcgZmxhZykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfdHlwZXNf
d2l0aF9oaWdoX2ZpZGVsaXR5KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDE3MTM2OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDEzICszMjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkRXhwcmVzc2lvbkluZm8oaW5zdHJ1Y3Rpb25P
ZmZzZXQsIGRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBsaW5lLCBjb2x1bW4p
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IHN0YXJ0ID0gc3RhcnREaXZvdC5vZmZzZXQgKyAxOyAvLyBSYW5nZXMgYXJlIGluY2x1c2l2ZSBv
ZiB0aGVpciBlbmRwb2ludHMsIEFORCAxIGluZGV4ZWQuCi0gICAgICAgICAgICB1bnNpZ25lZCBl
bmQgPSBlbmREaXZvdC5vZmZzZXQ7IC8vIEVuZCBSYW5nZXMgYWxyZWFkeSBnbyBvbmUgcGFzdCB0
aGUgaW5jbHVzaXZlIHJhbmdlLCBzbyBubyBuZWVkIHRvIGRvICsgMSAtIDEuCi0gICAgICAgICAg
ICB1bnNpZ25lZCBpbnN0cnVjdGlvbk9mZnNldCA9IGluc3RydWN0aW9ucygpLnNpemUoKSAtIDE7
Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+YWRkSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVFeHBy
ZXNzaW9uSW5mbyhpbnN0cnVjdGlvbk9mZnNldCwgc3RhcnQsIGVuZCk7Ci0gICAgICAgIH0KIAog
ICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgbGVmdEhhbmRTaWRlTmVlZHNDb3B5KGJvb2wgcmln
aHRIYXNBc3NpZ25tZW50cywgYm9vbCByaWdodElzUHVyZSkKICAgICAgICAgewpAQCAtMzQ4LDYg
KzM0MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIGVtaXROb2RlKG4p
OwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBlbWl0SGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0V4cHJlc3Npb25JbmZvKGNvbnN0IEpTVGV4dFBvc2l0aW9uJiBzdGFydERpdm90LCBjb25zdCBK
U1RleHRQb3NpdGlvbiYgZW5kRGl2b3QpOwogICAgICAgICB2b2lkIGVtaXRQcm9maWxlVHlwZXNX
aXRoSGlnaEZpZGVsaXR5KFJlZ2lzdGVySUQqIGRzdCwgUHJvZmlsZVR5cGVzV2l0aEhpZ2hGaWRl
bGl0eUJ5dGVjb2RlRmxhZyk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdExvYWQoUmVnaXN0
ZXJJRCogZHN0LCBib29sKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcwLDggKzk3MCw2IEBAIHZvaWQgSGVhcDo6Y29sbGVjdChIZWFw
T3BlcmF0aW9uIGNvbGxlY3QKICNpZiBFTkFCTEUoQUxMT0NBVElPTl9MT0dHSU5HKQogICAgIGRh
dGFMb2dGKCJKU0MgR0Mgc3RhcnRpbmcgY29sbGVjdGlvbi5cbiIpOwogI2VuZGlmCi0gICAgaWYg
KHZtKCktPmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHZtKCkt
PmhpZ2hGaWRlbGl0eUxvZygpLT5wcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGZhbHNlLCAiR0MiKTsK
ICAgICAKICAgICBkb3VibGUgYmVmb3JlID0gMDsKICAgICBpZiAoT3B0aW9uczo6bG9nR0MoKSkg
ewpAQCAtOTgxLDYgKzk3OSwxMSBAQCB2b2lkIEhlYXA6OmNvbGxlY3QoSGVhcE9wZXJhdGlvbiBj
b2xsZWN0CiAgICAgCiAgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkdhcmJhZ2Ug
Q29sbGVjdGlvbiIpOwogICAgIAorICAgIGlmICh2bSgpLT5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKSB7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgYXdoaWxlKCp0aGlzKTsK
KyAgICAgICAgdm0oKS0+aGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2co
IkdDIik7CisgICAgfQorICAgIAogICAgIFJFTEVBU0VfQVNTRVJUKCFtX2RlZmVycmFsRGVwdGgp
OwogICAgIEFTU0VSVCh2bSgpLT5jdXJyZW50VGhyZWFkSXNIb2xkaW5nQVBJTG9jaygpKTsKICAg
ICBSRUxFQVNFX0FTU0VSVCh2bSgpLT5hdG9taWNTdHJpbmdUYWJsZSgpID09IHd0ZlRocmVhZERh
dGEoKS5hdG9taWNTdHJpbmdUYWJsZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmNwcAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsOCBAQAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAKICNpbmNsdWRlICJDb21wbGV0
aW9uLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVsaXR5TG9nLmgiCisjaW5jbHVkZSAiSGlnaEZpZGVs
aXR5VHlwZVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHQuaCIKICNpbmNsdWRl
ICJJbmplY3RlZFNjcmlwdE1hbmFnZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIK
QEAgLTQzLDYgKzQ1LDcgQEAKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgogI2luY2x1
ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCkBAIC0xOTEsMTEg
KzE5NCw0MSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cnVuKEVycm9yU3RyCiB7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZUZvclZhcmlhYmxl
QXRPZmZzZXQoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGluX3ZhcmlhYmxlTmFtZSwgY29u
c3QgU3RyaW5nJiBpbl9pZCwgaW50IGluX2Rpdm90LCBTdHJpbmcqIG91dF90eXBlcykgCit2b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZz
ZXRzKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3QgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yQXJyYXk+JiBpbl9sb2NhdGlvbnMsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3RvckFy
cmF5PiYgb3V0X3R5cGVzKQogeworICAgIHN0YXRpYyBjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKICAgICBWTSYgdm0gPSBnbG9iYWxWTSgpOwotICAgIFN0cmluZyB0eXBlcyh2bS5nZXRUeXBl
c0ZvclZhcmlhYmxlQXRPZmZzZXQoaW5fZGl2b3QsIGluX3ZhcmlhYmxlTmFtZSwgaW5faWQpKTsK
LSAgICAqb3V0X3R5cGVzID0gdHlwZXM7CisgICAgb3V0X3R5cGVzID0gSW5zcGVjdG9yOjpJbnNw
ZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgaWYgKCF2bS5pc1Byb2ZpbGluZ1R5cGVzV2l0aEhp
Z2hGaWRlbGl0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3VibGUgc3RhcnQgPSBjdXJy
ZW50VGltZU1TKCk7CisgICAgdm0uaGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxp
dHlMb2coIlVzZXIgUXVlcnkiKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5fbG9j
YXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6Okluc3Bl
Y3RvclZhbHVlPiB2YWx1ZSA9IGluX2xvY2F0aW9ucy0+Z2V0KGkpOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbjsKKyAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qo
JmxvY2F0aW9uKSkgeworICAgICAgICAgICAgKmVycm9yU3RyaW5nID0gQVNDSUlMaXRlcmFsKCJB
cnJheSBvZiBUeXBlTG9jYXRpb24gb2JqZWN0cyBoYXMgYW4gb2JqZWN0IHRoYXQgZG9lcyBub3Qg
aGF2ZSB0eXBlIG9mIFR5cGVMb2NhdGlvbi4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBkZXNjcmlwdG9yOworICAgICAgICBTdHJpbmcgc291cmNlSURB
c1N0cmluZzsKKyAgICAgICAgaW50IGRpdm90OworICAgICAgICBsb2NhdGlvbi0+Z2V0TnVtYmVy
KEFTQ0lJTGl0ZXJhbCgidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciIpLCAmZGVzY3JpcHRvcik7
CisgICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJzb3VyY2VJRCIpLCAm
c291cmNlSURBc1N0cmluZyk7CisgICAgICAgIGxvY2F0aW9uLT5nZXROdW1iZXIoQVNDSUlMaXRl
cmFsKCJkaXZvdCIpLCAmZGl2b3QpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6SW5zcGVjdG9yT2JqZWN0PiB0eXBlRGVzY3JpcHRpb24gPSBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJvb2wgb2theTsKKyAgICAgICAgdm0uaGlnaEZp
ZGVsaXR5VHlwZVByb2ZpbGVyKCktPmdldFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldEZvckluc3Bl
Y3RvcihzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9y
KSwgZGl2b3QsIHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpLCB0eXBlRGVz
Y3JpcHRpb24pOworICAgICAgICBvdXRfdHlwZXMtPnB1c2hPYmplY3QodHlwZURlc2NyaXB0aW9u
KTsKKyAgICB9CisKKyAgICBkb3VibGUgZW5kID0gY3VycmVudFRpbWVNUygpOworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JW
YXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZtc1xuIiwgZW5kIC0gc3RhcnQpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOCArNjYsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcqLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0aWVzLCBSZWZQdHI8
SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6UnVu
dGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCwgUmVmUHRyPEluc3BlY3Rvcjo6VHlw
ZUJ1aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgb3ZlcnJpZGUgZmluYWw7
CiAgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXApIG92ZXJyaWRlIGZpbmFsOwogICAgIHZpcnR1YWwgdm9pZCBy
dW4oRXJyb3JTdHJpbmcqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0UnVudGltZVR5
cGVGb3JWYXJpYWJsZUF0T2Zmc2V0KEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBpbl92YXJp
YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5faWQsIGludCBpbl9kaXZvdCwgU3RyaW5nKiBvdXRf
dHlwZXMpIG92ZXJyaWRlOwotCisgICAgdmlydHVhbCB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZh
cmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyosIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3I6Oklu
c3BlY3RvckFycmF5PiYgaW5fbG9jYXRpb25zLCBSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JB
cnJheT4mIG91dF90eXBlcykgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzZXRTY3JpcHREZWJ1
Z1NlcnZlcihTY3JpcHREZWJ1Z1NlcnZlciogc2NyaXB0RGVidWdTZXJ2ZXIpIHsgbV9zY3JpcHRE
ZWJ1Z1NlcnZlciA9IHNjcmlwdERlYnVnU2VydmVyOyB9CiAKICAgICBib29sIGVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUnVudGltZS5qc29uCShyZXZpc2lvbiAxNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1J1bnRpbWUu
anNvbgkod29ya2luZyBjb3B5KQpAQCAtMTExLDYgKzExMSwzOSBAQAogICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAic3RhcnRPZmZzZXQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIlN0YXJ0IG9mZnNldCBvZiByYW5nZSAoaW5jbHVzaXZlKS4iIH0sCiAgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlbmRPZmZzZXQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9u
IjogIkVuZCBvZmZzZXQgb2YgcmFuZ2UgKGV4Y2x1c2l2ZSkuIiB9CiAgICAgICAgICAgICBdCisg
ICAgICAgIH0sCisgICAgICAgIHsKKyAgICAgICAgICAgICJpZCI6ICJTdHJ1Y3R1cmVEZXNjcmlw
dGlvbiIsCisgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgInByb3Bl
cnRpZXMiOiBbCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJmaWVsZHMiLCAidHlwZSI6ICJh
cnJheSIsICAiaXRlbXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgImRlc2NyaXB0aW9uIjogIkFy
cmF5IG9mIHN0cmluZ3MsIHdoZXJlIHRoZSBzdHJpbmdzIHJlcHJlc2VudCBvYmplY3QgcHJvcGVy
dGllcy4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJjb25zdHJ1Y3Rvck5hbWUiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiTmFtZSBvZiB0aGUgY29uc3RydWN0b3Iu
IiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicHJvdG90eXBlU3RydWN0dXJlIiwgIiRy
ZWYiOiAiU3RydWN0dXJlRGVzY3JpcHRpb24iLCAib3B0aW9uYWwiOiAidHJ1ZSIsICJkZXNjcmlw
dGlvbiI6ICJQb2ludGVyIHRvIHRoZSBTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbiBvZiB0aGUgcHJv
dG95cGUgaWYgb25lIGV4aXN0cy4iIH0KKyAgICAgICAgICAgIF0KKyAgICAgICAgfSwKKyAgICAg
ICAgeworICAgICAgICAgICAgImlkIjogIlR5cGVEZXNjcmlwdGlvbiIsCisgICAgICAgICAgICAi
dHlwZSI6ICJvYmplY3QiLAorICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbnRhaW5lciBm
b3IgdHlwZSBpbmZvcm1hdGlvbiB0aGF0IGhhcyBiZWVuIGdhdGhlcmVkLiIsCisgICAgICAgICAg
ICAicHJvcGVydGllcyI6IFsKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpc3BsYXlUeXBl
TmFtZSIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJXaGF0IHRoZSBpbnNwZWN0b3Igc2hvdWxkIGRpc3BsYXkgYXMgYSBzaW1wbGUgdHlwZS4iIH0s
CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFByaW1pdGl2ZVR5cGVOYW1lcyIsICJ0
eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0sICJvcHRpb25hbCI6
ICJ0cnVlIiwgImRlc2NyaXB0aW9uIjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIHByaW10aXZl
IHR5cGVzIChpbnQsIHN0cmluZywgZXRjKSBzZWVuIGF0IGFuIGluc3RydWN0aW9uIiB9LAorICAg
ICAgICAgICAgICAgIHsgIm5hbWUiOiAibG9jYWxPYmplY3RUeXBlTmFtZXMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgInR5cGUiOiAic3RyaW5nIiB9LCAib3B0aW9uYWwiOiAidHJ1ZSIs
ICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZvciBhbGwgb2JqZWN0IHNlZW4g
YXQgYW4gaW5zdHJ1Y3Rpb24iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhbFN0
cnVjdHVyZXMiLCAidHlwZSI6ICJhcnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiU3RydWN0dXJl
RGVzY3JpcHRpb24iIH0sICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBv
ZiBkZXNjcmlwdGlvbnMgZm9yIGFsbCBzdHJ1Y3R1cmVzIHNlZW4gYXQgdGhpcyB0aGlzIGluc3Ry
dWN0aW9uLiIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImdsb2JhbFByaW1pdGl2ZVR5
cGVOYW1lcyIsICJ0eXBlIjogImFycmF5IiwgIml0ZW1zIjogeyAidHlwZSI6ICJzdHJpbmciIH0s
ICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6ICJBcnJheSBvZiB0eXBlIG5hbWVzIGZv
ciBhbGwgcHJpbWl0aXZlIHR5cGVzIHNlZW4gZ2xvYmFsbHkuIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZ2xvYmFsT2JqZWN0VHlwZU5hbWVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRl
bXMiOiB7ICJ0eXBlIjogInN0cmluZyIgfSwgIm9wdGlvbmFsIjogdHJ1ZSwgImRlc2NyaXB0aW9u
IjogIkFycmF5IG9mIHR5cGUgbmFtZXMgZm9yIGFsbCBwcmltaXRpdmUgdHlwZXMgc2VlbiBnbG9i
YWxseS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJnbG9iYWxTdHJ1Y3R1cmVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIlN0cnVjdHVyZURlc2NyaXB0aW9u
IiB9LCAib3B0aW9uYWwiOiB0cnVlLCAiZGVzY3JpcHRpb24iOiAiQXJyYXkgb2YgZGVzY3JpcHRp
b25zIGZvciBhbGwgc3RydWN0dXJlcyBzZWVuIGZvciB0aGlzIHZhcmlhYmxlLiIgfQorICAgICAg
ICAgICAgXQorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICAiaWQiOiAiVHlwZUxv
Y2F0aW9uIiwKKyAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCisgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiBhbiBleHByZXNzaW9uIHdlIHdh
bnQgdHlwZSBpbmZvcm1hdGlvbiBmb3IuIiwKKyAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogWwor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciIsICJ0
eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24iOiAiV2hhdCBraW5kIG9mIHR5cGUgaW5mb3Jt
YXRpb24gZG8gd2Ugd2FudCAobm9ybWFsLCBmdW5jdGlvbiByZXR1cm4gdmFsdWVzLCAndGhpcycg
c3RhdGVtZW50KS4iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0
eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlm
eWluZyBhIHNjcmlwdCIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5
cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3Np
Z25tZW50IHJhbmdlIiB9CisgICAgICAgICAgICBdCiAgICAgICAgIH0KICAgICBdLAogICAgICJj
b21tYW5kcyI6IFsKQEAgLTE5OCwxNCArMjMxLDEyIEBACiAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGlzYWJsZXMgcmVwb3J0aW5nIG9mIGV4ZWN1dGlvbiBjb250ZXh0cyBjcmVhdGlvbi4i
CiAgICAgICAgIH0sCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImdldFJ1bnRpbWVU
eXBlRm9yVmFyaWFibGVBdE9mZnNldCIsCisgICAgICAgICAgICAibmFtZSI6ICJnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMiLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJ2YXJpYWJsZU5hbWUiLCAidHlwZSI6ICJzdHJp
bmciLCAiZGVzY3JpcHRpb24iOiAiVmFyaWFibGUgd2Ugd2FudCB0eXBlIGluZnJvbWF0aW9uIGZv
ci4iIH0sCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJzb3VyY2VJRCIsICJ0eXBlIjogInN0
cmluZyIsICJkZXNjcmlwdGlvbiI6ICJzb3VyY2VJRCB1bmlxdWVseSBpZGVudGlmeWluZyBhIHNj
cmlwdCIgfSwKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImRpdm90IiwgInR5cGUiOiAiaW50
ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJjaGFyYWN0ZXIgb2Zmc2V0IGZvciBhc3NpZ25tZW50IHJh
bmdlIiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJsb2NhdGlvbnMiLCAidHlwZSI6ICJh
cnJheSIsICJpdGVtcyI6IHsgIiRyZWYiOiAiVHlwZUxvY2F0aW9uIiB9LCAiZGVzY3JpcHRpb24i
OiAiQW4gYXJyYXkgb2YgdHlwZSBsb2NhdGlvbnMgd2UncmUgcmVxdWVzdGluZyBpbmZvcm1hdGlv
biBmb3IuIFJlc3VsdHMgYXJlIGV4cGVjdGVkIGluIHRoZSBzYW1lIG9yZGVyIHRoZXkncmUgc2Vu
dCBpbi4ifQogICAgICAgICAgICAgXSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAidHlwZXMiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRp
b24iOiAiVHlwZXMgZm9yIHJlcXVlc3RlZCB2YXJpYWJsZS4iIH0KKyAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInR5cGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbSI6IHsgIiRyZWYiOiAiVHlw
ZURlc2NyaXB0aW9uIiwgImRlc2NyaXB0aW9uIjogIlR5cGVzIGZvciByZXF1ZXN0ZWQgdmFyaWFi
bGUuIiB9IH0KICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUmV0
dXJucyBkZXRhaWxlZCBpbmZvcm10YXRpb24gb24gZ2l2ZW4gZnVuY3Rpb24uIgogICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAko
cmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJCeXRl
Y29kZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkRGR0Ry
aXZlci5oIgorI2luY2x1ZGUgIkhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oIgogI2luY2x1ZGUg
IkpJVC5oIgogI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKQEAgLTEwMyw2ICsxMDQsOCBAQCBTY3JpcHRFeGVjdXRhYmxlOjpTY3JpcHRFeGVjdXRh
YmxlKFN0cnVjCiAgICAgLCBtX2xhc3RMaW5lKC0xKQogICAgICwgbV9zdGFydENvbHVtbihVSU5U
X01BWCkKICAgICAsIG1fZW5kQ29sdW1uKFVJTlRfTUFYKQorICAgICwgbV9oaWdoRmlkZWxpdHlU
eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoVUlOVF9NQVgpCisgICAgLCBtX2hpZ2hGaWRlbGl0eVR5
cGVQcm9maWxpbmdFbmRPZmZzZXQoVUlOVF9NQVgpCiB7CiB9CiAKQEAgLTM3OSw2ICszODIsMTAg
QEAgY29uc3QgQ2xhc3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZgogUHJvZ3JhbUV4ZWN1
dGFibGU6OlByb2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29k
ZSYgc291cmNlKQogICAgIDogU2NyaXB0RXhlY3V0YWJsZShleGVjLT52bSgpLnByb2dyYW1FeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCBleGVjLT52bSgpLCBzb3VyY2UsIGZhbHNlKQogeworICAg
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0ID0gMDsKKyAgICBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSBzb3VyY2UubGVuZ3RoKCkgLSAxOworICAg
IGlmIChleGVjLT52bSgpLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAg
ICAgIGV4ZWMtPnZtKCkuaGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyKCktPmZ1bmN0aW9uSGFzRXhl
Y3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uoc291cmNlSUQoKSwgbV9oaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQsIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGlu
Z0VuZE9mZnNldCk7CiB9CiAKIHZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQpAQCAtNDAyLDYgKzQwOSw4IEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25F
eGVjdXRhYmxlKFYKICAgICBBU1NFUlQoZW5kQ29sdW1uICE9IFVJTlRfTUFYKTsKICAgICBtX3N0
YXJ0Q29sdW1uID0gc3RhcnRDb2x1bW47CiAgICAgbV9lbmRDb2x1bW4gPSBlbmRDb2x1bW47Cisg
ICAgbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1
dGFibGUtPmhpZ2hGaWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldCgpOworICAgIG1faGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJsZS0+aGln
aEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpOwogfQogCiB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCkBAIC01MDAsNiArNTA5LDEwIEBAIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6aW5pdGlhbGl6ZUcKICAgICAgICAgVW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlID0gZnVuY3Rpb25EZWNs
YXJhdGlvbnNbaV0uc2Vjb25kLmdldCgpOwogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+bGluayh2bSwgbV9z
b3VyY2UsIGxpbmVObygpKSwgc2NvcGUpOwogICAgICAgICBnbG9iYWxPYmplY3QtPmFkZEZ1bmN0
aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb25EZWNsYXJhdGlvbnNbaV0uZmlyc3QsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKHZtLmlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCisgICAgICAg
ICAgICB2bS5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIoKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShzb3VyY2VJRCgpLCAKKyAgICAgICAgICAgICAg
ICB1bmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS0+aGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0KCksIAorICAgICAgICAgICAgICAgIHVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxl
LT5oaWdoRmlkZWxpdHlUeXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFyaWFibGVEZWNsYXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzY1LDYgKzM2NSw4IEBAIHB1YmxpYzoKICAgICBpbnQgbGFz
dExpbmUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RMaW5lOyB9CiAgICAgdW5zaWduZWQgc3RhcnRD
b2x1bW4oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0Q29sdW1uOyB9CiAgICAgdW5zaWduZWQgZW5k
Q29sdW1uKCkgY29uc3QgeyByZXR1cm4gbV9lbmRDb2x1bW47IH0KKyAgICB1bnNpZ25lZCBoaWdo
RmlkZWxpdHlUeXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxpbmdTdGFydE9mZnNldDsgfQorICAgIHVuc2lnbmVkIGhpZ2hGaWRl
bGl0eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxpbmdFbmRPZmZzZXQ7IH0KIAogICAgIGJvb2wgdXNlc0V2YWwoKSBjb25zdCB7
IHJldHVybiBtX2ZlYXR1cmVzICYgRXZhbEZlYXR1cmU7IH0KICAgICBib29sIHVzZXNBcmd1bWVu
dHMoKSBjb25zdCB7IHJldHVybiBtX2ZlYXR1cmVzICYgQXJndW1lbnRzRmVhdHVyZTsgfQpAQCAt
NDM1LDYgKzQzNyw4IEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9sYXN0TGluZTsKICAgICB1bnNp
Z25lZCBtX3N0YXJ0Q29sdW1uOwogICAgIHVuc2lnbmVkIG1fZW5kQ29sdW1uOworICAgIHVuc2ln
bmVkIG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0OworICAgIHVuc2lnbmVk
IG1faGlnaEZpZGVsaXR5VHlwZVByb2ZpbGluZ0VuZE9mZnNldDsKIH07CiAKIGNsYXNzIEV2YWxF
eGVjdXRhYmxlIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIgorCituYW1l
c3BhY2UgSlNDIHsKKworYm9vbCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6Omhhc0V4ZWN1dGVk
QXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAobV9yYW5n
ZU1hcC5maW5kKGlkKSA9PSBtX3JhbmdlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSYW5nZU1hcCYgbWFwID0gbV9yYW5nZU1hcC5maW5kKGlkKS0+c2Vjb25kOworICAg
IHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7CisgICAgYm9vbCBoYXNFeGVjdXRlZCA9IGZh
bHNlOworICAgIGZvciAoYXV0byBpdGVyID0gbWFwLmJlZ2luKCksIGVuZCA9IG1hcC5lbmQoKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBjb25zdCBGdW5jdGlvblJhbmdlJiByYW5n
ZSA9IGl0ZXItPmZpcnN0OworICAgICAgICBpZiAocmFuZ2UubV9zdGFydCA8PSBvZmZzZXQgJiYg
b2Zmc2V0IDw9IHJhbmdlLm1fZW5kICYmIHJhbmdlLm1fZW5kIC0gcmFuZ2UubV9zdGFydCA8IGRp
c3RhbmNlKSB7CisgICAgICAgICAgICBoYXNFeGVjdXRlZCA9IGl0ZXItPnNlY29uZDsKKyAgICAg
ICAgICAgIGRpc3RhbmNlID0gcmFuZ2UubV9lbmQgLSByYW5nZS5tX3N0YXJ0OworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGhhc0V4ZWN1dGVkOworfQorCit2b2lkIEZ1bmN0aW9uSGFz
RXhlY3V0ZWRDYWNoZTo6aW5zZXJ0VW5leGVjdXRlZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKSAKK3sKKyAgICBpZiAobV9yYW5nZU1hcC5maW5kKGlkKSA9
PSBtX3JhbmdlTWFwLmVuZCgpKSB7CisgICAgICAgIFJhbmdlTWFwIG1hcDsKKyAgICAgICAgbV9y
YW5nZU1hcFtpZF0gPSBtYXA7CisgICAgfQorCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VN
YXAuZmluZChpZCktPnNlY29uZDsKKyAgICBGdW5jdGlvblJhbmdlIHJhbmdlOworICAgIHJhbmdl
Lm1fc3RhcnQgPSBzdGFydDsKKyAgICByYW5nZS5tX2VuZCA9IGVuZDsKKyAgICAvLyBPbmx5IGlu
c2VydCB1bmV4ZWN1dGVkIHJhbmdlcyBvbmNlIGZvciBhIGdpdmVuIHNvdXJjZUlEIGJlY2F1c2Ug
d2UgbWF5IHJ1biBpbnRvIGEgc2l0dWF0aW9uIHdoZXJlIGFuIGV4ZWN1dGFibGUgZXhlY3V0ZXMs
IHRoZW4gaXMgR0NlZCwgYW5kIHRoZW4gaXMgYWxsb2NhdGVkIGFnYWluLAorICAgIC8vIGFuZCB0
cmllcyB0byByZWluc2VydCBpdHNlbGYsIGNsYWltaW5nIGl0IGhhcyBuZXZlciBydW4sIGJ1dCB0
aGlzIGlzIGZhbHNlIGJlY2F1c2UgaXQgaW5kZWVkIGFscmVhZHkgZXhlY3V0ZWQuCisgICAgaWYg
KG1hcC5maW5kKHJhbmdlKSA9PSBtYXAuZW5kKCkpCisgICAgICAgIG1hcFtyYW5nZV0gPSBmYWxz
ZTsKK30KKwordm9pZCBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU6OnJlbW92ZVVuZXhlY3V0ZWRS
YW5nZShpbnRwdHJfdCBpZCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKK3sKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gaW5zdGFuY2Ugd2hlcmUgd2UgcmV0dXJu
IGhlcmUsIGJ1dCBjdXJyZW50bHkgZG8gaW4gc29tZSBzaXR1YXRpb25zLiBGaW5kIG91dCB3aHku
CisgICAgaWYgKG1fcmFuZ2VNYXAuZmluZChpZCkgPT0gbV9yYW5nZU1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmFuZ2VNYXAmIG1hcCA9IG1fcmFuZ2VNYXAuZmluZChpZCktPnNl
Y29uZDsKKworICAgIEZ1bmN0aW9uUmFuZ2UgcmFuZ2U7CisgICAgcmFuZ2UubV9zdGFydCA9IHN0
YXJ0OworICAgIHJhbmdlLm1fZW5kID0gZW5kOworICAgIG1hcFtyYW5nZV0gPSB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hl
X2gKKyNkZWZpbmUgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlX2gKKworI2luY2x1ZGUgPHVub3Jk
ZXJlZF9tYXA+CisjaW5jbHVkZSA8d3RmL0hhc2hNZXRob2QuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSB7CitwdWJsaWM6CisgICAgc3RydWN0
IEZ1bmN0aW9uUmFuZ2UgeworICAgICAgICBGdW5jdGlvblJhbmdlKCkge30KKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZ1bmN0aW9uUmFuZ2UmIG90aGVyKSBjb25zdCAKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9
PSBvdGhlci5tX2VuZDsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3RhcnQgKiBtX2VuZDsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIG1fZW5kOwor
ICAgIH07CisKKyAgICBib29sIGhhc0V4ZWN1dGVkQXRPZmZzZXQoaW50cHRyX3QgaWQsIHVuc2ln
bmVkIG9mZnNldCk7CisgICAgdm9pZCBpbnNlcnRVbmV4ZWN1dGVkUmFuZ2UoaW50cHRyX3QgaWQs
IHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOworICAgIHZvaWQgcmVtb3ZlVW5leGVjdXRl
ZFJhbmdlKGludHB0cl90IGlkLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKKworcHJp
dmF0ZTogICAgIAorICAgIHR5cGVkZWYgc3RkOjp1bm9yZGVyZWRfbWFwPEZ1bmN0aW9uUmFuZ2Us
IGJvb2wsIEhhc2hNZXRob2Q8RnVuY3Rpb25SYW5nZT4+IFJhbmdlTWFwOworICAgIHR5cGVkZWYg
c3RkOjp1bm9yZGVyZWRfbWFwPGludHB0cl90LCBSYW5nZU1hcD4gU291cmNlSURUb1JhbmdlTWFw
OworICAgIFNvdXJjZUlEVG9SYW5nZU1hcCBtX3JhbmdlTWFwOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKKyNlbmRpZiAvLyBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGVfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5TG9nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlMb2cuY3BwCShy
ZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlk
ZWxpdHlMb2cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw0NSArNTMsMjUgQEAgSGlnaEZpZGVs
aXR5TG9nOjp+SGlnaEZpZGVsaXR5TG9nKCkKICAgICBkZWxldGVbXSBtX25leHRCdWZmZXI7CiB9
CiAKLXZvaWQgSGlnaEZpZGVsaXR5TG9nOjpwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKGJvb2wgYXN5
bmNocm9ub3VzbHksIFN0cmluZyByZWFzb24pCit2b2lkIEhpZ2hGaWRlbGl0eUxvZzo6cHJvY2Vz
c0hpZ2hGaWRlbGl0eUxvZyhTdHJpbmcgcmVhc29uKQogewotICAgIC8vIFRoaXMgc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIGZyb20gdGhlIG1haW4gZXhlY3V0aW9uIHRocmVhZC4KICAgICBpZiAoIW1f
Y3VycmVudE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgIGRhdGFMb2coIlByb2Nlc3MgY2FsbGVyOiciLCByZWFzb24sIiciKTsKIAotICAgIEJ5dGVT
cGluTG9ja2VyKiBsb2NrZXIgPSBuZXcgQnl0ZVNwaW5Mb2NrZXIobV9sb2NrKTsKLSAgICBUaHJl
YWREYXRhKiBkYXRhID0gbmV3IFRocmVhZERhdGE7Ci0gICAgZGF0YS0+bV9wcm9jY2Vzc0xvZ1Rv
T2Zmc2V0ID0gbV9jdXJyZW50T2Zmc2V0OwotICAgIGRhdGEtPm1fcHJvY2Vzc0xvZ1B0ciA9IG1f
bG9nU3RhcnRQdHI7Ci0gICAgZGF0YS0+bV9sb2NrZXIgPSBsb2NrZXI7Ci0KLSAgICBtX2N1cnJl
bnRPZmZzZXQgPSAwOwotICAgIHN0ZDo6c3dhcChtX2xvZ1N0YXJ0UHRyLCBtX25leHRCdWZmZXIp
OwotICAgIAotICAgIGlmIChhc3luY2hyb25vdXNseSkKLSAgICAgICAgY3JlYXRlVGhyZWFkKGFj
dHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0aW9uLCBkYXRhLCAiUHJvY2Vzc0hpZ2hGaWRlbGl0
eUxvZyIpOwotICAgIGVsc2UgCi0gICAgICAgIGFjdHVhbGx5UHJvY2Vzc0xvZ1RocmVhZEZ1bmN0
aW9uKGRhdGEpOwotfQotCi12b2lkIEhpZ2hGaWRlbGl0eUxvZzo6YWN0dWFsbHlQcm9jZXNzTG9n
VGhyZWFkRnVuY3Rpb24odm9pZCogYXJnKQotewogICAgIGRvdWJsZSBiZWZvcmUgPSBjdXJyZW50
VGltZU1TKCk7Ci0gICAgVGhyZWFkRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PFRocmVhZERhdGEq
PihhcmcpOwotICAgIExvZ0VudHJ5KiBlbnRyeSA9IGRhdGEtPm1fcHJvY2Vzc0xvZ1B0cjsKKyAg
ICBMb2dFbnRyeSogZW50cnkgPSBtX2xvZ1N0YXJ0UHRyOwogICAgIEhhc2hNYXA8U3RydWN0dXJl
SUQsIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4+IHNlZW5TaGFwZXM7Ci0gICAgc2l6ZV90IHByb2Nl
c3NMb2dUb09mZnNldCA9IGRhdGEtPm1fcHJvY2Nlc3NMb2dUb09mZnNldDsgCiAgICAgc2l6ZV90
IGkgPSAwOwotICAgIHdoaWxlIChpIDwgcHJvY2Vzc0xvZ1RvT2Zmc2V0KSB7CisgICAgd2hpbGUg
KGkgPCBtX2N1cnJlbnRPZmZzZXQpIHsKICAgICAgICAgU3RydWN0dXJlSUQgaWQgPSBlbnRyeS0+
c3RydWN0dXJlSUQ7CiAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gc2hhcGU7IAogICAg
ICAgICBpZiAoaWQpIHsKICAgICAgICAgICAgIGF1dG8gaXRlciA9IHNlZW5TaGFwZXMuZmluZChp
ZCk7CiAgICAgICAgICAgICBpZiAoaXRlciA9PSBzZWVuU2hhcGVzLmVuZCgpKSB7Ci0gICAgICAg
ICAgICAgICAgc2hhcGUgPSBlbnRyeS0+dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50b1N0
cnVjdHVyZVNoYXBlKCk7CisgICAgICAgICAgICAgICAgc2hhcGUgPSBIZWFwOjpoZWFwKGVudHJ5
LT52YWx1ZS5hc0NlbGwoKSktPnN0cnVjdHVyZUlEVGFibGUoKS5nZXQoZW50cnktPnN0cnVjdHVy
ZUlEKS0+dG9TdHJ1Y3R1cmVTaGFwZShlbnRyeS0+dmFsdWUpOwogICAgICAgICAgICAgICAgIHNl
ZW5TaGFwZXMuc2V0KGlkLCBzaGFwZSk7CiAgICAgICAgICAgICB9IGVsc2UgCiAgICAgICAgICAg
ICAgICAgc2hhcGUgPSBpdGVyLT52YWx1ZTsKQEAgLTEwNSwxMSArODUsMTIgQEAgdm9pZCBIaWdo
RmlkZWxpdHlMb2c6OmFjdHVhbGx5UHJvY2Vzc0xvZwogICAgICAgICBpKys7CiAgICAgfQogCi0g
ICAgZGVsZXRlIGRhdGEtPm1fbG9ja2VyOwotICAgIGRlbGV0ZSBkYXRhOwotICAgIGRvdWJsZSBh
ZnRlciA9IGN1cnJlbnRUaW1lTVMoKTsKLSAgICBpZiAodmVyYm9zZSkKKyAgICBtX2N1cnJlbnRP
ZmZzZXQgPSAwOworCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZG91YmxlIGFmdGVyID0g
Y3VycmVudFRpbWVNUygpOwogICAgICAgICBkYXRhTG9nRigiIFByb2Nlc3NpbmcgdGhlIGxvZyB0
b29rOiAnJWYnIG1zXG4iLCBhZnRlciAtIGJlZm9yZSk7CisgICAgfQogfQogCiB9IC8vbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZpZGVsaXR5
TG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGlnaEZp
ZGVsaXR5TG9nLmgJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0hpZ2hGaWRlbGl0eUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTMg
QEAgcHVibGljOgogICAgIAogICAgICAgICBtX2N1cnJlbnRPZmZzZXQgKz0gMTsKICAgICAgICAg
aWYgKG1fY3VycmVudE9mZnNldCA9PSBtX2hpZ2hGaWRlbGl0eUxvZ1NpemUpCi0gICAgICAgICAg
ICBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKHRydWUsICJMb2cgRnVsbCIpOworICAgICAgICAgICAg
cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiTG9nIEZ1bGwiKTsKICAgICB9CiAKLSAgICB2b2lkIHBy
b2Nlc3NIaWdoRmlkZWxpdHlMb2coYm9vbCBhc3luY2hyb25vdXNseSA9IGZhbHNlLCBTdHJpbmcg
PSAiIik7CisgICAgdm9pZCBwcm9jZXNzSGlnaEZpZGVsaXR5TG9nKFN0cmluZyk7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBpbml0aWFsaXplSGlnaEZpZGVsaXR5TG9nKCk7Ci0gICAgc3RhdGljIHZv
aWQgYWN0dWFsbHlQcm9jZXNzTG9nVGhyZWFkRnVuY3Rpb24odm9pZCopOwogCiAgICAgdW5zaWdu
ZWQgbV9oaWdoRmlkZWxpdHlMb2dTaXplOwogICAgIHNpemVfdCBtX2N1cnJlbnRPZmZzZXQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxpdHlUeXBlUHJvZmls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hG
aWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE3MTM2OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDcyICsyNiwxMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuaCIKIAorI2luY2x1ZGUgIkluc3BlY3RvckpTVHlw
ZUJ1aWxkZXJzLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBzdGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLVN0cmluZyBIaWdoRmlk
ZWxpdHlUeXBlUHJvZmlsZXI6OmdldFR5cGVzRm9yVmFyaWFibGVJbkF0T2Zmc2V0KHVuc2lnbmVk
IGRpdm90LCBjb25zdCBTdHJpbmcmIHZhcmlhYmxlTmFtZSwgaW50cHRyX3Qgc291cmNlSUQpCit2
b2lkIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcjo6bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24oVHlw
ZUxvY2F0aW9uKiBsb2NhdGlvbikKIHsKLSAgICBTdHJpbmcgZ2xvYmFsID0gZ2V0R2xvYmFsVHlw
ZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJsZU5hbWUsIHNvdXJjZUlEKTsKLSAg
ICBpZiAoIWdsb2JhbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWw7Ci0gICAgCi0g
ICAgcmV0dXJuIGdldExvY2FsVHlwZXNGb3JWYXJpYWJsZUF0T2Zmc2V0KGRpdm90LCB2YXJpYWJs
ZU5hbWUsIHNvdXJjZUlEKTsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2Ny
aXB0b3IgPSBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVy
blN0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybgor
ICAgICAgICA6IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5VGhp
c1N0YXRlbWVudCA/IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JUaGlzU3RhdGVtZW50Cisg
ICAgICAgIDogVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbDsKKworICAgIGRhdGFM
b2dGKCJbU3RhcnQsIEVuZF06OlsldSwgJXVdXG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBs
b2NhdGlvbi0+bV9kaXZvdEVuZCk7CisKKyAgICBpZiAoZmluZExvY2F0aW9uKGxvY2F0aW9uLT5t
X2Rpdm90U3RhcnQsIGxvY2F0aW9uLT5tX3NvdXJjZUlELCBkZXNjcmlwdG9yKSkKKyAgICAgICAg
ZGF0YUxvZygiXHRcdFtFbnRyeSBJUyBpbiBTeXN0ZW1dXG4iKTsKKyAgICBlbHNlCisgICAgICAg
IGRhdGFMb2coIlx0XHRbRW50cnkgSVMgTk9UIGluIHN5c3RlbV1cbiIpOworCisgICAgZGF0YUxv
ZygiXHRcdCIsIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPT0gSGlnaEZpZGVsaXR5UmV0
dXJuU3RhdGVtZW50ID8gIltSZXR1cm4gU3RhdGVtZW50XSIKKyAgICAgICAgOiBsb2NhdGlvbi0+
bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVRoaXNTdGF0ZW1lbnQgPyAiW1RoaXMg
U3RhdGVtZW50XSIKKyAgICAgICAgOiAiW05vcm1hbCBTdGF0ZW1lbnRdIiwgIlxuIik7CisKKyAg
ICBkYXRhTG9nKCJcdFx0I0xvY2FsI1xuXHRcdCIsIGxvY2F0aW9uLT5tX2luc3RydWN0aW9uVHlw
ZVNldC0+c2VlblR5cGVzKCkucmVwbGFjZSgiXG4iLCAiXG5cdFx0IiksICJcbiIpOworICAgIGlm
IChsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0KQorICAgICAgICBkYXRhTG9nKCJcdFx0I0dsb2Jh
bCNcblx0XHQiLCBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5zZWVuVHlwZXMoKS5yZXBsYWNl
KCJcbiIsICJcblx0XHQiKSwgIlxuIik7CiB9CiAKLVN0cmluZyBIaWdoRmlkZWxpdHlUeXBlUHJv
ZmlsZXI6OmdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwg
Y29uc3QgU3RyaW5nJiAsIGludHB0cl90IHNvdXJjZUlEKQordm9pZCBIaWdoRmlkZWxpdHlUeXBl
UHJvZmlsZXI6Omluc2VydE5ld0xvY2F0aW9uKFR5cGVMb2NhdGlvbiogbG9jYXRpb24pCiB7Ci0g
ICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSUQp
OwotICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVybiAgIiI7CisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2dGKCJSZWdpc3RlcmluZyBsb2NhdGlvbjo6IGRpdm90U3RhcnQ6
JXUsIGRpdm90RW5kOiV1XG4iLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+bV9k
aXZvdEVuZCk7CiAKLSAgICBpZiAobG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJRCA9PSBIaWdo
RmlkZWxpdHlOb0dsb2JhbElERXhpc3RzKQotICAgICAgICByZXR1cm4gIiI7CisgICAgaWYgKCFt
X2J1Y2tldE1hcC5jb250YWlucyhsb2NhdGlvbi0+bV9zb3VyY2VJRCkpIHsKKyAgICAgICAgVmVj
dG9yPFR5cGVMb2NhdGlvbio+IGJ1Y2tldDsKKyAgICAgICAgbV9idWNrZXRNYXAuc2V0KGxvY2F0
aW9uLT5tX3NvdXJjZUlELCBidWNrZXQpOworICAgIH0KIAotICAgIHJldHVybiBsb2NhdGlvbi0+
bV9nbG9iYWxUeXBlU2V0LT5zZWVuVHlwZXMoKTsKKyAgICBWZWN0b3I8VHlwZUxvY2F0aW9uKj4m
IGJ1Y2tldCA9IG1fYnVja2V0TWFwLmZpbmQobG9jYXRpb24tPm1fc291cmNlSUQpLT52YWx1ZTsK
KyAgICBidWNrZXQuYXBwZW5kKGxvY2F0aW9uKTsKIH0KIAotU3RyaW5nIEhpZ2hGaWRlbGl0eVR5
cGVQcm9maWxlcjo6Z2V0TG9jYWxUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2
b3QsIGNvbnN0IFN0cmluZyYgLCBpbnRwdHJfdCBzb3VyY2VJRCkKK3ZvaWQgSGlnaEZpZGVsaXR5
VHlwZVByb2ZpbGVyOjpnZXRUeXBlc0ZvclZhcmlhYmxlQXRPZmZzZXRGb3JJbnNwZWN0b3IoVHlw
ZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCB1bnNpZ25lZCBkaXZvdCwgaW50
cHRyX3Qgc291cmNlSUQsIFJlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4mIHJldCkK
IHsKLSAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gZmluZExvY2F0aW9uKGRpdm90LCBzb3Vy
Y2VJRCk7CisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IGZpbmRMb2NhdGlvbihkaXZvdCwg
c291cmNlSUQsIGRlc2NyaXB0b3IpOwogICAgIGlmICghbG9jYXRpb24pCi0gICAgICAgIHJldHVy
biAgIiI7CisgICAgICAgIHJldHVybjsKIAotICAgIHJldHVybiBsb2NhdGlvbi0+bV9pbnN0cnVj
dGlvblR5cGVTZXQtPnNlZW5UeXBlcygpOworICAgIGlmIChsb2NhdGlvbi0+bV9nbG9iYWxUeXBl
U2V0ICYmIGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgIT0gSGlnaEZpZGVsaXR5Tm9HbG9i
YWxJREV4aXN0cykgeworICAgICAgICByZXQtPnNldFN0cmluZyhBU0NJSUxpdGVyYWwoImRpc3Bs
YXlUeXBlTmFtZSIpLCBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5kaXNwbGF5TmFtZSgpKTsK
KyAgICAgICAgcmV0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImdsb2JhbFByaW1pdGl2ZVR5cGVO
YW1lcyIpLCBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0LT5hbGxQcmltaXRpdmVUeXBlTmFtZXMo
KS0+YXNBcnJheSgpKTsKKyAgICAgICAgcmV0LT5zZXRBcnJheShBU0NJSUxpdGVyYWwoImdsb2Jh
bFN0cnVjdHVyZXMiKSwgbG9jYXRpb24tPm1fZ2xvYmFsVHlwZVNldC0+YWxsU3RydWN0dXJlUmVw
cmVzZW50YXRpb25zKCktPmFzQXJyYXkoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJldC0+c2V0
U3RyaW5nKEFTQ0lJTGl0ZXJhbCgiZGlzcGxheVR5cGVOYW1lIiksIGxvY2F0aW9uLT5tX2luc3Ry
dWN0aW9uVHlwZVNldC0+ZGlzcGxheU5hbWUoKSk7CisKKyAgICByZXQtPnNldEFycmF5KEFTQ0lJ
TGl0ZXJhbCgibG9jYWxQcmltaXRpdmVUeXBlTmFtZXMiKSwgbG9jYXRpb24tPm1faW5zdHJ1Y3Rp
b25UeXBlU2V0LT5hbGxQcmltaXRpdmVUeXBlTmFtZXMoKS0+YXNBcnJheSgpKTsKKyAgICByZXQt
PnNldEFycmF5KEFTQ0lJTGl0ZXJhbCgibG9jYWxTdHJ1Y3R1cmVzIiksIGxvY2F0aW9uLT5tX2lu
c3RydWN0aW9uVHlwZVNldC0+YWxsU3RydWN0dXJlUmVwcmVzZW50YXRpb25zKCktPmFzQXJyYXko
KSk7CiB9CiAKLXZvaWQgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjppbnNlcnROZXdMb2NhdGlv
bihUeXBlTG9jYXRpb24qIGxvY2F0aW9uKQorc3RhdGljIGJvb2wgZGVzY3JpcHRvck1hdGNoZXNU
eXBlTG9jYXRpb24oVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvciBkZXNjcmlwdG9yLCBUeXBl
TG9jYXRpb24qIGxvY2F0aW9uKQogewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9n
RigiUmVnaXN0ZXJpbmcgbG9jYXRpb246OiBkaXZvdFN0YXJ0OiV1LCBkaXZvdEVuZDoldVxuIiwg
bG9jYXRpb24tPm1fZGl2b3RTdGFydCwgbG9jYXRpb24tPm1fZGl2b3RFbmQpOworICAgIGlmIChk
ZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVybiAm
JiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEID09IEhpZ2hGaWRlbGl0eVJldHVyblN0YXRl
bWVudCkgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGlmICghbV9idWNrZXRNYXAuY29u
dGFpbnMobG9jYXRpb24tPm1fc291cmNlSUQpKSB7Ci0gICAgICAgIFZlY3RvcjxUeXBlTG9jYXRp
b24qPiBidWNrZXQ7Ci0gICAgICAgIG1fYnVja2V0TWFwLnNldChsb2NhdGlvbi0+bV9zb3VyY2VJ
RCwgYnVja2V0KTsKLSAgICB9CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvclRoaXNTdGF0ZW1lbnQgJiYgbG9jYXRpb24tPm1fZ2xvYmFsVmFyaWFibGVJ
RCA9PSBIaWdoRmlkZWxpdHlUaGlzU3RhdGVtZW50KSAgCisgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgVmVjdG9yPFR5cGVMb2NhdGlvbio+JiBidWNrZXQgPSBtX2J1Y2tldE1hcC5maW5kKGxv
Y2F0aW9uLT5tX3NvdXJjZUlEKS0+dmFsdWU7Ci0gICAgYnVja2V0LmFwcGVuZChsb2NhdGlvbik7
CisgICAgaWYgKGRlc2NyaXB0b3IgPT0gVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1h
bCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0eVJldHVyblN0
YXRlbWVudCAmJiBsb2NhdGlvbi0+bV9nbG9iYWxWYXJpYWJsZUlEICE9IEhpZ2hGaWRlbGl0eVRo
aXNTdGF0ZW1lbnQpICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLVR5cGVMb2NhdGlvbiogSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyOjpmaW5kTG9jYXRp
b24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlEKQorVHlwZUxvY2F0aW9uKiBIaWdo
RmlkZWxpdHlUeXBlUHJvZmlsZXI6OmZpbmRMb2NhdGlvbih1bnNpZ25lZCBkaXZvdCwgaW50cHRy
X3Qgc291cmNlSUQsIFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3IgZGVzY3JpcHRvcikKIHsK
LSAgICBBU1NFUlQobV9idWNrZXRNYXAuY29udGFpbnMoc291cmNlSUQpKTsgCisgICAgUXVlcnlL
ZXkgcXVlcnlLZXkoc291cmNlSUQsIGRpdm90KTsKKyAgICBhdXRvIGl0ZXIgPSBtX3F1ZXJ5Q2Fj
aGUuZmluZChxdWVyeUtleSk7CisgICAgaWYgKGl0ZXIgIT0gbV9xdWVyeUNhY2hlLmVuZCgpKQor
ICAgICAgICByZXR1cm4gaXRlci0+dmFsdWU7CisKKyAgICBpZiAoIW1fZnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlLmhhc0V4ZWN1dGVkQXRPZmZzZXQoc291cmNlSUQsIGRpdm90KSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQobV9idWNrZXRNYXAuY29udGFpbnMoc291cmNl
SUQpKTsKIAogICAgIFZlY3RvcjxUeXBlTG9jYXRpb24qPiYgYnVja2V0ID0gbV9idWNrZXRNYXAu
ZmluZChzb3VyY2VJRCktPnZhbHVlOwotICAgIHVuc2lnbmVkIGRpc3RhbmNlID0gVUlOVF9NQVg7
IC8vIEJlY2F1c2UgYXNzaWdubWVudHMgbWF5IGJlIG5lc3RlZCwgbWFrZSBzdXJlIHdlIGZpbmQg
dGhlIGNsb3Nlc3QgZW5jbG9zaW5nIGFzc2lnbm1lbnQgdG8gdGhpcyBjaGFyYWN0ZXIgb2Zmc2V0
LgogICAgIFR5cGVMb2NhdGlvbiogYmVzdE1hdGNoID0gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBk
aXN0YW5jZSA9IFVJTlRfTUFYOyAvLyBCZWNhdXNlIGFzc2lnbm1lbnRzIG1heSBiZSBuZXN0ZWQs
IG1ha2Ugc3VyZSB3ZSBmaW5kIHRoZSBjbG9zZXN0IGVuY2xvc2luZyBhc3NpZ25tZW50IHRvIHRo
aXMgY2hhcmFjdGVyIG9mZnNldC4KICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IGJ1Y2tl
dC5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlv
biA9IGJ1Y2tldC5hdChpKTsKLSAgICAgICAgaWYgKGxvY2F0aW9uLT5tX2Rpdm90U3RhcnQgPD0g
ZGl2b3QgJiYgZGl2b3QgPD0gbG9jYXRpb24tPm1fZGl2b3RFbmQgJiYgbG9jYXRpb24tPm1fZGl2
b3RFbmQgLSBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpc3RhbmNlKSB7CisgICAgICAgIGlm
IChkZXNjcmlwdG9yID09IFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JGdW5jdGlvblJldHVy
biAmJiBkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbihkZXNjcmlwdG9yLCBsb2NhdGlvbikg
JiYgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNldElmUmV0dXJuU3RhdGVtZW50ID09
IGRpdm90KQorICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOworCisgICAgICAgIGlmIChsb2Nh
dGlvbi0+bV9kaXZvdFN0YXJ0IDw9IGRpdm90ICYmIGRpdm90IDw9IGxvY2F0aW9uLT5tX2Rpdm90
RW5kICYmIGxvY2F0aW9uLT5tX2Rpdm90RW5kIC0gbG9jYXRpb24tPm1fZGl2b3RTdGFydCA8PSBk
aXN0YW5jZSAmJiBkZXNjcmlwdG9yTWF0Y2hlc1R5cGVMb2NhdGlvbihkZXNjcmlwdG9yLCBsb2Nh
dGlvbikpIHsKICAgICAgICAgICAgIGRpc3RhbmNlID0gbG9jYXRpb24tPm1fZGl2b3RFbmQgLSBs
b2NhdGlvbi0+bV9kaXZvdFN0YXJ0OwogICAgICAgICAgICAgYmVzdE1hdGNoID0gbG9jYXRpb247
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBGSVhNRTogQmVzdE1hdGNoIHNob3VsZCBuZXZl
ciBiZSBudWxsLiBUaGlzIGRvZXNuJ3QgaG9sZCBjdXJyZW50bHkgYmVjYXVzZSB3ZSBpZ25vcmUg
c29tZSBFdmFsL1dpdGgvVmFySW5qZWN0aW9uIHZhcmlhYmxlIGFzc2lnbm1lbnRzLgorICAgIGlm
IChiZXN0TWF0Y2gpCisgICAgICAgIG1fcXVlcnlDYWNoZS5zZXQocXVlcnlLZXksIGJlc3RNYXRj
aCk7CisgICAgLy8gRklYTUU6IEJlc3RNYXRjaCBzaG91bGQgbmV2ZXIgYmUgbnVsbCBwYXN0IHRo
aXMgcG9pbnQuIFRoaXMgZG9lc24ndCBob2xkIGN1cnJlbnRseSBiZWNhdXNlIHdlIGlnbm9yZSB2
YXIgYXNzaWdubWVudHMgd2hlbiBjb2RlIGNvbnRhaW5zIGV2YWwvV2l0aCAoVmFySW5qZWN0aW9u
KS4gCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTE4
NAogICAgIHJldHVybiBiZXN0TWF0Y2g7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hpZ2hGaWRlbGl0eVR5cGVQcm9maWxlci5oCShyZXZp
c2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IaWdoRmlkZWxp
dHlUeXBlUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMzEgKzI3LDkzIEBACiAjZGVm
aW5lIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlcl9oCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
LSNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgorI2luY2x1ZGUgIkZ1bmN0aW9uSGFzRXhlY3V0ZWRD
YWNoZS5oIgorI2luY2x1ZGUgIlR5cGVMb2NhdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1ldGhvZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorbmFtZXNwYWNlIEluc3Bl
Y3RvciB7IG5hbWVzcGFjZSBUeXBlQnVpbGRlciAgeyBuYW1lc3BhY2UgUnVudGltZSB7CitjbGFz
cyBUeXBlRGVzY3JpcHRpb247Cit9fX0KK25hbWVzcGFjZSBJbnNwZWN0b3IgeworY2xhc3MgSW5z
cGVjdG9yT2JqZWN0OworfQorCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgVHlwZUxvY2F0aW9u
OwogCi1jbGFzcyBIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIgeworc3RydWN0IFF1ZXJ5S2V5IHsK
KyAgICBRdWVyeUtleSgpCisgICAgICAgIDogbV9zb3VyY2VJRCgwKQorICAgICAgICAsIG1fZGl2
b3QoMCkKKyAgICB7IH0KKworICAgIFF1ZXJ5S2V5KGludHB0cl90IHNvdXJjZUlELCB1bnNpZ25l
ZCBkaXZvdCkKKyAgICAgICAgOiBtX3NvdXJjZUlEKHNvdXJjZUlEKQorICAgICAgICAsIG1fZGl2
b3QoZGl2b3QpCisgICAgeyB9CisKKyAgICBRdWVyeUtleShXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCisgICAgICAgIDogbV9zb3VyY2VJRChJTlRQVFJfTUFYKQorICAgICAgICAsIG1f
ZGl2b3QoVUlOVF9NQVgpCisgICAgeyB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2VJRCA9PSBJTlRQVFJfTUFYICYmIG1fZGl2b3Qg
PT0gVUlOVF9NQVg7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUXVlcnlLZXkmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX3NvdXJjZUlEID09IG90aGVyLm1fc291cmNlSUQgJiYgbV9kaXZv
dCA9PSBvdGhlci5tX2Rpdm90OyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fc291cmNlSUQgKyBtX2Rpdm90OyB9CisKKyAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOworICAg
IHVuc2lnbmVkIG1fZGl2b3Q7Cit9OworCitzdHJ1Y3QgUXVlcnlLZXlIYXNoIHsKKyAgICBzdGF0
aWMgdW5zaWduZWQgaGFzaChjb25zdCBRdWVyeUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgp
OyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgUXVlcnlLZXkmIGEsIGNvbnN0IFF1ZXJ5
S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8vbmFtZXNwYWNlIEpTQwor
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpRdWVyeUtleT4geworICAg
IHR5cGVkZWYgSlNDOjpRdWVyeUtleUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
OlF1ZXJ5S2V5PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OlF1ZXJ5S2V5PiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKIAorZW51bSBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIHsKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9y
bWFsID0gMSwKKyAgICBUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yVGhpc1N0YXRlbWVudCA9
IDIsCisgICAgVHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvckZ1bmN0aW9uUmV0dXJuID0gMwor
fTsKKworY2xhc3MgSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVyIHsKIHB1YmxpYzoKLSAgICBTdHJp
bmcgZ2V0VHlwZXNGb3JWYXJpYWJsZUluQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0
cmluZyYgdmFyaWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCk7Ci0gICAgU3RyaW5nIGdldEds
b2JhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5n
JiB2YXJpYWJsZU5hbWUsIGludHB0cl90IHNvdXJjZUlEKTsKLSAgICBTdHJpbmcgZ2V0TG9jYWxU
eXBlc0ZvclZhcmlhYmxlQXRPZmZzZXQodW5zaWduZWQgZGl2b3QsIGNvbnN0IFN0cmluZyYgdmFy
aWFibGVOYW1lLCBpbnRwdHJfdCBzb3VyY2VJRCk7CisgICAgdm9pZCBsb2dUeXBlc0ZvclR5cGVM
b2NhdGlvbihUeXBlTG9jYXRpb24qKTsKKyAgICB2b2lkIGdldFR5cGVzRm9yVmFyaWFibGVBdE9m
ZnNldEZvckluc3BlY3RvcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3Is
IHVuc2lnbmVkIGRpdm90LCBpbnRwdHJfdCBzb3VyY2VJRCwgUmVmUHRyPEluc3BlY3Rvcjo6SW5z
cGVjdG9yT2JqZWN0PiYpOwogICAgIHZvaWQgaW5zZXJ0TmV3TG9jYXRpb24oVHlwZUxvY2F0aW9u
Kik7CisgICAgRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKiBmdW5jdGlvbkhhc0V4ZWN1dGVkQ2Fj
aGUoKSB7IHJldHVybiAmbV9mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGU7IH0KKyAgICBUeXBlTG9j
YXRpb25DYWNoZSogdHlwZUxvY2F0aW9uQ2FjaGUoKSB7IHJldHVybiAmbV90eXBlTG9jYXRpb25D
YWNoZTsgfQogICAgIAogcHJpdmF0ZToKLSAgICBUeXBlTG9jYXRpb24qIGZpbmRMb2NhdGlvbih1
bnNpZ25lZCBkaXZvdCwgaW50cHRyX3Qgc291cmNlSUQpOwotCisgICAgVHlwZUxvY2F0aW9uKiBm
aW5kTG9jYXRpb24odW5zaWduZWQgZGl2b3QsIGludHB0cl90IHNvdXJjZUlELCBUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yIGRlc2NyaXB0b3IpOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnRw
dHJfdCwgVmVjdG9yPFR5cGVMb2NhdGlvbio+PiBTb3VyY2VJRFRvTG9jYXRpb25CdWNrZXRNYXA7
CiAgICAgU291cmNlSURUb0xvY2F0aW9uQnVja2V0TWFwIG1fYnVja2V0TWFwOworICAgIEZ1bmN0
aW9uSGFzRXhlY3V0ZWRDYWNoZSBtX2Z1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZTsKKyAgICBUeXBl
TG9jYXRpb25DYWNoZSBtX3R5cGVMb2NhdGlvbkNhY2hlOworICAgIHR5cGVkZWYgSGFzaE1hcDxR
dWVyeUtleSwgVHlwZUxvY2F0aW9uKj4gVHlwZUxvY2F0aW9uUXVlcnlDYWNoZTsKKyAgICBUeXBl
TG9jYXRpb25RdWVyeUNhY2hlIG1fcXVlcnlDYWNoZTsKIH07CiAKLX0gLy9uYW1lc3BhY2UgSlND
Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vSGlnaEZpZGVsaXR5VHlwZVByb2ZpbGVy
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAko
cmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0OCwzNiArMTA0OCw3NCBAQCBib29sIFN0cnVj
dHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgfQogfQogCi0KLVBhc3NSZWZQdHI8
U3RydWN0dXJlU2hhcGU+IFN0cnVjdHVyZTo6dG9TdHJ1Y3R1cmVTaGFwZSgpCitQYXNzUmVmUHRy
PFN0cnVjdHVyZVNoYXBlPiBTdHJ1Y3R1cmU6OnRvU3RydWN0dXJlU2hhcGUoSlNWYWx1ZSB2YWx1
ZSkKIHsKLSAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZTsKLSAgICBSZWZQdHI8U3Ry
dWN0dXJlU2hhcGU+IHNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOworICAgIFJlZlB0
cjxTdHJ1Y3R1cmVTaGFwZT4gYmFzZVNoYXBlID0gU3RydWN0dXJlU2hhcGU6OmNyZWF0ZSgpOwor
ICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gY3VyU2hhcGUgPSBiYXNlU2hhcGU7CisgICAgU3Ry
dWN0dXJlKiBjdXJTdHJ1Y3R1cmUgPSB0aGlzOworICAgIEpTVmFsdWUgY3VyVmFsdWUgPSB2YWx1
ZTsKKyAgICB3aGlsZSAoY3VyU3RydWN0dXJlKSB7CisgICAgICAgIFZlY3RvcjxTdHJ1Y3R1cmUq
LCA4PiBzdHJ1Y3R1cmVzOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICAgICAg
UHJvcGVydHlUYWJsZSogdGFibGU7CisKKyAgICAgICAgY3VyU3RydWN0dXJlLT5maW5kU3RydWN0
dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxl
KTsKKyAgICAgICAgaWYgKHRhYmxlKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7CisgICAgICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7CisgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBl
bmQ7ICsraXRlcikKKyAgICAgICAgICAgICAgICBjdXJTaGFwZS0+YWRkUHJvcGVydHkoaXRlci0+
a2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RydWN0dXJlcy5zaXpl
KCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJl
c1tpXTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMpCisgICAg
ICAgICAgICAgICAgY3VyU2hhcGUtPmFkZFByb3BlcnR5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cy5nZXQoKSk7CisgICAgICAgIH0KIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0
ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwotICAgIAotICAgIGlm
ICh0YWJsZSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUt
PmJlZ2luKCk7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5l
bmQoKTsKKyAgICAgICAgYm9vbCBmb3VuZEN0b3JOYW1lID0gZmFsc2U7CisgICAgICAgIGlmIChK
U09iamVjdCogcHJvZmlsaW5nVmFsID0gY3VyVmFsdWUuZ2V0T2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIEV4ZWNTdGF0ZSogZXhlYyA9IHByb2ZpbGluZ1ZhbC0+Z2xvYmFsT2JqZWN0KCktPmdsb2Jh
bEV4ZWMoKTsKKyAgICAgICAgICAgIFByb3BlcnR5U2xvdCBzbG90KHN0b3JlZFByb3RvdHlwZSgp
KTsKKyAgICAgICAgICAgIFByb3BlcnR5TmFtZSBjb25zdHJ1Y3RvcihleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IpOworICAgICAgICAgICAgaWYgKHByb2ZpbGluZ1ZhbC0+Z2V0UHJv
cGVydHlTbG90KGV4ZWMsIGNvbnN0cnVjdG9yLCBzbG90KSkgeworICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBXaGF0IGlzIGEgY3VzdG9tIHByb3BlcnR5IHNsb3Q/CisgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3Ry
dWN0b3JWYWx1ZSA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgY29uc3RydWN0b3IpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY29uc3RydWN0b3JWYWx1ZS5pc0NlbGwoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKEpTQ2VsbCogY29uc3RydWN0b3JDZWxsID0gY29uc3RydWN0b3JWYWx1
ZS5hc0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChKU09iamVjdCog
Y3Rvck9iamVjdCA9IGNvbnN0cnVjdG9yQ2VsbC0+Z2V0T2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKEpTRnVuY3Rpb24qIGNvbnN0cnVjdG9yRnVuY3Rpb24g
PSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPihjdG9yT2JqZWN0KSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VyU2hhcGUtPnNldENvbnN0cnVjdG9yTmFtZShjb25z
dHJ1Y3RvckZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxheU5hbWUoZXhlYykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRDdG9yTmFtZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoSW50ZXJuYWxGdW5jdGlvbiogY29u
c3RydWN0b3JGdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGN0b3JP
YmplY3QpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJTaGFwZS0+
c2V0Q29uc3RydWN0b3JOYW1lKGNvbnN0cnVjdG9yRnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5
TmFtZShleGVjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEN0
b3JOYW1lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQogCi0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAg
c2hhcGUtPmFkZFByb3BlcnR5KGl0ZXItPmtleSk7Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3R1
cmUtPm1fbG9jay51bmxvY2soKTsKLSAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
c3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmVzW2ldOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91
cykKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWZvdW5kQ3Rvck5hbWUpCisg
ICAgICAgICAgICBjdXJTaGFwZS0+c2V0Q29uc3RydWN0b3JOYW1lKGN1clN0cnVjdHVyZS0+Y2xh
c3NJbmZvKCktPmNsYXNzTmFtZSk7CiAKLSAgICAgICAgc2hhcGUtPmFkZFByb3BlcnR5KHN0cnVj
dHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSk7Ci0gICAgfQorICAgICAgICBjdXJTaGFwZS0+
bWFya0FzRmluYWwoKTsKKworICAgICAgICBpZiAoY3VyU3RydWN0dXJlLT5zdG9yZWRQcm90b3R5
cGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBuZXdT
aGFwZSA9IFN0cnVjdHVyZVNoYXBlOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGN1clNoYXBlLT5z
ZXRQcm90byhuZXdTaGFwZSk7CisgICAgICAgICAgICBjdXJTaGFwZSA9IG5ld1NoYXBlOworICAg
ICAgICAgICAgY3VyVmFsdWUgPSBjdXJTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpOworICAg
ICAgICB9CiAKLSAgICBzaGFwZS0+bWFya0FzRmluYWwoKTsKLSAgICByZXR1cm4gc2hhcGUucmVs
ZWFzZSgpOworICAgICAgICBjdXJTdHJ1Y3R1cmUgPSBjdXJTdHJ1Y3R1cmUtPnN0b3JlZFByb3Rv
dHlwZVN0cnVjdHVyZSgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gYmFzZVNoYXBlLnJlbGVh
c2UoKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lv
biAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzkwLDcgKzM5MCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHN0
cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZtKTsK
ICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBl
KCk7CisgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZShKU1Zh
bHVlKTsKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2FjaGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVMb2NhdGlvbkNhY2hl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVM
b2NhdGlvbkNhY2hlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiVHlwZUxvY2F0aW9uQ2FjaGUuaCIKKworI2luY2x1ZGUgIlZNLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9vbD4gVHlwZUxv
Y2F0aW9uQ2FjaGU6OmdldFR5cGVMb2NhdGlvbihpbnQ2NF90IGdsb2JhbFZhcmlhYmxlSUQsIGlu
dHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBQYXNzUmVmUHRy
PFR5cGVTZXQ+IGdsb2JhbFR5cGVTZXQsIFZNKiB2bSkKK3sKKyAgICBMb2NhdGlvbktleSBrZXk7
CisgICAga2V5Lm1fZ2xvYmFsVmFyaWFibGVJRCA9IGdsb2JhbFZhcmlhYmxlSUQ7CisgICAga2V5
Lm1fc291cmNlSUQgPSBzb3VyY2VJRDsKKyAgICBrZXkubV9zdGFydCA9IHN0YXJ0OworICAgIGtl
eS5tX2VuZCA9IGVuZDsKKworICAgIGJvb2wgaXNOZXdMb2NhdGlvbiA9IGZhbHNlOworICAgIGlm
IChtX2xvY2F0aW9uTWFwLmZpbmQoa2V5KSA9PSBtX2xvY2F0aW9uTWFwLmVuZCgpKSB7CisgICAg
ICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSB2bS0+bmV4dExvY2F0aW9uKCk7CisgICAgICAg
IGxvY2F0aW9uLT5tX2dsb2JhbFZhcmlhYmxlSUQgPSBnbG9iYWxWYXJpYWJsZUlEOworICAgICAg
ICBsb2NhdGlvbi0+bV9zb3VyY2VJRCA9IHNvdXJjZUlEOworICAgICAgICBsb2NhdGlvbi0+bV9k
aXZvdFN0YXJ0ID0gc3RhcnQ7CisgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90RW5kID0gZW5kOwor
ICAgICAgICBsb2NhdGlvbi0+bV9nbG9iYWxUeXBlU2V0ID0gZ2xvYmFsVHlwZVNldDsKKworICAg
ICAgICBtX2xvY2F0aW9uTWFwW2tleV0gPSBsb2NhdGlvbjsKKyAgICAgICAgaXNOZXdMb2NhdGlv
biA9IHRydWU7CisgICAgfQorCisgICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9IG1fbG9jYXRp
b25NYXAuZmluZChrZXkpLT5zZWNvbmQ7CisgICAgcmV0dXJuIHN0ZDo6cGFpcjxUeXBlTG9jYXRp
b24qLCBib29sPihsb2NhdGlvbiwgaXNOZXdMb2NhdGlvbik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZUxvY2F0aW9uQ2Fj
aGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlTG9j
YXRpb25DYWNoZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVHlwZUxvY2F0aW9uQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUeXBl
TG9jYXRpb25DYWNoZV9oCisjZGVmaW5lIFR5cGVMb2NhdGlvbkNhY2hlX2gKKworI2luY2x1ZGUg
IlR5cGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8d3Rm
L0hhc2hNZXRob2QuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNOworCitjbGFzcyBU
eXBlTG9jYXRpb25DYWNoZSB7CitwdWJsaWM6CisgICAgc3RydWN0IExvY2F0aW9uS2V5IHsKKyAg
ICAgICAgTG9jYXRpb25LZXkoKSB7fQorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTG9j
YXRpb25LZXkmIG90aGVyKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
Z2xvYmFsVmFyaWFibGVJRCA9PSBvdGhlci5tX2dsb2JhbFZhcmlhYmxlSUQKKyAgICAgICAgICAg
ICAgICAgICAmJiBtX3NvdXJjZUlEID09IG90aGVyLm1fc291cmNlSUQKKyAgICAgICAgICAgICAg
ICAgICAmJiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQKKyAgICAgICAgICAgICAgICAgICAmJiBt
X2VuZCA9PSBvdGhlci5tX2VuZDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9nbG9iYWxWYXJpYWJsZUlE
ICsgbV9zb3VyY2VJRCArIG1fc3RhcnQgKyBtX2VuZDsKKyAgICAgICAgfQorCisgICAgICAgIGlu
dDY0X3QgbV9nbG9iYWxWYXJpYWJsZUlEOworICAgICAgICBpbnRwdHJfdCBtX3NvdXJjZUlEOwor
ICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0OworICAgICAgICB1bnNpZ25lZCBtX2VuZDsKKyAgICB9
OworCisgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGdldFR5cGVMb2NhdGlvbihp
bnQ2NF90LCBpbnRwdHJfdCwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgUGFzc1JlZlB0
cjxUeXBlU2V0PiwgVk0qKTsKK3ByaXZhdGU6ICAgICAKKyAgICB0eXBlZGVmIHN0ZDo6dW5vcmRl
cmVkX21hcDxMb2NhdGlvbktleSwgVHlwZUxvY2F0aW9uKiwgSGFzaE1ldGhvZDxMb2NhdGlvbktl
eT4+IExvY2F0aW9uTWFwOworICAgIExvY2F0aW9uTWFwIG1fbG9jYXRpb25NYXA7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFR5cGVMb2NhdGlvbkNhY2hlX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCShyZXZpc2lvbiAxNzEz
NjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlR5cGVTZXQuaCIKIAorI2luY2x1ZGUgIkluc3BlY3RvckpTVHlwZUJ1aWxkZXJzLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTgsOCArNTksNiBAQCBSdW50aW1lVHlwZSBU
eXBlU2V0OjpnZXRSdW50aW1lVHlwZUZvclZhCiAgICAgICAgIHJldCA9IFR5cGVOdW1iZXI7CiAg
ICAgZWxzZSBpZiAodi5pc1N0cmluZygpKQogICAgICAgICByZXQgPSBUeXBlU3RyaW5nOwotICAg
IGVsc2UgaWYgKHYuaXNQcmltaXRpdmUoKSkKLSAgICAgICAgcmV0ID0gVHlwZVByaW1pdGl2ZTsK
ICAgICBlbHNlIGlmICh2LmlzT2JqZWN0KCkpCiAgICAgICAgIHJldCA9IFR5cGVPYmplY3Q7CiAg
ICAgZWxzZQpAQCAtNzMsNyArNzIsNyBAQCB2b2lkIFR5cGVTZXQ6OmFkZFR5cGVGb3JWYWx1ZShK
U1ZhbHVlIHYsCiAgICAgUnVudGltZVR5cGUgdCA9IGdldFJ1bnRpbWVUeXBlRm9yVmFsdWUodik7
CiAgICAgbV9zZWVuVHlwZXMgPSBtX3NlZW5UeXBlcyB8IHQ7CiAKLSAgICBpZiAoaWQgJiYgc2hh
cGUpIHsKKyAgICBpZiAoaWQgJiYgc2hhcGUgJiYgIXYuaXNTdHJpbmcoKSAmJiAhdi5pc0Z1bmN0
aW9uKCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlSURIaXN0b3J5LmlzVmFsaWRLZXko
aWQpKTsKICAgICAgICAgYXV0byBpdGVyID0gbV9zdHJ1Y3R1cmVJREhpc3RvcnkuZmluZChpZCk7
CiAgICAgICAgIGlmIChpdGVyID09IG1fc3RydWN0dXJlSURIaXN0b3J5LmVuZCgpKSB7CkBAIC05
NSw3ICs5NCw3IEBAIHZvaWQgVHlwZVNldDo6YWRkVHlwZUZvclZhbHVlKEpTVmFsdWUgdiwKICAg
ICB9CiB9CiAKLVN0cmluZyBUeXBlU2V0OjpzZWVuVHlwZXMoKSAKK1N0cmluZyBUeXBlU2V0Ojpz
ZWVuVHlwZXMoKSBjb25zdAogewogICAgIGlmIChtX3NlZW5UeXBlcyA9PSBUeXBlTm90aGluZykK
ICAgICAgICAgcmV0dXJuICIoVW5yZWFjaGVkIFN0YXRlbWVudCkiOwpAQCAtMTE2LDE3ICsxMTUs
MTMgQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAogICAgICAgICAgc2Vlbi5hcHBlbmQo
Ik51bWJlciAiKTsKICAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlU3RyaW5nKQogICAgICAgICAg
c2Vlbi5hcHBlbmQoIlN0cmluZyAiKTsKLSAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlUHJpbWl0
aXZlKQotICAgICAgICAgc2Vlbi5hcHBlbmQoIlByaW1pdGl2ZSAiKTsKICAgICBpZiAobV9zZWVu
VHlwZXMgJiBUeXBlT2JqZWN0KQogICAgICAgICAgc2Vlbi5hcHBlbmQoIk9iamVjdCAiKTsKIAog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVIaXN0b3J5LT5zaXplKCk7IGkr
KykgewogICAgICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHNoYXBlID0gbV9zdHJ1Y3R1cmVI
aXN0b3J5LT5hdChpKTsKLSAgICAgICAgaWYgKCFzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUuaXNF
bXB0eSgpKSB7Ci0gICAgICAgICAgICBzZWVuLmFwcGVuZChzaGFwZS0+bV9jb25zdHJ1Y3Rvck5h
bWUpOwotICAgICAgICAgICAgc2Vlbi5hcHBlbmQoIiAiKTsKLSAgICAgICAgfQorICAgICAgICBz
ZWVuLmFwcGVuZChzaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOworICAgICAgICBzZWVuLmFwcGVu
ZCgiICIpOwogICAgIH0KIAogICAgIGlmIChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSkgCkBA
IC0xMzksMjAgKzEzNCwxMzEgQEAgU3RyaW5nIFR5cGVTZXQ6OnNlZW5UeXBlcygpIAogICAgICAg
ICBzZWVuLmFwcGVuZCgiXSIpOwogCiAgICAgaWYgKG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgp
KSB7Ci0gICAgICAgIHNlZW4uYXBwZW5kKCJcbkxVQjogIik7Ci0gICAgICAgIHNlZW4uYXBwZW5k
KFN0cnVjdHVyZVNoYXBlOjpsZWFzdFVwcGVyQm91bmQobV9zdHJ1Y3R1cmVIaXN0b3J5KSk7Cisg
ICAgICAgIHNlZW4uYXBwZW5kKCJcbkxlYXN0IENvbW1vbiBBbmNlc3RvcjogIik7CisgICAgICAg
IHNlZW4uYXBwZW5kKGxlYXN0Q29tbW9uQW5jZXN0b3IoKSk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHNlZW4udG9TdHJpbmcoKTsKIH0KIAorYm9vbCBUeXBlU2V0Ojpkb2VzVHlwZUNvbmZvcm1Ubyh1
aW50MzJfdCB0ZXN0KSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIG91
ciBzZWVuIHR5cGVzIGNvbmZvcm0gIHRvIHRoZSB0eXBlcyBkZXNjcmliZWQgYnkgdGhlIHRlc3Qg
Yml0c3RyaW5nLiAoaS5lIHdlIGhhdmVuJ3Qgc2VlbiBtb3JlIHR5cGVzIHRoYW4gdGVzdCkuCisg
ICAgLy8gV2UgYXJlIDw9IHRvIHRob3NlIHR5cGVzIGlmIEFORGluZyB3aXRoIHRoZSBiaXRzdHJp
bmcgZG9lc24ndCB6ZXJvIG91dCBhbnkgb2Ygb3VyIGJpdHMuCisKKyAgICAvLyBGb3IgZXhhbXBs
ZToKKworICAgIC8vIDBiMDExMCAoc2VlbikKKyAgICAvLyAwYjExMTEgKHRlc3QpCisgICAgLy8g
LS0tLS0tIChBTkQpCisgICAgLy8gMGIwMTEwID09IHNlZW4KKworICAgIC8vIDBiMDExMCAoc2Vl
bikKKyAgICAvLyAwYjAwMTAgKHRlc3QpCisgICAgLy8gLS0tLS0tIChBTkQpCisgICAgLy8gMGIw
MDEwICE9IHNlZW4KKworICAgIHJldHVybiAobV9zZWVuVHlwZXMgJiB0ZXN0KSA9PSBtX3NlZW5U
eXBlczsKK30KKworU3RyaW5nIFR5cGVTZXQ6OmRpc3BsYXlOYW1lKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9zZWVuVHlwZXMgPT0gVHlwZU5vdGhpbmcpCisgICAgICAgIHJldHVybiAiIjsKKworICAg
IGlmIChtX3N0cnVjdHVyZUhpc3RvcnktPnNpemUoKSAmJiBkb2VzVHlwZUNvbmZvcm1UbyhUeXBl
T2JqZWN0IHwgVHlwZU51bGwgfCBUeXBlVW5kZWZpbmVkKSkgeworICAgICAgICBTdHJpbmcgY3Rv
ck5hbWUgPSBsZWFzdENvbW1vbkFuY2VzdG9yKCk7IAorCisgICAgICAgIGlmIChkb2VzVHlwZUNv
bmZvcm1UbyhUeXBlT2JqZWN0KSkKKyAgICAgICAgICAgIHJldHVybiBjdG9yTmFtZTsKKyAgICAg
ICAgZWxzZSBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU9iamVjdCB8IFR5cGVOdWxsIHwgVHlw
ZVVuZGVmaW5lZCkpCisgICAgICAgICAgICByZXR1cm4gY3Rvck5hbWUgKyAiPyI7CisgICAgfQor
CisgICAgLy8gVGhlIG9yZGVyIG9mIHRoZXNlIGNoZWNrcyBhcmUgaW1wb3J0YW50LiBGb3IgZXhh
bXBsZSwgaWYgYSB2YWx1ZSBpcyBvbmx5IGEgZnVuY3Rpb24sIGl0IGNvbmZvcm1zIHRvIFR5cGVG
dW5jdGlvbiwgYnV0IGl0IGFsc28gY29uZm9ybXMgdG8gVHlwZUZ1bmN0aW9uIHwgVHlwZU51bGwu
CisgICAgLy8gVGhlcmVmb3JlLCBtb3JlIHNwZWNpZmljIHR5cGVzIG11c3QgYmUgY2hlY2tlZCBm
aXJzdC4KKworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlRnVuY3Rpb24pKQorICAgICAg
ICByZXR1cm4gIkZ1bmN0aW9uIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZVVuZGVm
aW5lZCkpCisgICAgICAgIHJldHVybiAiVW5kZWZpbmVkIjsKKyAgICBpZiAoZG9lc1R5cGVDb25m
b3JtVG8oVHlwZU51bGwpKQorICAgICAgICByZXR1cm4gIk51bGwiOworICAgIGlmIChkb2VzVHlw
ZUNvbmZvcm1UbyhUeXBlQm9vbGVhbikpCisgICAgICAgIHJldHVybiAiQm9vbGVhbiI7CisgICAg
aWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVNYWNoaW5lSW50KSkKKyAgICAgICAgcmV0dXJuICJJ
bnRlZ2VyIjsKKyAgICBpZiAoZG9lc1R5cGVDb25mb3JtVG8oVHlwZU51bWJlciB8IFR5cGVNYWNo
aW5lSW50KSkKKyAgICAgICAgcmV0dXJuICJOdW1iZXIiOworICAgIGlmIChkb2VzVHlwZUNvbmZv
cm1UbyhUeXBlU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICJTdHJpbmciOworCisgICAgaWYgKGRv
ZXNUeXBlQ29uZm9ybVRvKFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJldHVy
biAiKD8pIjsKKworICAgIGlmIChkb2VzVHlwZUNvbmZvcm1UbyhUeXBlRnVuY3Rpb24gfCBUeXBl
TnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIkZ1bmN0aW9uPyI7CisgICAg
aWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVCb29sZWFuIHwgVHlwZU51bGwgfCBUeXBlVW5kZWZp
bmVkKSkKKyAgICAgICAgcmV0dXJuICJCb29sZWFuPyI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9y
bVRvKFR5cGVNYWNoaW5lSW50IHwgVHlwZU51bGwgfCBUeXBlVW5kZWZpbmVkKSkKKyAgICAgICAg
cmV0dXJuICJJbnRlZ2VyPyI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVOdW1iZXIg
fCBUeXBlTWFjaGluZUludCB8IFR5cGVOdWxsIHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJl
dHVybiAiTnVtYmVyPyI7CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVTdHJpbmcgfCBU
eXBlTnVsbCB8IFR5cGVVbmRlZmluZWQpKQorICAgICAgICByZXR1cm4gIlN0cmluZz8iOworICAg
CisgICAgaWYgKGRvZXNUeXBlQ29uZm9ybVRvKFR5cGVPYmplY3QgfCBUeXBlRnVuY3Rpb24gfCBU
eXBlU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuICJPYmplY3QiOworICAgIGlmIChkb2VzVHlwZUNv
bmZvcm1UbyhUeXBlT2JqZWN0IHwgVHlwZUZ1bmN0aW9uIHwgVHlwZVN0cmluZyB8IFR5cGVOdWxs
IHwgVHlwZVVuZGVmaW5lZCkpCisgICAgICAgIHJldHVybiAiT2JqZWN0PyI7CisKKyAgICByZXR1
cm4gIihtYW55KSI7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJy
YXk8U3RyaW5nPj4gVHlwZVNldDo6YWxsUHJpbWl0aXZlVHlwZU5hbWVzKCkgY29uc3QKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPj4gc2VlbiA9IElu
c3BlY3Rvcjo6VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOworICAgIGlmICht
X3NlZW5UeXBlcyAmIFR5cGVGdW5jdGlvbikKKyAgICAgICAgIHNlZW4tPmFkZEl0ZW0oIkZ1bmN0
aW9uIik7CisgICAgaWYgKG1fc2VlblR5cGVzICYgVHlwZVVuZGVmaW5lZCkKKyAgICAgICAgIHNl
ZW4tPmFkZEl0ZW0oIlVuZGVmaW5lZCIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdWxs
KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiTnVsbCIpOworICAgIGlmIChtX3NlZW5UeXBlcyAm
IFR5cGVCb29sZWFuKQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiQm9vbGVhbiIpOworICAgIGlm
IChtX3NlZW5UeXBlcyAmIFR5cGVNYWNoaW5lSW50KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgi
SW50ZWdlciIpOworICAgIGlmIChtX3NlZW5UeXBlcyAmIFR5cGVOdW1iZXIpCisgICAgICAgICBz
ZWVuLT5hZGRJdGVtKCJOdW1iZXIiKTsKKyAgICBpZiAobV9zZWVuVHlwZXMgJiBUeXBlU3RyaW5n
KQorICAgICAgICAgc2Vlbi0+YWRkSXRlbSgiU3RyaW5nIik7CisKKyAgICByZXR1cm4gc2Vlbi5y
ZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8
SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+PiBUeXBlU2V0OjphbGxTdHJ1Y3R1cmVSZXByZXNl
bnRhdGlvbnMoKSBjb25zdAoreworICAgIFJlZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpB
cnJheTxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVjdD4+IHJldCA9IEluc3BlY3Rvcjo6VHlwZUJ1
aWxkZXI6OkFycmF5PEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0Pjo6Y3JlYXRlKCk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlSGlzdG9yeS0+c2l6ZSgpOyBpKysp
CisgICAgICAgIHJldC0+YWRkSXRlbShtX3N0cnVjdHVyZUhpc3RvcnktPmF0KGkpLT5pbnNwZWN0
b3JSZXByZXNlbnRhdGlvbigpKTsKKworICAgIHJldHVybiByZXQucmVsZWFzZSgpOworfQorCitT
dHJpbmcgVHlwZVNldDo6bGVhc3RDb21tb25BbmNlc3RvcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFN0cnVjdHVyZVNoYXBlOjpsZWFzdENvbW1vbkFuY2VzdG9yKG1fc3RydWN0dXJlSGlzdG9yeSk7
Cit9CisKIHZvaWQgVHlwZVNldDo6ZHVtcFNlZW5UeXBlcygpCiB7CiAgICAgZGF0YUxvZyhzZWVu
VHlwZXMoKSwgIlxuIik7CiB9CiAKIFN0cnVjdHVyZVNoYXBlOjpTdHJ1Y3R1cmVTaGFwZSgpCi0g
ICAgOiBtX3Byb3BlcnR5SGFzaChudWxscHRyKQorICAgIDogbV9wcm90byhudWxscHRyKQorICAg
ICwgbV9wcm9wZXJ0eUhhc2gobnVsbHB0cikKICAgICAsIG1fZmluYWwoZmFsc2UpCiB7CiB9CkBA
IC0xNjYsNyArMjcyLDcgQEAgdm9pZCBTdHJ1Y3R1cmVTaGFwZTo6bWFya0FzRmluYWwoKQogdm9p
ZCBTdHJ1Y3R1cmVTaGFwZTo6YWRkUHJvcGVydHkoUmVmUHRyPFN0cmluZ0ltcGw+IGltcGwpCiB7
CiAgICAgQVNTRVJUKCFtX2ZpbmFsKTsKLSAgICBtX2ZpZWxkcy5zZXQoaW1wbCwgdHJ1ZSk7Cisg
ICAgbV9maWVsZHMuYXBwZW5kKGltcGwpOwogfQogCiBTdHJpbmcgU3RydWN0dXJlU2hhcGU6OnBy
b3BlcnR5SGFzaCgpIApAQCAtMTc3LDUzICsyODMsNzcgQEAgU3RyaW5nIFN0cnVjdHVyZVNoYXBl
Ojpwcm9wZXJ0eUhhc2goKSAKIAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWls
ZGVyLmFwcGVuZCgiOiIpOworICAgIGJ1aWxkZXIuYXBwZW5kKG1fY29uc3RydWN0b3JOYW1lKTsK
KyAgICBidWlsZGVyLmFwcGVuZCgiOiIpOworICAgIAogICAgIGZvciAoYXV0byBpdGVyID0gbV9m
aWVsZHMuYmVnaW4oKSwgZW5kID0gbV9maWVsZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKLSAgICAgICAgU3RyaW5nIHByb3BlcnR5ID0gU3RyaW5nKGl0ZXItPmtleSk7CisgICAgICAg
IFN0cmluZyBwcm9wZXJ0eSA9IFN0cmluZygoKml0ZXIpKTsKICAgICAgICAgcHJvcGVydHkucmVw
bGFjZSgiOiIsICJcXDoiKTsgLy8gRW5zdXJlIHRoYXQgaGFzaCh7ImZvbzoiLCAiYmFyIn0pICE9
IGhhc2goeyJmb28iLCAiOmJhciJ9KSBiZWNhdXNlIHdlJ3JlIHVzaW5nIGNvbG9ucyBhcyBhIHNl
cGFyYXRvciBhbmQgY29sb25zIGFyZSBsZWdhbCBjaGFyYWN0ZXJzIGluIGZpZWxkIG5hbWVzIGlu
IEpTLgogICAgICAgICBidWlsZGVyLmFwcGVuZChwcm9wZXJ0eSk7CiAgICAgfQogCisgICAgaWYg
KG1fcHJvdG8pIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIjoiKTsKKyAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIl9fcHJvdG9fXyIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChtX3Byb3RvLT5w
cm9wZXJ0eUhhc2goKSk7CisgICAgfQorCiAgICAgbV9wcm9wZXJ0eUhhc2ggPSBzdGQ6Om1ha2Vf
dW5pcXVlPFN0cmluZz4oYnVpbGRlci50b1N0cmluZygpKTsKICAgICByZXR1cm4gKm1fcHJvcGVy
dHlIYXNoOwogfQogCi1TdHJpbmcgU3RydWN0dXJlU2hhcGU6OmxlYXN0VXBwZXJCb3VuZChWZWN0
b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIHNoYXBlcykKK1N0cmluZyBTdHJ1Y3R1cmVTaGFw
ZTo6bGVhc3RDb21tb25BbmNlc3Rvcihjb25zdCBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBl
Pj4qIHNoYXBlcykKIHsKICAgICBpZiAoIXNoYXBlcy0+c2l6ZSgpKQogICAgICAgICByZXR1cm4g
IiI7CiAKLSAgICBTdHJpbmdCdWlsZGVyIGx1YjsKICAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+
IG9yaWdpbiA9IHNoYXBlcy0+YXQoMCk7Ci0gICAgbHViLmFwcGVuZCgieyIpOwotICAgIGZvciAo
YXV0byBpdGVyID0gb3JpZ2luLT5tX2ZpZWxkcy5iZWdpbigpLCBlbmQgPSBvcmlnaW4tPm1fZmll
bGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGJvb2wgc2hvdWxkQWRk
ID0gdHJ1ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDEsIHNpemUgPSBzaGFwZXMtPnNpemUo
KTsgaSA8IHNpemU7IGkrKykgewotICAgICAgICAgICAgLy8gSWYgYWxsIG90aGVyIFNoYXBlcyBo
YXZlIHRoZSBzYW1lIGZpZWxkIGFzIG9yaWdpbiwgYWRkIGl0IHRvIHRoZSBsZWFzdCB1cHBlciBi
b3VuZC4KLSAgICAgICAgICAgIGlmICghc2hhcGVzLT5hdChpKS0+bV9maWVsZHMuY29udGFpbnMo
aXRlci0+a2V5KSkgewotICAgICAgICAgICAgICAgIHNob3VsZEFkZCA9IGZhbHNlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2hhcGVzLT5zaXpl
KCk7IGkrKykgeworICAgICAgICBib29sIGZvdW5kTFVCID0gZmFsc2U7CisgICAgICAgIHdoaWxl
ICghZm91bmRMVUIpIHsKKyAgICAgICAgICAgIFJlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gY2hlY2sg
PSBzaGFwZXMtPmF0KGkpOworICAgICAgICAgICAgU3RyaW5nIGN1ckN0b3JOYW1lID0gb3JpZ2lu
LT5tX2NvbnN0cnVjdG9yTmFtZTsKKyAgICAgICAgICAgIHdoaWxlIChjaGVjaykgeworICAgICAg
ICAgICAgICAgIGlmIChjaGVjay0+bV9jb25zdHJ1Y3Rvck5hbWUgPT0gY3VyQ3Rvck5hbWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm91bmRMVUIgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2hlY2sgPSBjaGVj
ay0+bV9wcm90bzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZm91bmRMVUIpIHsK
KyAgICAgICAgICAgICAgICBvcmlnaW4gPSBvcmlnaW4tPm1fcHJvdG87CisgICAgICAgICAgICAg
ICAgLy8gQWxsIE9iamVjdHMgbXVzdCBzaGFyZSB0aGUgJ09iamVjdCcgUHJvdG90eXBlLiBUaGVy
ZWZvcmUsIGF0IHRoZSB2ZXJ5IGxlYXN0LCB3ZSBzaG91bGQgYWx3YXlzIGNvbnZlcmdlIG9uICdP
YmplY3QnIGJlZm9yZSByZWFjaGluZyBhIG51bGwgcHJvdG90eXBlLgorICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG9yaWdpbik7IAogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg
ICAgIGlmIChzaG91bGRBZGQpCi0gICAgICAgICAgICBsdWIuYXBwZW5kKFN0cmluZyhpdGVyLT5r
ZXkuZ2V0KCkpICsgU3RyaW5nKCIsICIpKTsKLSAgICB9CiAKLSAgICBpZiAobHViLmxlbmd0aCgp
ID49IDMpCi0gICAgICAgIGx1Yi5yZXNpemUobHViLmxlbmd0aCgpIC0gMik7IC8vIFJlbW92ZSB0
aGUgdHJhaWxpbmcgJywgJworICAgICAgICBpZiAob3JpZ2luLT5tX2NvbnN0cnVjdG9yTmFtZSA9
PSAiT2JqZWN0IikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIGx1Yi5hcHBlbmQo
In0iKTsKLSAgICAKLSAgICByZXR1cm4gbHViLnRvU3RyaW5nKCk7CisgICAgcmV0dXJuIG9yaWdp
bi0+bV9jb25zdHJ1Y3Rvck5hbWU7CiB9CiAKIFN0cmluZyBTdHJ1Y3R1cmVTaGFwZTo6c3RyaW5n
UmVwcmVzZW50YXRpb24oKQogewogICAgIFN0cmluZ0J1aWxkZXIgcmVwcmVzZW50YXRpb247Cisg
ICAgUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBjdXJTaGFwZSA9IHRoaXM7CisKICAgICByZXByZXNl
bnRhdGlvbi5hcHBlbmQoInsiKTsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fZmllbGRzLmJlZ2lu
KCksIGVuZCA9IG1fZmllbGRzLmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
IFN0cmluZyBwcm9wKGl0ZXItPmtleS5nZXQoKSk7Ci0gICAgICAgIHJlcHJlc2VudGF0aW9uLmFw
cGVuZChwcm9wKTsKLSAgICAgICAgcmVwcmVzZW50YXRpb24uYXBwZW5kKCIsICIpOworICAgIHdo
aWxlIChjdXJTaGFwZSkgeworICAgICAgICBmb3IgKGF1dG8gaXRlciA9IGN1clNoYXBlLT5tX2Zp
ZWxkcy5iZWdpbigpLCBlbmQgPSBjdXJTaGFwZS0+bV9maWVsZHMuZW5kKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgICAgIFN0cmluZyBwcm9wKCgqaXRlcikuZ2V0KCkpOworICAg
ICAgICAgICAgcmVwcmVzZW50YXRpb24uYXBwZW5kKHByb3ApOworICAgICAgICAgICAgcmVwcmVz
ZW50YXRpb24uYXBwZW5kKCIsICIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGN1clNoYXBl
LT5tX3Byb3RvKSB7CisgICAgICAgICAgICBTdHJpbmcgcHJvdCA9IFN0cmluZygiX19wcm90b19f
IikgKyBTdHJpbmcoIiBbIikgKyBjdXJTaGFwZS0+bV9wcm90by0+bV9jb25zdHJ1Y3Rvck5hbWUg
KyBTdHJpbmcoIl0iKTsKKyAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uLmFwcGVuZChwcm90KTsK
KyAgICAgICAgICAgIHJlcHJlc2VudGF0aW9uLmFwcGVuZCgiLCAiKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGN1clNoYXBlID0gY3VyU2hhcGUtPm1fcHJvdG87CiAgICAgfQogCiAgICAgaWYgKHJl
cHJlc2VudGF0aW9uLmxlbmd0aCgpID49IDMpCkBAIC0yMzQsNCArMzY0LDMwIEBAIFN0cmluZyBT
dHJ1Y3R1cmVTaGFwZTo6c3RyaW5nUmVwcmVzZW50YXQKICAgICByZXR1cm4gcmVwcmVzZW50YXRp
b24udG9TdHJpbmcoKTsKIH0KIAorUGFzc1JlZlB0cjxJbnNwZWN0b3I6Okluc3BlY3Rvck9iamVj
dD4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvclJlcHJlc2VudGF0aW9uKCkKK3sKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGJhc2UgPSBJbnNwZWN0b3I6Okluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rvcjo6SW5zcGVjdG9yT2JqZWN0
PiBjdXJyZW50T2JqZWN0ID0gYmFzZTsKKyAgICBSZWZQdHI8U3RydWN0dXJlU2hhcGU+IGN1cnJl
bnRTaGFwZSA9IHRoaXM7CisKKyAgICB3aGlsZSAoY3VycmVudFNoYXBlKSB7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+PiBmaWVsZHMgPSBJbnNw
ZWN0b3I6OlR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICAgICAgZm9y
IChhdXRvIGl0ZXIgPSBjdXJyZW50U2hhcGUtPm1fZmllbGRzLmJlZ2luKCksIGVuZCA9IGN1cnJl
bnRTaGFwZS0+bV9maWVsZHMuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgICAg
ICBmaWVsZHMtPmFkZEl0ZW0oKCppdGVyKS5nZXQoKSk7CisKKyAgICAgICAgY3VycmVudE9iamVj
dC0+c2V0QXJyYXkoQVNDSUlMaXRlcmFsKCJmaWVsZHMiKSwgZmllbGRzLT5hc0FycmF5KCkpOwor
ICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRTdHJpbmcoQVNDSUlMaXRlcmFsKCJjb25zdHJ1Y3Rv
ck5hbWUiKSwgY3VycmVudFNoYXBlLT5tX2NvbnN0cnVjdG9yTmFtZSk7CisKKyAgICAgICAgaWYg
KGN1cnJlbnRTaGFwZS0+bV9wcm90bykgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
SW5zcGVjdG9yT2JqZWN0PiBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T2JqZWN0KEFTQ0lJTGl0
ZXJhbCgicHJvdG90eXBlU3RydWN0dXJlIiksIG5leHRPYmplY3QpOworICAgICAgICAgICAgY3Vy
cmVudE9iamVjdCA9IG5leHRPYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50U2hh
cGUgPSBjdXJyZW50U2hhcGUtPm1fcHJvdG87CisgICAgfQorCisgICAgcmV0dXJuIGJhc2UucmVs
ZWFzZSgpOworfQorCiB9IC8vbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1R5cGVTZXQuaAkocmV2aXNpb24gMTcxMzY4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvVHlwZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiwxNSBA
QAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAorbmFtZXNwYWNlIEluc3BlY3RvciB7IG5hbWVzcGFjZSBUeXBlQnVpbGRlciAgeyAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBBcnJheTsKK319CisKK25hbWVzcGFjZSBJbnNwZWN0
b3IgeyAKK2NsYXNzIEluc3BlY3Rvck9iamVjdDsKK30KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNs
YXNzIEpTVmFsdWU7CkBAIC00NSw4ICs1NCw3IEBAIGVudW0gUnVudGltZVR5cGUgewogICAgIFR5
cGVNYWNoaW5lSW50ICAgICAgICAgPSAweDEwLAogICAgIFR5cGVOdW1iZXIgICAgICAgICAgICAg
PSAweDIwLAogICAgIFR5cGVTdHJpbmcgICAgICAgICAgICAgPSAweDQwLAotICAgIFR5cGVQcmlt
aXRpdmUgICAgICAgICAgPSAweDgwLAotICAgIFR5cGVPYmplY3QgICAgICAgICAgICAgPSAweDEw
MAorICAgIFR5cGVPYmplY3QgICAgICAgICAgICAgPSAweDgwCiB9OwogCiBjbGFzcyBTdHJ1Y3R1
cmVTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPFN0cnVjdHVyZVNoYXBlPiB7CkBAIC01OSwxMiAr
NjcsMTcgQEAgcHVibGljOgogICAgIFN0cmluZyBwcm9wZXJ0eUhhc2goKTsKICAgICB2b2lkIG1h
cmtBc0ZpbmFsKCk7CiAgICAgdm9pZCBhZGRQcm9wZXJ0eShSZWZQdHI8U3RyaW5nSW1wbD4pOwot
ICAgIHN0YXRpYyBTdHJpbmcgbGVhc3RVcHBlckJvdW5kKFZlY3RvcjxSZWZQdHI8U3RydWN0dXJl
U2hhcGU+PiopOwogICAgIFN0cmluZyBzdHJpbmdSZXByZXNlbnRhdGlvbigpOwotICAgIHZvaWQg
c2V0Q29uc3RydWN0b3JOYW1lKFN0cmluZyBuYW1lKSB7IG1fY29uc3RydWN0b3JOYW1lID0gbmFt
ZTsgfQorICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpJbnNwZWN0b3JPYmplY3Q+IGluc3BlY3Rv
clJlcHJlc2VudGF0aW9uKCk7CisgICAgdm9pZCBzZXRDb25zdHJ1Y3Rvck5hbWUoU3RyaW5nIG5h
bWUpIHsgbV9jb25zdHJ1Y3Rvck5hbWUgPSAobmFtZS5pc0VtcHR5KCkgPyAiT2JqZWN0IiA6IG5h
bWUpOyB9CisgICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSgpIHsgcmV0dXJuIG1fY29uc3RydWN0
b3JOYW1lOyB9CisgICAgdm9pZCBzZXRQcm90byhQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiBz
aGFwZSkgeyBtX3Byb3RvID0gc2hhcGU7IH0KIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPFJlZlB0
cjxTdHJpbmdJbXBsPiwgYm9vbD4gbV9maWVsZHM7ICAgICAgICAgCisgICAgc3RhdGljIFN0cmlu
ZyBsZWFzdENvbW1vbkFuY2VzdG9yKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3RydWN0dXJlU2hhcGU+
PiopOworCisgICAgVmVjdG9yPFJlZlB0cjxTdHJpbmdJbXBsPj4gbV9maWVsZHM7CisgICAgUmVm
UHRyPFN0cnVjdHVyZVNoYXBlPiBtX3Byb3RvOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHJpbmc+
IG1fcHJvcGVydHlIYXNoOwogICAgIFN0cmluZyBtX2NvbnN0cnVjdG9yTmFtZTsKICAgICBib29s
IG1fZmluYWw7CkBAIC03NywxMSArOTAsMTcgQEAgcHVibGljOgogICAgIFR5cGVTZXQoKTsKICAg
ICB2b2lkIGFkZFR5cGVGb3JWYWx1ZShKU1ZhbHVlIHYsIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hh
cGU+LCBTdHJ1Y3R1cmVJRCk7CiAgICAgc3RhdGljIFJ1bnRpbWVUeXBlIGdldFJ1bnRpbWVUeXBl
Rm9yVmFsdWUoSlNWYWx1ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHNlZW5UeXBl
cygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBzZWVuVHlwZXMoKSBjb25zdDsKKyAg
ICBTdHJpbmcgZGlzcGxheU5hbWUoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvcjo6
VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz4+IGFsbFByaW1pdGl2ZVR5cGVOYW1lcygpIGNvbnN0
OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yOjpUeXBlQnVpbGRlcjo6QXJyYXk8SW5zcGVjdG9y
OjpJbnNwZWN0b3JPYmplY3Q+PiBhbGxTdHJ1Y3R1cmVSZXByZXNlbnRhdGlvbnMoKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICB1aW50MzJfdCBtX3NlZW5UeXBlczsKKyAgICBTdHJpbmcgbGVhc3RD
b21tb25BbmNlc3RvcigpIGNvbnN0OwogICAgIHZvaWQgZHVtcFNlZW5UeXBlcygpOworICAgIGJv
b2wgZG9lc1R5cGVDb25mb3JtVG8odWludDMyX3QgdGVzdCkgY29uc3Q7CisKKyAgICB1aW50MzJf
dCBtX3NlZW5UeXBlczsKICAgICBWZWN0b3I8UmVmUHRyPFN0cnVjdHVyZVNoYXBlPj4qIG1fc3Ry
dWN0dXJlSGlzdG9yeTsKICAgICBIYXNoTWFwPFN0cnVjdHVyZUlELCB1aW50OF90PiBtX3N0cnVj
dHVyZUlESGlzdG9yeTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAxNzEzNjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkyNiw0MyArOTI2LDE2IEBAIHZvaWQgVk06OnNldEVuYWJs
ZWRQcm9maWxlcihMZWdhY3lQcm9maWwKICAgICB9CiB9CiAKLVN0cmluZyBWTTo6Z2V0VHlwZXNG
b3JWYXJpYWJsZUF0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCwgY29uc3QgU3RyaW5nJiB2YXJpYWJs
ZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlSURBc1N0cmluZykKLXsKLSAgICBpZiAoIWlzUHJv
ZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCi0gICAgICAgIHJldHVybiAiKE5vdCBQcm9m
aWxpbmcpIjsKLQotICAgIGJvb2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9IHNvdXJj
ZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpOwotICAgIGlmICghb2theSkKLSAgICAg
ICAgQ1JBU0goKTsKLQotICAgIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3RhdGUoKTsK
LSAgICByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXItPmdldFR5cGVzRm9yVmFyaWFi
bGVJbkF0T2Zmc2V0KG9mZnNldCwgdmFyaWFibGVOYW1lLCBzb3VyY2VJRCk7Ci19Ci0KLXZvaWQg
Vk06OnVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3RhdGUoKQotewotICAgIGlmICghaXNQ
cm9maWxpbmdUeXBlc1dpdGhIaWdoRmlkZWxpdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aGlnaEZpZGVsaXR5TG9nKCktPnByb2Nlc3NIaWdoRmlkZWxpdHlMb2coZmFsc2UsICJWTSBVcGRh
dGUiKTsKLX0KLQogdm9pZCBWTTo6ZHVtcEhpZ2hGaWRlbGl0eVByb2ZpbGluZ1R5cGVzKCkKIHsK
ICAgICBpZiAoIWlzUHJvZmlsaW5nVHlwZXNXaXRoSGlnaEZpZGVsaXR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHVwZGF0ZUhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlU3RhdGUoKTsKKyAgICBo
aWdoRmlkZWxpdHlMb2coKS0+cHJvY2Vzc0hpZ2hGaWRlbGl0eUxvZygiVk0gRHVtcCBUeXBlcyIp
OwogICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciogcHJvZmlsZXIgPSBtX2hpZ2hGaWRlbGl0
eVR5cGVQcm9maWxlci5nZXQoKTsKICAgICBmb3IgKEJhZzxUeXBlTG9jYXRpb24+OjppdGVyYXRv
ciBpdGVyID0gbV9sb2NhdGlvbkluZm8uYmVnaW4oKTsgISFpdGVyOyArK2l0ZXIpIHsKICAgICAg
ICAgVHlwZUxvY2F0aW9uKiBsb2NhdGlvbiA9ICppdGVyOwotICAgICAgICBkYXRhTG9nRigiW1N0
YXJ0LCBFbmRdOjpbJXUsICV1XSAiLCBsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCBsb2NhdGlvbi0+
bV9kaXZvdEVuZCk7Ci0gICAgICAgIGRhdGFMb2coIlxuXHRcdCNMb2NhbCNcblx0XHQiLAotICAg
ICAgICAgICAgICAgIHByb2ZpbGVyLT5nZXRMb2NhbFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldChs
b2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCAiIiwgbG9jYXRpb24tPm1fc291cmNlSUQpLnJlcGxhY2Uo
IlxuIiwgIlxuXHRcdCIpLAotICAgICAgICAgICAgICAgICJcblx0XHQjR2xvYmFsI1xuXHRcdCIs
Ci0gICAgICAgICAgICAgICAgcHJvZmlsZXItPmdldEdsb2JhbFR5cGVzRm9yVmFyaWFibGVBdE9m
ZnNldChsb2NhdGlvbi0+bV9kaXZvdFN0YXJ0LCAiIiwgbG9jYXRpb24tPm1fc291cmNlSUQpLnJl
cGxhY2UoIlxuIiwgIlxuXHRcdCIpLAotICAgICAgICAgICAgICAgICJcbiIpOworICAgICAgICBw
cm9maWxlci0+bG9nVHlwZXNGb3JUeXBlTG9jYXRpb24obG9jYXRpb24pOwogICAgIH0KIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxNzEzNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MTUs
MTAgKzUxNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBCdWlsdGluRXhlY3V0YWJsZXMq
IGJ1aWx0aW5FeGVjdXRhYmxlcygpIHsgcmV0dXJuIG1fYnVpbHRpbkV4ZWN1dGFibGVzLmdldCgp
OyB9CiAKICAgICAgICAgYm9vbCBpc1Byb2ZpbGluZ1R5cGVzV2l0aEhpZ2hGaWRlbGl0eSgpIHsg
cmV0dXJuICEhbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXI7IH0KLSAgICAgICAgU3RyaW5nIGdl
dFR5cGVzRm9yVmFyaWFibGVBdE9mZnNldCh1bnNpZ25lZCBkaXZvdCwgY29uc3QgU3RyaW5nJiB2
YXJpYWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpOwogICAgICAgICBIaWdoRmlkZWxp
dHlMb2cqIGhpZ2hGaWRlbGl0eUxvZygpIHsgcmV0dXJuIG1faGlnaEZpZGVsaXR5TG9nLmdldCgp
OyB9CiAgICAgICAgIEhpZ2hGaWRlbGl0eVR5cGVQcm9maWxlciogaGlnaEZpZGVsaXR5VHlwZVBy
b2ZpbGVyKCkgeyByZXR1cm4gbV9oaWdoRmlkZWxpdHlUeXBlUHJvZmlsZXIuZ2V0KCk7IH0KLSAg
ICAgICAgdm9pZCB1cGRhdGVIaWdoRmlkZWxpdHlUeXBlUHJvZmlsZVN0YXRlKCk7CiAgICAgICAg
IFR5cGVMb2NhdGlvbiogbmV4dExvY2F0aW9uKCkgeyByZXR1cm4gbV9sb2NhdGlvbkluZm8uYWRk
KCk7IH0gLy9UT0RPOiBwb3NzaWJsZSBvcHRtaXphdGlvbjogd2hlbiBjb2RlYmxvY2tzIGRpZSwg
cmVwb3J0IHdoaWNoIGxvY2F0aW9ucyBhcmUgbm8gbG9uZ2VyIGJlaW5nIGNoYW5nZWQgc28gd2Ug
ZG9uJ3Qgd2FsayBvdmVyIHRoZW0KICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1w
SGlnaEZpZGVsaXR5UHJvZmlsaW5nVHlwZXMoKTsKICAgICAgICAgaW50NjRfdCBnZXROZXh0VW5p
cXVlVmFyaWFibGVJRCgpIHsgcmV0dXJuIG1fbmV4dFVuaXF1ZVZhcmlhYmxlSUQrKzsgfQo=
</data>
<flag name="review"
          id="259906"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>